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

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

DEFINITIONS

This source file includes following definitions.
  1. palmtx_nor_init
  2. palmtx_nor_init
  3. palmtx_kpc_init
  4. palmtx_kpc_init
  5. palmtx_keys_init
  6. palmtx_keys_init
  7. palmtx_nand_cmd_ctl
  8. palmtx_nand_init
  9. palmtx_nand_init
  10. palmtx_map_io
  11. palmtx_init

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Hardware definitions for PalmTX
   4  *
   5  * Author:     Marek Vasut <marek.vasut@gmail.com>
   6  *
   7  * Based on work of:
   8  *              Alex Osborne <ato@meshy.org>
   9  *              Cristiano P. <cristianop@users.sourceforge.net>
  10  *              Jan Herman <2hp@seznam.cz>
  11  *              Michal Hrusecky
  12  *
  13  * (find more info at www.hackndev.com)
  14  */
  15 
  16 #include <linux/platform_device.h>
  17 #include <linux/delay.h>
  18 #include <linux/irq.h>
  19 #include <linux/gpio_keys.h>
  20 #include <linux/input.h>
  21 #include <linux/pda_power.h>
  22 #include <linux/pwm_backlight.h>
  23 #include <linux/gpio.h>
  24 #include <linux/wm97xx.h>
  25 #include <linux/power_supply.h>
  26 #include <linux/usb/gpio_vbus.h>
  27 #include <linux/mtd/platnand.h>
  28 #include <linux/mtd/mtd.h>
  29 #include <linux/mtd/physmap.h>
  30 
  31 #include <asm/mach-types.h>
  32 #include <asm/mach/arch.h>
  33 #include <asm/mach/map.h>
  34 
  35 #include "pxa27x.h"
  36 #include <mach/audio.h>
  37 #include <mach/palmtx.h>
  38 #include <linux/platform_data/mmc-pxamci.h>
  39 #include <linux/platform_data/video-pxafb.h>
  40 #include <linux/platform_data/irda-pxaficp.h>
  41 #include <linux/platform_data/keypad-pxa27x.h>
  42 #include "udc.h"
  43 #include <linux/platform_data/asoc-palm27x.h>
  44 #include "palm27x.h"
  45 
  46 #include "generic.h"
  47 #include "devices.h"
  48 
  49 /******************************************************************************
  50  * Pin configuration
  51  ******************************************************************************/
  52 static unsigned long palmtx_pin_config[] __initdata = {
  53         /* MMC */
  54         GPIO32_MMC_CLK,
  55         GPIO92_MMC_DAT_0,
  56         GPIO109_MMC_DAT_1,
  57         GPIO110_MMC_DAT_2,
  58         GPIO111_MMC_DAT_3,
  59         GPIO112_MMC_CMD,
  60         GPIO14_GPIO,    /* SD detect */
  61         GPIO114_GPIO,   /* SD power */
  62         GPIO115_GPIO,   /* SD r/o switch */
  63 
  64         /* AC97 */
  65         GPIO28_AC97_BITCLK,
  66         GPIO29_AC97_SDATA_IN_0,
  67         GPIO30_AC97_SDATA_OUT,
  68         GPIO31_AC97_SYNC,
  69         GPIO89_AC97_SYSCLK,
  70         GPIO95_AC97_nRESET,
  71 
  72         /* IrDA */
  73         GPIO40_GPIO,    /* ir disable */
  74         GPIO46_FICP_RXD,
  75         GPIO47_FICP_TXD,
  76 
  77         /* PWM */
  78         GPIO16_PWM0_OUT,
  79 
  80         /* USB */
  81         GPIO13_GPIO,    /* usb detect */
  82         GPIO93_GPIO,    /* usb power */
  83 
  84         /* PCMCIA */
  85         GPIO48_nPOE,
  86         GPIO49_nPWE,
  87         GPIO50_nPIOR,
  88         GPIO51_nPIOW,
  89         GPIO85_nPCE_1,
  90         GPIO54_nPCE_2,
  91         GPIO79_PSKTSEL,
  92         GPIO55_nPREG,
  93         GPIO56_nPWAIT,
  94         GPIO57_nIOIS16,
  95         GPIO94_GPIO,    /* wifi power 1 */
  96         GPIO108_GPIO,   /* wifi power 2 */
  97         GPIO116_GPIO,   /* wifi ready */
  98 
  99         /* MATRIX KEYPAD */
 100         GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
 101         GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
 102         GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
 103         GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
 104         GPIO103_KP_MKOUT_0,
 105         GPIO104_KP_MKOUT_1,
 106         GPIO105_KP_MKOUT_2,
 107 
 108         /* LCD */
 109         GPIOxx_LCD_TFT_16BPP,
 110 
 111         /* FFUART */
 112         GPIO34_FFUART_RXD,
 113         GPIO39_FFUART_TXD,
 114 
 115         /* NAND */
 116         GPIO15_nCS_1,
 117         GPIO18_RDY,
 118 
 119         /* MISC. */
 120         GPIO10_GPIO,    /* hotsync button */
 121         GPIO12_GPIO,    /* power detect */
 122         GPIO107_GPIO,   /* earphone detect */
 123 };
 124 
 125 /******************************************************************************
 126  * NOR Flash
 127  ******************************************************************************/
 128 #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
 129 static struct mtd_partition palmtx_partitions[] = {
 130         {
 131                 .name           = "Flash",
 132                 .offset         = 0x00000000,
 133                 .size           = MTDPART_SIZ_FULL,
 134                 .mask_flags     = 0
 135         }
 136 };
 137 
 138 static struct physmap_flash_data palmtx_flash_data[] = {
 139         {
 140                 .width          = 2,                    /* bankwidth in bytes */
 141                 .parts          = palmtx_partitions,
 142                 .nr_parts       = ARRAY_SIZE(palmtx_partitions)
 143         }
 144 };
 145 
 146 static struct resource palmtx_flash_resource = {
 147         .start  = PXA_CS0_PHYS,
 148         .end    = PXA_CS0_PHYS + SZ_8M - 1,
 149         .flags  = IORESOURCE_MEM,
 150 };
 151 
 152 static struct platform_device palmtx_flash = {
 153         .name           = "physmap-flash",
 154         .id             = 0,
 155         .resource       = &palmtx_flash_resource,
 156         .num_resources  = 1,
 157         .dev            = {
 158                 .platform_data = palmtx_flash_data,
 159         },
 160 };
 161 
 162 static void __init palmtx_nor_init(void)
 163 {
 164         platform_device_register(&palmtx_flash);
 165 }
 166 #else
 167 static inline void palmtx_nor_init(void) {}
 168 #endif
 169 
 170 /******************************************************************************
 171  * GPIO keyboard
 172  ******************************************************************************/
 173 #if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
 174 static const unsigned int palmtx_matrix_keys[] = {
 175         KEY(0, 0, KEY_POWER),
 176         KEY(0, 1, KEY_F1),
 177         KEY(0, 2, KEY_ENTER),
 178 
 179         KEY(1, 0, KEY_F2),
 180         KEY(1, 1, KEY_F3),
 181         KEY(1, 2, KEY_F4),
 182 
 183         KEY(2, 0, KEY_UP),
 184         KEY(2, 2, KEY_DOWN),
 185 
 186         KEY(3, 0, KEY_RIGHT),
 187         KEY(3, 2, KEY_LEFT),
 188 };
 189 
 190 static struct matrix_keymap_data palmtx_matrix_keymap_data = {
 191         .keymap                 = palmtx_matrix_keys,
 192         .keymap_size            = ARRAY_SIZE(palmtx_matrix_keys),
 193 };
 194 
 195 static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
 196         .matrix_key_rows        = 4,
 197         .matrix_key_cols        = 3,
 198         .matrix_keymap_data     = &palmtx_matrix_keymap_data,
 199 
 200         .debounce_interval      = 30,
 201 };
 202 
 203 static void __init palmtx_kpc_init(void)
 204 {
 205         pxa_set_keypad_info(&palmtx_keypad_platform_data);
 206 }
 207 #else
 208 static inline void palmtx_kpc_init(void) {}
 209 #endif
 210 
 211 /******************************************************************************
 212  * GPIO keys
 213  ******************************************************************************/
 214 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 215 static struct gpio_keys_button palmtx_pxa_buttons[] = {
 216         {KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
 217 };
 218 
 219 static struct gpio_keys_platform_data palmtx_pxa_keys_data = {
 220         .buttons        = palmtx_pxa_buttons,
 221         .nbuttons       = ARRAY_SIZE(palmtx_pxa_buttons),
 222 };
 223 
 224 static struct platform_device palmtx_pxa_keys = {
 225         .name   = "gpio-keys",
 226         .id     = -1,
 227         .dev    = {
 228                 .platform_data = &palmtx_pxa_keys_data,
 229         },
 230 };
 231 
 232 static void __init palmtx_keys_init(void)
 233 {
 234         platform_device_register(&palmtx_pxa_keys);
 235 }
 236 #else
 237 static inline void palmtx_keys_init(void) {}
 238 #endif
 239 
 240 /******************************************************************************
 241  * NAND Flash
 242  ******************************************************************************/
 243 #if defined(CONFIG_MTD_NAND_PLATFORM) || \
 244         defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
 245 static void palmtx_nand_cmd_ctl(struct nand_chip *this, int cmd,
 246                                 unsigned int ctrl)
 247 {
 248         char __iomem *nandaddr = this->legacy.IO_ADDR_W;
 249 
 250         if (cmd == NAND_CMD_NONE)
 251                 return;
 252 
 253         if (ctrl & NAND_CLE)
 254                 writeb(cmd, PALMTX_NAND_CLE_VIRT);
 255         else if (ctrl & NAND_ALE)
 256                 writeb(cmd, PALMTX_NAND_ALE_VIRT);
 257         else
 258                 writeb(cmd, nandaddr);
 259 }
 260 
 261 static struct mtd_partition palmtx_partition_info[] = {
 262         [0] = {
 263                 .name   = "palmtx-0",
 264                 .offset = 0,
 265                 .size   = MTDPART_SIZ_FULL
 266         },
 267 };
 268 
 269 struct platform_nand_data palmtx_nand_platdata = {
 270         .chip   = {
 271                 .nr_chips               = 1,
 272                 .chip_offset            = 0,
 273                 .nr_partitions          = ARRAY_SIZE(palmtx_partition_info),
 274                 .partitions             = palmtx_partition_info,
 275                 .chip_delay             = 20,
 276         },
 277         .ctrl   = {
 278                 .cmd_ctrl       = palmtx_nand_cmd_ctl,
 279         },
 280 };
 281 
 282 static struct resource palmtx_nand_resource[] = {
 283         [0]     = {
 284                 .start  = PXA_CS1_PHYS,
 285                 .end    = PXA_CS1_PHYS + SZ_1M - 1,
 286                 .flags  = IORESOURCE_MEM,
 287         },
 288 };
 289 
 290 static struct platform_device palmtx_nand = {
 291         .name           = "gen_nand",
 292         .num_resources  = ARRAY_SIZE(palmtx_nand_resource),
 293         .resource       = palmtx_nand_resource,
 294         .id             = -1,
 295         .dev            = {
 296                 .platform_data  = &palmtx_nand_platdata,
 297         }
 298 };
 299 
 300 static void __init palmtx_nand_init(void)
 301 {
 302         platform_device_register(&palmtx_nand);
 303 }
 304 #else
 305 static inline void palmtx_nand_init(void) {}
 306 #endif
 307 
 308 /******************************************************************************
 309  * Machine init
 310  ******************************************************************************/
 311 static struct map_desc palmtx_io_desc[] __initdata = {
 312 {
 313         .virtual        = (unsigned long)PALMTX_PCMCIA_VIRT,
 314         .pfn            = __phys_to_pfn(PALMTX_PCMCIA_PHYS),
 315         .length         = PALMTX_PCMCIA_SIZE,
 316         .type           = MT_DEVICE,
 317 }, {
 318         .virtual        = (unsigned long)PALMTX_NAND_ALE_VIRT,
 319         .pfn            = __phys_to_pfn(PALMTX_NAND_ALE_PHYS),
 320         .length         = SZ_1M,
 321         .type           = MT_DEVICE,
 322 }, {
 323         .virtual        = (unsigned long)PALMTX_NAND_CLE_VIRT,
 324         .pfn            = __phys_to_pfn(PALMTX_NAND_CLE_PHYS),
 325         .length         = SZ_1M,
 326         .type           = MT_DEVICE,
 327 }
 328 };
 329 
 330 static void __init palmtx_map_io(void)
 331 {
 332         pxa27x_map_io();
 333         iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
 334 }
 335 
 336 static struct gpiod_lookup_table palmtx_mci_gpio_table = {
 337         .dev_id = "pxa2xx-mci.0",
 338         .table = {
 339                 GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_DETECT_N,
 340                             "cd", GPIO_ACTIVE_LOW),
 341                 GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_READONLY,
 342                             "wp", GPIO_ACTIVE_LOW),
 343                 GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTX_SD_POWER,
 344                             "power", GPIO_ACTIVE_HIGH),
 345                 { },
 346         },
 347 };
 348 
 349 static void __init palmtx_init(void)
 350 {
 351         pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
 352         pxa_set_ffuart_info(NULL);
 353         pxa_set_btuart_info(NULL);
 354         pxa_set_stuart_info(NULL);
 355 
 356         palm27x_mmc_init(&palmtx_mci_gpio_table);
 357         palm27x_pm_init(PALMTX_STR_BASE);
 358         palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
 359         palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
 360                         GPIO_NR_PALMTX_USB_PULLUP, 1);
 361         palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
 362         palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
 363                         GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
 364         palm27x_pwm_init(GPIO_NR_PALMTX_BL_POWER, GPIO_NR_PALMTX_LCD_POWER);
 365         palm27x_power_init(GPIO_NR_PALMTX_POWER_DETECT, -1);
 366         palm27x_pmic_init();
 367         palmtx_kpc_init();
 368         palmtx_keys_init();
 369         palmtx_nor_init();
 370         palmtx_nand_init();
 371 }
 372 
 373 MACHINE_START(PALMTX, "Palm T|X")
 374         .atag_offset    = 0x100,
 375         .map_io         = palmtx_map_io,
 376         .nr_irqs        = PXA_NR_IRQS,
 377         .init_irq       = pxa27x_init_irq,
 378         .handle_irq     = pxa27x_handle_irq,
 379         .init_time      = pxa_timer_init,
 380         .init_machine   = palmtx_init,
 381         .restart        = pxa_restart,
 382 MACHINE_END

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