root/arch/arm/mach-pxa/littleton.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. littleton_init_lcd
  2. littleton_init_lcd
  3. littleton_init_spi
  4. littleton_init_spi
  5. littleton_init_keypad
  6. littleton_init_keypad
  7. littleton_init_mmc
  8. littleton_init_mmc
  9. littleton_init_nand
  10. littleton_init_nand
  11. littleton_init_i2c
  12. littleton_init_i2c
  13. littleton_init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  *  linux/arch/arm/mach-pxa/littleton.c
   4  *
   5  *  Support for the Marvell Littleton Development Platform.
   6  *
   7  *  Author:     Jason Chagas (largely modified code)
   8  *  Created:    Nov 20, 2006
   9  *  Copyright:  (C) Copyright 2006 Marvell International Ltd.
  10  *
  11  *  2007-11-22  modified to align with latest kernel
  12  *              eric miao <eric.miao@marvell.com>
  13  */
  14 
  15 #include <linux/init.h>
  16 #include <linux/interrupt.h>
  17 #include <linux/delay.h>
  18 #include <linux/platform_device.h>
  19 #include <linux/clk.h>
  20 #include <linux/gpio/machine.h>
  21 #include <linux/spi/spi.h>
  22 #include <linux/spi/pxa2xx_spi.h>
  23 #include <linux/smc91x.h>
  24 #include <linux/i2c.h>
  25 #include <linux/leds.h>
  26 #include <linux/mfd/da903x.h>
  27 #include <linux/platform_data/max732x.h>
  28 #include <linux/platform_data/i2c-pxa.h>
  29 
  30 #include <asm/types.h>
  31 #include <asm/setup.h>
  32 #include <asm/memory.h>
  33 #include <asm/mach-types.h>
  34 #include <mach/hardware.h>
  35 #include <asm/irq.h>
  36 
  37 #include <asm/mach/arch.h>
  38 #include <asm/mach/map.h>
  39 #include <asm/mach/irq.h>
  40 
  41 #include "pxa300.h"
  42 #include "devices.h"
  43 #include <linux/platform_data/video-pxafb.h>
  44 #include <linux/platform_data/mmc-pxamci.h>
  45 #include <linux/platform_data/keypad-pxa27x.h>
  46 #include "littleton.h"
  47 #include <linux/platform_data/mtd-nand-pxa3xx.h>
  48 
  49 #include "generic.h"
  50 
  51 /* Littleton MFP configurations */
  52 static mfp_cfg_t littleton_mfp_cfg[] __initdata = {
  53         /* LCD */
  54         GPIO54_LCD_LDD_0,
  55         GPIO55_LCD_LDD_1,
  56         GPIO56_LCD_LDD_2,
  57         GPIO57_LCD_LDD_3,
  58         GPIO58_LCD_LDD_4,
  59         GPIO59_LCD_LDD_5,
  60         GPIO60_LCD_LDD_6,
  61         GPIO61_LCD_LDD_7,
  62         GPIO62_LCD_LDD_8,
  63         GPIO63_LCD_LDD_9,
  64         GPIO64_LCD_LDD_10,
  65         GPIO65_LCD_LDD_11,
  66         GPIO66_LCD_LDD_12,
  67         GPIO67_LCD_LDD_13,
  68         GPIO68_LCD_LDD_14,
  69         GPIO69_LCD_LDD_15,
  70         GPIO70_LCD_LDD_16,
  71         GPIO71_LCD_LDD_17,
  72         GPIO72_LCD_FCLK,
  73         GPIO73_LCD_LCLK,
  74         GPIO74_LCD_PCLK,
  75         GPIO75_LCD_BIAS,
  76 
  77         /* SSP2 */
  78         GPIO25_SSP2_SCLK,
  79         GPIO27_SSP2_TXD,
  80         GPIO17_GPIO,    /* SFRM as chip-select */
  81 
  82         /* Debug Ethernet */
  83         GPIO90_GPIO,
  84 
  85         /* Keypad */
  86         GPIO107_KP_DKIN_0,
  87         GPIO108_KP_DKIN_1,
  88         GPIO115_KP_MKIN_0,
  89         GPIO116_KP_MKIN_1,
  90         GPIO117_KP_MKIN_2,
  91         GPIO118_KP_MKIN_3,
  92         GPIO119_KP_MKIN_4,
  93         GPIO120_KP_MKIN_5,
  94         GPIO121_KP_MKOUT_0,
  95         GPIO122_KP_MKOUT_1,
  96         GPIO123_KP_MKOUT_2,
  97         GPIO124_KP_MKOUT_3,
  98         GPIO125_KP_MKOUT_4,
  99 
 100         /* MMC1 */
 101         GPIO3_MMC1_DAT0,
 102         GPIO4_MMC1_DAT1,
 103         GPIO5_MMC1_DAT2,
 104         GPIO6_MMC1_DAT3,
 105         GPIO7_MMC1_CLK,
 106         GPIO8_MMC1_CMD,
 107         GPIO15_GPIO, /* card detect */
 108 
 109         /* UART3 */
 110         GPIO107_UART3_CTS,
 111         GPIO108_UART3_RTS,
 112         GPIO109_UART3_TXD,
 113         GPIO110_UART3_RXD,
 114 };
 115 
 116 static struct resource smc91x_resources[] = {
 117         [0] = {
 118                 .start  = (LITTLETON_ETH_PHYS + 0x300),
 119                 .end    = (LITTLETON_ETH_PHYS + 0xfffff),
 120                 .flags  = IORESOURCE_MEM,
 121         },
 122         [1] = {
 123                 .start  = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO90)),
 124                 .end    = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO90)),
 125                 .flags  = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
 126         }
 127 };
 128 
 129 static struct smc91x_platdata littleton_smc91x_info = {
 130         .flags  = SMC91X_USE_8BIT | SMC91X_USE_16BIT |
 131                   SMC91X_NOWAIT | SMC91X_USE_DMA,
 132 };
 133 
 134 static struct platform_device smc91x_device = {
 135         .name           = "smc91x",
 136         .id             = 0,
 137         .num_resources  = ARRAY_SIZE(smc91x_resources),
 138         .resource       = smc91x_resources,
 139         .dev            = {
 140                 .platform_data = &littleton_smc91x_info,
 141         },
 142 };
 143 
 144 #if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
 145 static struct pxafb_mode_info tpo_tdo24mtea1_modes[] = {
 146         [0] = {
 147                 /* VGA */
 148                 .pixclock       = 38250,
 149                 .xres           = 480,
 150                 .yres           = 640,
 151                 .bpp            = 16,
 152                 .hsync_len      = 8,
 153                 .left_margin    = 8,
 154                 .right_margin   = 24,
 155                 .vsync_len      = 2,
 156                 .upper_margin   = 2,
 157                 .lower_margin   = 4,
 158                 .sync           = 0,
 159         },
 160         [1] = {
 161                 /* QVGA */
 162                 .pixclock       = 153000,
 163                 .xres           = 240,
 164                 .yres           = 320,
 165                 .bpp            = 16,
 166                 .hsync_len      = 8,
 167                 .left_margin    = 8,
 168                 .right_margin   = 88,
 169                 .vsync_len      = 2,
 170                 .upper_margin   = 2,
 171                 .lower_margin   = 2,
 172                 .sync           = 0,
 173         },
 174 };
 175 
 176 static struct pxafb_mach_info littleton_lcd_info = {
 177         .modes                  = tpo_tdo24mtea1_modes,
 178         .num_modes              = 2,
 179         .lcd_conn               = LCD_COLOR_TFT_16BPP,
 180 };
 181 
 182 static void __init littleton_init_lcd(void)
 183 {
 184         pxa_set_fb_info(NULL, &littleton_lcd_info);
 185 }
 186 #else
 187 static inline void littleton_init_lcd(void) {};
 188 #endif /* CONFIG_FB_PXA || CONFIG_FB_PXA_MODULE */
 189 
 190 #if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MODULE)
 191 static struct pxa2xx_spi_controller littleton_spi_info = {
 192         .num_chipselect         = 1,
 193 };
 194 
 195 static struct pxa2xx_spi_chip littleton_tdo24m_chip = {
 196         .rx_threshold   = 1,
 197         .tx_threshold   = 1,
 198         .gpio_cs        = LITTLETON_GPIO_LCD_CS,
 199 };
 200 
 201 static struct spi_board_info littleton_spi_devices[] __initdata = {
 202         {
 203                 .modalias       = "tdo24m",
 204                 .max_speed_hz   = 1000000,
 205                 .bus_num        = 2,
 206                 .chip_select    = 0,
 207                 .controller_data= &littleton_tdo24m_chip,
 208         },
 209 };
 210 
 211 static void __init littleton_init_spi(void)
 212 {
 213         pxa2xx_set_spi_info(2, &littleton_spi_info);
 214         spi_register_board_info(ARRAY_AND_SIZE(littleton_spi_devices));
 215 }
 216 #else
 217 static inline void littleton_init_spi(void) {}
 218 #endif
 219 
 220 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 221 static const unsigned int littleton_matrix_key_map[] = {
 222         /* KEY(row, col, key_code) */
 223         KEY(1, 3, KEY_0), KEY(0, 0, KEY_1), KEY(1, 0, KEY_2), KEY(2, 0, KEY_3),
 224         KEY(0, 1, KEY_4), KEY(1, 1, KEY_5), KEY(2, 1, KEY_6), KEY(0, 2, KEY_7),
 225         KEY(1, 2, KEY_8), KEY(2, 2, KEY_9),
 226 
 227         KEY(0, 3, KEY_KPASTERISK),      /* * */
 228         KEY(2, 3, KEY_KPDOT),           /* # */
 229 
 230         KEY(5, 4, KEY_ENTER),
 231 
 232         KEY(5, 0, KEY_UP),
 233         KEY(5, 1, KEY_DOWN),
 234         KEY(5, 2, KEY_LEFT),
 235         KEY(5, 3, KEY_RIGHT),
 236         KEY(3, 2, KEY_HOME),
 237         KEY(4, 1, KEY_END),
 238         KEY(3, 3, KEY_BACK),
 239 
 240         KEY(4, 0, KEY_SEND),
 241         KEY(4, 2, KEY_VOLUMEUP),
 242         KEY(4, 3, KEY_VOLUMEDOWN),
 243 
 244         KEY(3, 0, KEY_F22),     /* soft1 */
 245         KEY(3, 1, KEY_F23),     /* soft2 */
 246 };
 247 
 248 static struct matrix_keymap_data littleton_matrix_keymap_data = {
 249         .keymap                 = littleton_matrix_key_map,
 250         .keymap_size            = ARRAY_SIZE(littleton_matrix_key_map),
 251 };
 252 
 253 static struct pxa27x_keypad_platform_data littleton_keypad_info = {
 254         .matrix_key_rows        = 6,
 255         .matrix_key_cols        = 5,
 256         .matrix_keymap_data     = &littleton_matrix_keymap_data,
 257 
 258         .enable_rotary0         = 1,
 259         .rotary0_up_key         = KEY_UP,
 260         .rotary0_down_key       = KEY_DOWN,
 261 
 262         .debounce_interval      = 30,
 263 };
 264 static void __init littleton_init_keypad(void)
 265 {
 266         pxa_set_keypad_info(&littleton_keypad_info);
 267 }
 268 #else
 269 static inline void littleton_init_keypad(void) {}
 270 #endif
 271 
 272 #if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
 273 static struct pxamci_platform_data littleton_mci_platform_data = {
 274         .detect_delay_ms        = 200,
 275         .ocr_mask               = MMC_VDD_32_33 | MMC_VDD_33_34,
 276 };
 277 
 278 static struct gpiod_lookup_table littleton_mci_gpio_table = {
 279         .dev_id = "pxa2xx-mci.0",
 280         .table = {
 281                 /* Card detect on MFP (gpio-pxa) GPIO 15 */
 282                 GPIO_LOOKUP("gpio-pxa", MFP_PIN_GPIO15,
 283                             "cd", GPIO_ACTIVE_LOW),
 284                 { },
 285         },
 286 };
 287 
 288 static void __init littleton_init_mmc(void)
 289 {
 290         gpiod_add_lookup_table(&littleton_mci_gpio_table);
 291         pxa_set_mci_info(&littleton_mci_platform_data);
 292 }
 293 #else
 294 static inline void littleton_init_mmc(void) {}
 295 #endif
 296 
 297 #if IS_ENABLED(CONFIG_MTD_NAND_MARVELL)
 298 static struct mtd_partition littleton_nand_partitions[] = {
 299         [0] = {
 300                 .name        = "Bootloader",
 301                 .offset      = 0,
 302                 .size        = 0x060000,
 303                 .mask_flags  = MTD_WRITEABLE, /* force read-only */
 304         },
 305         [1] = {
 306                 .name        = "Kernel",
 307                 .offset      = 0x060000,
 308                 .size        = 0x200000,
 309                 .mask_flags  = MTD_WRITEABLE, /* force read-only */
 310         },
 311         [2] = {
 312                 .name        = "Filesystem",
 313                 .offset      = 0x0260000,
 314                 .size        = 0x3000000,     /* 48M - rootfs */
 315         },
 316         [3] = {
 317                 .name        = "MassStorage",
 318                 .offset      = 0x3260000,
 319                 .size        = 0x3d40000,
 320         },
 321         [4] = {
 322                 .name        = "BBT",
 323                 .offset      = 0x6FA0000,
 324                 .size        = 0x80000,
 325                 .mask_flags  = MTD_WRITEABLE,  /* force read-only */
 326         },
 327         /* NOTE: we reserve some blocks at the end of the NAND flash for
 328          * bad block management, and the max number of relocation blocks
 329          * differs on different platforms. Please take care with it when
 330          * defining the partition table.
 331          */
 332 };
 333 
 334 static struct pxa3xx_nand_platform_data littleton_nand_info = {
 335         .parts          = littleton_nand_partitions,
 336         .nr_parts       = ARRAY_SIZE(littleton_nand_partitions),
 337 };
 338 
 339 static void __init littleton_init_nand(void)
 340 {
 341         pxa3xx_set_nand_info(&littleton_nand_info);
 342 }
 343 #else
 344 static inline void littleton_init_nand(void) {}
 345 #endif /* IS_ENABLED(CONFIG_MTD_NAND_MARVELL) */
 346 
 347 #if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
 348 static struct led_info littleton_da9034_leds[] = {
 349         [0] = {
 350                 .name   = "littleton:keypad1",
 351                 .flags  = DA9034_LED_RAMP,
 352         },
 353         [1] = {
 354                 .name   = "littleton:keypad2",
 355                 .flags  = DA9034_LED_RAMP,
 356         },
 357         [2] = {
 358                 .name   = "littleton:vibra",
 359                 .flags  = 0,
 360         },
 361 };
 362 
 363 static struct da9034_touch_pdata littleton_da9034_touch = {
 364         .x_inverted     = 1,
 365         .interval_ms    = 20,
 366 };
 367 
 368 static struct da903x_subdev_info littleton_da9034_subdevs[] = {
 369         {
 370                 .name           = "da903x-led",
 371                 .id             = DA9034_ID_LED_1,
 372                 .platform_data  = &littleton_da9034_leds[0],
 373         }, {
 374                 .name           = "da903x-led",
 375                 .id             = DA9034_ID_LED_2,
 376                 .platform_data  = &littleton_da9034_leds[1],
 377         }, {
 378                 .name           = "da903x-led",
 379                 .id             = DA9034_ID_VIBRA,
 380                 .platform_data  = &littleton_da9034_leds[2],
 381         }, {
 382                 .name           = "da903x-backlight",
 383                 .id             = DA9034_ID_WLED,
 384         }, {
 385                 .name           = "da9034-touch",
 386                 .id             = DA9034_ID_TOUCH,
 387                 .platform_data  = &littleton_da9034_touch,
 388         },
 389 };
 390 
 391 static struct da903x_platform_data littleton_da9034_info = {
 392         .num_subdevs    = ARRAY_SIZE(littleton_da9034_subdevs),
 393         .subdevs        = littleton_da9034_subdevs,
 394 };
 395 
 396 static struct max732x_platform_data littleton_max7320_info = {
 397         .gpio_base      = EXT0_GPIO_BASE,
 398 };
 399 
 400 static struct i2c_board_info littleton_i2c_info[] = {
 401         [0] = {
 402                 .type           = "da9034",
 403                 .addr           = 0x34,
 404                 .platform_data  = &littleton_da9034_info,
 405                 .irq            = PXA_GPIO_TO_IRQ(mfp_to_gpio(MFP_PIN_GPIO18)),
 406         },
 407         [1] = {
 408                 .type           = "max7320",
 409                 .addr           = 0x50,
 410                 .platform_data  = &littleton_max7320_info,
 411         },
 412 };
 413 
 414 static void __init littleton_init_i2c(void)
 415 {
 416         pxa_set_i2c_info(NULL);
 417         i2c_register_board_info(0, ARRAY_AND_SIZE(littleton_i2c_info));
 418 }
 419 #else
 420 static inline void littleton_init_i2c(void) {}
 421 #endif /* CONFIG_I2C_PXA || CONFIG_I2C_PXA_MODULE */
 422 
 423 static void __init littleton_init(void)
 424 {
 425         /* initialize MFP configurations */
 426         pxa3xx_mfp_config(ARRAY_AND_SIZE(littleton_mfp_cfg));
 427 
 428         pxa_set_ffuart_info(NULL);
 429         pxa_set_btuart_info(NULL);
 430         pxa_set_stuart_info(NULL);
 431 
 432         /*
 433          * Note: we depend bootloader set the correct
 434          * value to MSC register for SMC91x.
 435          */
 436         platform_device_register(&smc91x_device);
 437 
 438         littleton_init_spi();
 439         littleton_init_i2c();
 440         littleton_init_mmc();
 441         littleton_init_lcd();
 442         littleton_init_keypad();
 443         littleton_init_nand();
 444 }
 445 
 446 MACHINE_START(LITTLETON, "Marvell Form Factor Development Platform (aka Littleton)")
 447         .atag_offset    = 0x100,
 448         .map_io         = pxa3xx_map_io,
 449         .nr_irqs        = LITTLETON_NR_IRQS,
 450         .init_irq       = pxa3xx_init_irq,
 451         .handle_irq     = pxa3xx_handle_irq,
 452         .init_time      = pxa_timer_init,
 453         .init_machine   = littleton_init,
 454         .restart        = pxa_restart,
 455 MACHINE_END

/* [<][>][^][v][top][bottom][index][help] */