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

TOMOYO Linux Cross Reference
Linux/arch/arm/mach-pxa/colibri-pxa270.c

Version: ~ [ linux-5.3 ] ~ [ linux-5.2.15 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.73 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.144 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.193 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.193 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.73 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  *  linux/arch/arm/mach-pxa/colibri-pxa270.c
  3  *
  4  *  Support for Toradex PXA270 based Colibri module
  5  *  Daniel Mack <daniel@caiaq.de>
  6  *  Marek Vasut <marek.vasut@gmail.com>
  7  *
  8  *  This program is free software; you can redistribute it and/or modify
  9  *  it under the terms of the GNU General Public License version 2 as
 10  *  published by the Free Software Foundation.
 11  */
 12 
 13 #include <linux/init.h>
 14 #include <linux/interrupt.h>
 15 #include <linux/moduleparam.h>
 16 #include <linux/kernel.h>
 17 #include <linux/mtd/mtd.h>
 18 #include <linux/mtd/partitions.h>
 19 #include <linux/mtd/physmap.h>
 20 #include <linux/platform_device.h>
 21 #include <linux/regulator/machine.h>
 22 #include <linux/ucb1400.h>
 23 
 24 #include <asm/mach/arch.h>
 25 #include <asm/mach/flash.h>
 26 #include <asm/mach-types.h>
 27 #include <asm/sizes.h>
 28 
 29 #include <mach/audio.h>
 30 #include <mach/colibri.h>
 31 #include <mach/pxa27x.h>
 32 
 33 #include "devices.h"
 34 #include "generic.h"
 35 
 36 /******************************************************************************
 37  * Evaluation board MFP
 38  ******************************************************************************/
 39 #ifdef   CONFIG_MACH_COLIBRI_EVALBOARD
 40 static mfp_cfg_t colibri_pxa270_evalboard_pin_config[] __initdata = {
 41         /* MMC */
 42         GPIO32_MMC_CLK,
 43         GPIO92_MMC_DAT_0,
 44         GPIO109_MMC_DAT_1,
 45         GPIO110_MMC_DAT_2,
 46         GPIO111_MMC_DAT_3,
 47         GPIO112_MMC_CMD,
 48         GPIO0_GPIO,     /* SD detect */
 49 
 50         /* FFUART */
 51         GPIO39_FFUART_TXD,
 52         GPIO34_FFUART_RXD,
 53 
 54         /* UHC */
 55         GPIO88_USBH1_PWR,
 56         GPIO89_USBH1_PEN,
 57         GPIO119_USBH2_PWR,
 58         GPIO120_USBH2_PEN,
 59 
 60         /* PCMCIA */
 61         GPIO85_nPCE_1,
 62         GPIO54_nPCE_2,
 63         GPIO55_nPREG,
 64         GPIO50_nPIOR,
 65         GPIO51_nPIOW,
 66         GPIO49_nPWE,
 67         GPIO48_nPOE,
 68         GPIO57_nIOIS16,
 69         GPIO56_nPWAIT,
 70         GPIO104_PSKTSEL,
 71         GPIO53_GPIO,    /* RESET */
 72         GPIO83_GPIO,    /* BVD1 */
 73         GPIO82_GPIO,    /* BVD2 */
 74         GPIO1_GPIO,     /* READY */
 75         GPIO84_GPIO,    /* DETECT */
 76         GPIO107_GPIO,   /* PPEN */
 77 
 78         /* I2C */
 79         GPIO117_I2C_SCL,
 80         GPIO118_I2C_SDA,
 81 };
 82 #else
 83 static mfp_cfg_t colibri_pxa270_evalboard_pin_config[] __initdata = {};
 84 #endif
 85 
 86 #ifdef  CONFIG_MACH_COLIBRI_PXA270_INCOME
 87 static mfp_cfg_t income_pin_config[] __initdata = {
 88         /* MMC */
 89         GPIO32_MMC_CLK,
 90         GPIO92_MMC_DAT_0,
 91         GPIO109_MMC_DAT_1,
 92         GPIO110_MMC_DAT_2,
 93         GPIO111_MMC_DAT_3,
 94         GPIO112_MMC_CMD,
 95         GPIO0_GPIO,     /* SD detect */
 96         GPIO1_GPIO,     /* SD read-only */
 97 
 98         /* FFUART */
 99         GPIO39_FFUART_TXD,
100         GPIO34_FFUART_RXD,
101 
102         /* BFUART */
103         GPIO42_BTUART_RXD,
104         GPIO43_BTUART_TXD,
105         GPIO45_BTUART_RTS,
106 
107         /* STUART */
108         GPIO46_STUART_RXD,
109         GPIO47_STUART_TXD,
110 
111         /* UHC */
112         GPIO88_USBH1_PWR,
113         GPIO89_USBH1_PEN,
114 
115         /* LCD */
116         GPIOxx_LCD_TFT_16BPP,
117 
118         /* PWM */
119         GPIO16_PWM0_OUT,
120 
121         /* I2C */
122         GPIO117_I2C_SCL,
123         GPIO118_I2C_SDA,
124 
125         /* LED */
126         GPIO54_GPIO,    /* LED A */
127         GPIO55_GPIO,    /* LED B */
128 };
129 #else
130 static mfp_cfg_t income_pin_config[] __initdata = {};
131 #endif
132 
133 /******************************************************************************
134  * Pin configuration
135  ******************************************************************************/
136 static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
137         /* Ethernet */
138         GPIO78_nCS_2,   /* Ethernet CS */
139         GPIO114_GPIO,   /* Ethernet IRQ */
140 
141         /* AC97 */
142         GPIO28_AC97_BITCLK,
143         GPIO29_AC97_SDATA_IN_0,
144         GPIO30_AC97_SDATA_OUT,
145         GPIO31_AC97_SYNC,
146         GPIO95_AC97_nRESET,
147         GPIO98_AC97_SYSCLK,
148         GPIO113_GPIO,   /* Touchscreen IRQ */
149 };
150 
151 /******************************************************************************
152  * NOR Flash
153  ******************************************************************************/
154 #if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
155 static struct mtd_partition colibri_partitions[] = {
156         {
157                 .name =         "Bootloader",
158                 .offset =       0x00000000,
159                 .size =         0x00040000,
160                 .mask_flags =   MTD_WRITEABLE   /* force read-only */
161         }, {
162                 .name =         "Kernel",
163                 .offset =       0x00040000,
164                 .size =         0x00400000,
165                 .mask_flags =   0
166         }, {
167                 .name =         "Rootfs",
168                 .offset =       0x00440000,
169                 .size =         MTDPART_SIZ_FULL,
170                 .mask_flags =   0
171         }
172 };
173 
174 static struct physmap_flash_data colibri_flash_data[] = {
175         {
176                 .width          = 4,                    /* bankwidth in bytes */
177                 .parts          = colibri_partitions,
178                 .nr_parts       = ARRAY_SIZE(colibri_partitions)
179         }
180 };
181 
182 static struct resource colibri_pxa270_flash_resource = {
183         .start  = PXA_CS0_PHYS,
184         .end    = PXA_CS0_PHYS + SZ_32M - 1,
185         .flags  = IORESOURCE_MEM,
186 };
187 
188 static struct platform_device colibri_pxa270_flash_device = {
189         .name   = "physmap-flash",
190         .id     = 0,
191         .dev    = {
192                 .platform_data = colibri_flash_data,
193         },
194         .resource = &colibri_pxa270_flash_resource,
195         .num_resources = 1,
196 };
197 
198 static void __init colibri_pxa270_nor_init(void)
199 {
200         platform_device_register(&colibri_pxa270_flash_device);
201 }
202 #else
203 static inline void colibri_pxa270_nor_init(void) {}
204 #endif
205 
206 /******************************************************************************
207  * Ethernet
208  ******************************************************************************/
209 #if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
210 static struct resource colibri_pxa270_dm9000_resources[] = {
211         {
212                 .start  = PXA_CS2_PHYS,
213                 .end    = PXA_CS2_PHYS + 3,
214                 .flags  = IORESOURCE_MEM,
215         },
216         {
217                 .start  = PXA_CS2_PHYS + 4,
218                 .end    = PXA_CS2_PHYS + 4 + 500,
219                 .flags  = IORESOURCE_MEM,
220         },
221         {
222                 .start  = PXA_GPIO_TO_IRQ(GPIO114_COLIBRI_PXA270_ETH_IRQ),
223                 .end    = PXA_GPIO_TO_IRQ(GPIO114_COLIBRI_PXA270_ETH_IRQ),
224                 .flags  = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
225         },
226 };
227 
228 static struct platform_device colibri_pxa270_dm9000_device = {
229         .name           = "dm9000",
230         .id             = -1,
231         .num_resources  = ARRAY_SIZE(colibri_pxa270_dm9000_resources),
232         .resource       = colibri_pxa270_dm9000_resources,
233 };
234 
235 static void __init colibri_pxa270_eth_init(void)
236 {
237         platform_device_register(&colibri_pxa270_dm9000_device);
238 }
239 #else
240 static inline void colibri_pxa270_eth_init(void) {}
241 #endif
242 
243 /******************************************************************************
244  * Audio and Touchscreen
245  ******************************************************************************/
246 #if     defined(CONFIG_TOUCHSCREEN_UCB1400) || \
247         defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
248 static pxa2xx_audio_ops_t colibri_pxa270_ac97_pdata = {
249         .reset_gpio     = 95,
250 };
251 
252 static struct ucb1400_pdata colibri_pxa270_ucb1400_pdata = {
253         .irq            = PXA_GPIO_TO_IRQ(GPIO113_COLIBRI_PXA270_TS_IRQ),
254 };
255 
256 static struct platform_device colibri_pxa270_ucb1400_device = {
257         .name           = "ucb1400_core",
258         .id             = -1,
259         .dev            = {
260                 .platform_data = &colibri_pxa270_ucb1400_pdata,
261         },
262 };
263 
264 static void __init colibri_pxa270_tsc_init(void)
265 {
266         pxa_set_ac97_info(&colibri_pxa270_ac97_pdata);
267         platform_device_register(&colibri_pxa270_ucb1400_device);
268 }
269 #else
270 static inline void colibri_pxa270_tsc_init(void) {}
271 #endif
272 
273 static int colibri_pxa270_baseboard;
274 core_param(colibri_pxa270_baseboard, colibri_pxa270_baseboard, int, 0444);
275 
276 static void __init colibri_pxa270_init(void)
277 {
278         pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
279 
280         colibri_pxa270_nor_init();
281         colibri_pxa270_eth_init();
282         colibri_pxa270_tsc_init();
283 
284         switch (colibri_pxa270_baseboard) {
285         case COLIBRI_EVALBOARD:
286                 pxa2xx_mfp_config(ARRAY_AND_SIZE(
287                         colibri_pxa270_evalboard_pin_config));
288                 colibri_evalboard_init();
289                 break;
290         case COLIBRI_PXA270_INCOME:
291                 pxa2xx_mfp_config(ARRAY_AND_SIZE(income_pin_config));
292                 colibri_pxa270_income_boardinit();
293                 break;
294         default:
295                 printk(KERN_ERR "Illegal colibri_pxa270_baseboard type %d\n",
296                                 colibri_pxa270_baseboard);
297         }
298 
299         regulator_has_full_constraints();
300 }
301 
302 /* The "Income s.r.o. SH-Dmaster PXA270 SBC" board can be booted either
303  * with the INCOME mach type or with COLIBRI and the kernel parameter
304  * "colibri_pxa270_baseboard=1"
305  */
306 static void __init colibri_pxa270_income_init(void)
307 {
308         colibri_pxa270_baseboard = COLIBRI_PXA270_INCOME;
309         colibri_pxa270_init();
310 }
311 
312 MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
313         .atag_offset    = 0x100,
314         .init_machine   = colibri_pxa270_init,
315         .map_io         = pxa27x_map_io,
316         .nr_irqs        = PXA_NR_IRQS,
317         .init_irq       = pxa27x_init_irq,
318         .handle_irq     = pxa27x_handle_irq,
319         .init_time      = pxa_timer_init,
320         .restart        = pxa_restart,
321 MACHINE_END
322 
323 MACHINE_START(INCOME, "Income s.r.o. SH-Dmaster PXA270 SBC")
324         .atag_offset    = 0x100,
325         .init_machine   = colibri_pxa270_income_init,
326         .map_io         = pxa27x_map_io,
327         .nr_irqs        = PXA_NR_IRQS,
328         .init_irq       = pxa27x_init_irq,
329         .handle_irq     = pxa27x_handle_irq,
330         .init_time      = pxa_timer_init,
331         .restart        = pxa_restart,
332 MACHINE_END
333 
334 

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

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | 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.

osdn.jp