~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/mach-omap1/board-palmte.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 // SPDX-License-Identifier: GPL-2.0-only
  2 /*
  3  * linux/arch/arm/mach-omap1/board-palmte.c
  4  *
  5  * Modified from board-generic.c
  6  *
  7  * Support for the Palm Tungsten E PDA.
  8  *
  9  * Original version : Laurent Gonzalez
 10  *
 11  * Maintainers : http://palmtelinux.sf.net
 12  *                palmtelinux-developpers@lists.sf.net
 13  *
 14  * Copyright (c) 2006 Andrzej Zaborowski  <balrog@zabor.org>
 15  */
 16 #include <linux/gpio/machine.h>
 17 #include <linux/gpio/consumer.h>
 18 #include <linux/kernel.h>
 19 #include <linux/init.h>
 20 #include <linux/input.h>
 21 #include <linux/platform_device.h>
 22 #include <linux/mtd/mtd.h>
 23 #include <linux/mtd/partitions.h>
 24 #include <linux/mtd/physmap.h>
 25 #include <linux/spi/spi.h>
 26 #include <linux/interrupt.h>
 27 #include <linux/apm-emulation.h>
 28 #include <linux/omapfb.h>
 29 #include <linux/omap-dma.h>
 30 #include <linux/platform_data/keypad-omap.h>
 31 #include <linux/platform_data/omap1_bl.h>
 32 
 33 #include <asm/mach-types.h>
 34 #include <asm/mach/arch.h>
 35 #include <asm/mach/map.h>
 36 
 37 #include "tc.h"
 38 #include "flash.h"
 39 #include "mux.h"
 40 #include "hardware.h"
 41 #include "usb.h"
 42 #include "mmc.h"
 43 #include "common.h"
 44 
 45 #define PALMTE_USBDETECT_GPIO   0
 46 #define PALMTE_USB_OR_DC_GPIO   1
 47 #define PALMTE_TSC_GPIO         4
 48 #define PALMTE_PINTDAV_GPIO     6
 49 #define PALMTE_MMC_WP_GPIO      8
 50 #define PALMTE_MMC_POWER_GPIO   9
 51 #define PALMTE_HDQ_GPIO         11
 52 #define PALMTE_HEADPHONES_GPIO  14
 53 #define PALMTE_SPEAKER_GPIO     15
 54 
 55 static const unsigned int palmte_keymap[] = {
 56         KEY(0, 0, KEY_F1),              /* Calendar */
 57         KEY(1, 0, KEY_F2),              /* Contacts */
 58         KEY(2, 0, KEY_F3),              /* Tasks List */
 59         KEY(3, 0, KEY_F4),              /* Note Pad */
 60         KEY(4, 0, KEY_POWER),
 61         KEY(0, 1, KEY_LEFT),
 62         KEY(1, 1, KEY_DOWN),
 63         KEY(2, 1, KEY_UP),
 64         KEY(3, 1, KEY_RIGHT),
 65         KEY(4, 1, KEY_ENTER),
 66 };
 67 
 68 static const struct matrix_keymap_data palmte_keymap_data = {
 69         .keymap         = palmte_keymap,
 70         .keymap_size    = ARRAY_SIZE(palmte_keymap),
 71 };
 72 
 73 static struct omap_kp_platform_data palmte_kp_data = {
 74         .rows   = 8,
 75         .cols   = 8,
 76         .keymap_data = &palmte_keymap_data,
 77         .rep    = true,
 78         .delay  = 12,
 79 };
 80 
 81 static struct resource palmte_kp_resources[] = {
 82         [0]     = {
 83                 .start  = INT_KEYBOARD,
 84                 .end    = INT_KEYBOARD,
 85                 .flags  = IORESOURCE_IRQ,
 86         },
 87 };
 88 
 89 static struct platform_device palmte_kp_device = {
 90         .name           = "omap-keypad",
 91         .id             = -1,
 92         .dev            = {
 93                 .platform_data  = &palmte_kp_data,
 94         },
 95         .num_resources  = ARRAY_SIZE(palmte_kp_resources),
 96         .resource       = palmte_kp_resources,
 97 };
 98 
 99 static struct mtd_partition palmte_rom_partitions[] = {
100         /* PalmOS "Small ROM", contains the bootloader and the debugger */
101         {
102                 .name           = "smallrom",
103                 .offset         = 0,
104                 .size           = 0xa000,
105                 .mask_flags     = MTD_WRITEABLE,
106         },
107         /* PalmOS "Big ROM", a filesystem with all the OS code and data */
108         {
109                 .name           = "bigrom",
110                 .offset         = SZ_128K,
111                 /*
112                  * 0x5f0000 bytes big in the multi-language ("EFIGS") version,
113                  * 0x7b0000 bytes in the English-only ("enUS") version.
114                  */
115                 .size           = 0x7b0000,
116                 .mask_flags     = MTD_WRITEABLE,
117         },
118 };
119 
120 static struct physmap_flash_data palmte_rom_data = {
121         .width          = 2,
122         .set_vpp        = omap1_set_vpp,
123         .parts          = palmte_rom_partitions,
124         .nr_parts       = ARRAY_SIZE(palmte_rom_partitions),
125 };
126 
127 static struct resource palmte_rom_resource = {
128         .start          = OMAP_CS0_PHYS,
129         .end            = OMAP_CS0_PHYS + SZ_8M - 1,
130         .flags          = IORESOURCE_MEM,
131 };
132 
133 static struct platform_device palmte_rom_device = {
134         .name           = "physmap-flash",
135         .id             = -1,
136         .dev            = {
137                 .platform_data  = &palmte_rom_data,
138         },
139         .num_resources  = 1,
140         .resource       = &palmte_rom_resource,
141 };
142 
143 static struct platform_device palmte_lcd_device = {
144         .name           = "lcd_palmte",
145         .id             = -1,
146 };
147 
148 static struct omap_backlight_config palmte_backlight_config = {
149         .default_intensity      = 0xa0,
150 };
151 
152 static struct platform_device palmte_backlight_device = {
153         .name           = "omap-bl",
154         .id             = -1,
155         .dev            = {
156                 .platform_data  = &palmte_backlight_config,
157         },
158 };
159 
160 static struct platform_device *palmte_devices[] __initdata = {
161         &palmte_rom_device,
162         &palmte_kp_device,
163         &palmte_lcd_device,
164         &palmte_backlight_device,
165 };
166 
167 static struct omap_usb_config palmte_usb_config __initdata = {
168         .register_dev   = 1,    /* Mini-B only receptacle */
169         .hmc_mode       = 0,
170         .pins[0]        = 2,
171 };
172 
173 static const struct omap_lcd_config palmte_lcd_config __initconst = {
174         .ctrl_name      = "internal",
175 };
176 
177 static struct spi_board_info palmte_spi_info[] __initdata = {
178         {
179                 .modalias       = "tsc2102",
180                 .bus_num        = 2,    /* uWire (officially) */
181                 .chip_select    = 0,    /* As opposed to 3 */
182                 .max_speed_hz   = 8000000,
183         },
184 };
185 
186 #if IS_ENABLED(CONFIG_MMC_OMAP)
187 
188 static struct omap_mmc_platform_data _palmte_mmc_config = {
189         .nr_slots                       = 1,
190         .slots[0]                       = {
191                 .ocr_mask               = MMC_VDD_32_33|MMC_VDD_33_34,
192                 .name                   = "mmcblk",
193         },
194 };
195 
196 static struct omap_mmc_platform_data *palmte_mmc_config[OMAP15XX_NR_MMC] = {
197         [0] = &_palmte_mmc_config,
198 };
199 
200 static void palmte_mmc_init(void)
201 {
202         omap1_init_mmc(palmte_mmc_config, OMAP15XX_NR_MMC);
203 }
204 
205 #else /* CONFIG_MMC_OMAP */
206 
207 static void palmte_mmc_init(void)
208 {
209 }
210 
211 #endif /* CONFIG_MMC_OMAP */
212 
213 static struct gpiod_lookup_table palmte_irq_gpio_table = {
214         .dev_id = NULL,
215         .table = {
216                 /* GPIO used for TSC2102 PINTDAV IRQ */
217                 GPIO_LOOKUP("gpio-0-15", PALMTE_PINTDAV_GPIO, "tsc2102_irq",
218                             GPIO_ACTIVE_HIGH),
219                 /* GPIO used for USB or DC input detection */
220                 GPIO_LOOKUP("gpio-0-15", PALMTE_USB_OR_DC_GPIO, "usb_dc_irq",
221                             GPIO_ACTIVE_HIGH),
222                 { }
223         },
224 };
225 
226 static void __init omap_palmte_init(void)
227 {
228         struct gpio_desc *d;
229 
230         /* mux pins for uarts */
231         omap_cfg_reg(UART1_TX);
232         omap_cfg_reg(UART1_RTS);
233         omap_cfg_reg(UART2_TX);
234         omap_cfg_reg(UART2_RTS);
235         omap_cfg_reg(UART3_TX);
236         omap_cfg_reg(UART3_RX);
237 
238         platform_add_devices(palmte_devices, ARRAY_SIZE(palmte_devices));
239 
240         gpiod_add_lookup_table(&palmte_irq_gpio_table);
241         d = gpiod_get(NULL, "tsc2102_irq", GPIOD_IN);
242         if (IS_ERR(d))
243                 pr_err("Unable to get TSC2102 IRQ GPIO descriptor\n");
244         else
245                 palmte_spi_info[0].irq = gpiod_to_irq(d);
246         spi_register_board_info(palmte_spi_info, ARRAY_SIZE(palmte_spi_info));
247 
248         /* We are getting this just to set it up as input */
249         d = gpiod_get(NULL, "usb_dc_irq", GPIOD_IN);
250         if (IS_ERR(d))
251                 pr_err("Unable to get USB/DC IRQ GPIO descriptor\n");
252         else
253                 gpiod_put(d);
254 
255         omap_serial_init();
256         omap1_usb_init(&palmte_usb_config);
257         omap_register_i2c_bus(1, 100, NULL, 0);
258 
259         omapfb_set_lcd_config(&palmte_lcd_config);
260         palmte_mmc_init();
261 }
262 
263 MACHINE_START(OMAP_PALMTE, "OMAP310 based Palm Tungsten E")
264         .atag_offset    = 0x100,
265         .map_io         = omap1_map_io,
266         .init_early     = omap1_init_early,
267         .init_irq       = omap1_init_irq,
268         .init_machine   = omap_palmte_init,
269         .init_late      = omap1_init_late,
270         .init_time      = omap1_timer_init,
271         .restart        = omap1_restart,
272 MACHINE_END
273 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php