linux/arch/arm/mach-sa1100/lart.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 * linux/arch/arm/mach-sa1100/lart.c
   4 */
   5
   6#include <linux/init.h>
   7#include <linux/kernel.h>
   8#include <linux/platform_data/sa11x0-serial.h>
   9#include <linux/tty.h>
  10#include <linux/gpio.h>
  11#include <linux/leds.h>
  12#include <linux/platform_device.h>
  13
  14#include <video/sa1100fb.h>
  15
  16#include <mach/hardware.h>
  17#include <asm/setup.h>
  18#include <asm/mach-types.h>
  19#include <asm/page.h>
  20
  21#include <asm/mach/arch.h>
  22#include <asm/mach/map.h>
  23#include <linux/platform_data/mfd-mcp-sa11x0.h>
  24#include <mach/irqs.h>
  25
  26#include "generic.h"
  27
  28static struct mcp_plat_data lart_mcp_data = {
  29        .mccr0          = MCCR0_ADM,
  30        .sclk_rate      = 11981000,
  31};
  32
  33#ifdef LART_GREY_LCD
  34static struct sa1100fb_mach_info lart_grey_info = {
  35        .pixclock       = 150000,       .bpp            = 4,
  36        .xres           = 320,          .yres           = 240,
  37
  38        .hsync_len      = 1,            .vsync_len      = 1,
  39        .left_margin    = 4,            .upper_margin   = 0,
  40        .right_margin   = 2,            .lower_margin   = 0,
  41
  42        .cmap_greyscale = 1,
  43        .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
  44
  45        .lccr0          = LCCR0_Mono | LCCR0_Sngl | LCCR0_Pas | LCCR0_4PixMono,
  46        .lccr3          = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512),
  47};
  48#endif
  49#ifdef LART_COLOR_LCD
  50static struct sa1100fb_mach_info lart_color_info = {
  51        .pixclock       = 150000,       .bpp            = 16,
  52        .xres           = 320,          .yres           = 240,
  53
  54        .hsync_len      = 2,            .vsync_len      = 3,
  55        .left_margin    = 69,           .upper_margin   = 14,
  56        .right_margin   = 8,            .lower_margin   = 4,
  57
  58        .lccr0          = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
  59        .lccr3          = LCCR3_OutEnH | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512),
  60};
  61#endif
  62#ifdef LART_VIDEO_OUT
  63static struct sa1100fb_mach_info lart_video_info = {
  64        .pixclock       = 39721,        .bpp            = 16,
  65        .xres           = 640,          .yres           = 480,
  66
  67        .hsync_len      = 95,           .vsync_len      = 2,
  68        .left_margin    = 40,           .upper_margin   = 32,
  69        .right_margin   = 24,           .lower_margin   = 11,
  70
  71        .sync           = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
  72
  73        .lccr0          = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
  74        .lccr3          = LCCR3_OutEnL | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512),
  75};
  76#endif
  77
  78#ifdef LART_KIT01_LCD
  79static struct sa1100fb_mach_info lart_kit01_info = {
  80        .pixclock       = 63291,        .bpp            = 16,
  81        .xres           = 640,          .yres           = 480,
  82
  83        .hsync_len      = 64,           .vsync_len      = 3,
  84        .left_margin    = 122,          .upper_margin   = 45,
  85        .right_margin   = 10,           .lower_margin   = 10,
  86
  87        .lccr0          = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
  88        .lccr3          = LCCR3_OutEnH | LCCR3_PixFlEdg
  89};
  90#endif
  91
  92static void __init lart_init(void)
  93{
  94        struct sa1100fb_mach_info *inf = NULL;
  95
  96#ifdef LART_GREY_LCD
  97        inf = &lart_grey_info;
  98#endif
  99#ifdef LART_COLOR_LCD
 100        inf = &lart_color_info;
 101#endif
 102#ifdef LART_VIDEO_OUT
 103        inf = &lart_video_info;
 104#endif
 105#ifdef LART_KIT01_LCD
 106        inf = &lart_kit01_info;
 107#endif
 108
 109        if (inf)
 110                sa11x0_register_lcd(inf);
 111
 112        sa11x0_ppc_configure_mcp();
 113        sa11x0_register_mcp(&lart_mcp_data);
 114}
 115
 116static struct map_desc lart_io_desc[] __initdata = {
 117        {       /* main flash memory */
 118                .virtual        =  0xe8000000,
 119                .pfn            = __phys_to_pfn(0x00000000),
 120                .length         = 0x00400000,
 121                .type           = MT_DEVICE
 122        }, {    /* main flash, alternative location */
 123                .virtual        =  0xec000000,
 124                .pfn            = __phys_to_pfn(0x08000000),
 125                .length         = 0x00400000,
 126                .type           = MT_DEVICE
 127        }
 128};
 129
 130/* LEDs */
 131struct gpio_led lart_gpio_leds[] = {
 132        {
 133                .name                   = "lart:red",
 134                .default_trigger        = "cpu0",
 135                .gpio                   = 23,
 136        },
 137};
 138
 139static struct gpio_led_platform_data lart_gpio_led_info = {
 140        .leds           = lart_gpio_leds,
 141        .num_leds       = ARRAY_SIZE(lart_gpio_leds),
 142};
 143
 144static struct platform_device lart_leds = {
 145        .name   = "leds-gpio",
 146        .id     = -1,
 147        .dev    = {
 148                .platform_data  = &lart_gpio_led_info,
 149        }
 150};
 151static void __init lart_map_io(void)
 152{
 153        sa1100_map_io();
 154        iotable_init(lart_io_desc, ARRAY_SIZE(lart_io_desc));
 155
 156        sa1100_register_uart(0, 3);
 157        sa1100_register_uart(1, 1);
 158        sa1100_register_uart(2, 2);
 159
 160        GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD);
 161        GPDR |= GPIO_UART_TXD;
 162        GPDR &= ~GPIO_UART_RXD;
 163        PPAR |= PPAR_UPR;
 164
 165        platform_device_register(&lart_leds);
 166}
 167
 168MACHINE_START(LART, "LART")
 169        .atag_offset    = 0x100,
 170        .map_io         = lart_map_io,
 171        .nr_irqs        = SA1100_NR_IRQS,
 172        .init_irq       = sa1100_init_irq,
 173        .init_machine   = lart_init,
 174        .init_late      = sa11x0_init_late,
 175        .init_time      = sa1100_timer_init,
 176        .restart        = sa11x0_restart,
 177MACHINE_END
 178