]> Git Repo - J-linux.git/blob - arch/arm/mach-omap1/board-palmte.c
Merge patch series "riscv: Extension parsing fixes"
[J-linux.git] / arch / arm / mach-omap1 / board-palmte.c
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  *                [email protected]
13  *
14  * Copyright (c) 2006 Andrzej Zaborowski  <[email protected]>
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
This page took 0.046583 seconds and 4 git commands to generate.