1 /* linux/arch/arm/mach-pxa/xcep.c
3 * Support for the Iskratel Electronics XCEP platform as used in
4 * the Libera instruments from Instrumentation Technologies.
6 * Author: Ales Bardorfer <ales@i-tech.si>
7 * Contributions by: Abbott, MG (Michael) <michael.abbott@diamond.ac.uk>
8 * Contributions by: Matej Kenda <matej.kenda@i-tech.si>
10 * Copyright: (C) 2006-2009 Instrumentation Technologies
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License version 2 as
14 * published by the Free Software Foundation.
17 #include <linux/platform_device.h>
18 #include <linux/i2c.h>
19 #include <linux/i2c/pxa-i2c.h>
20 #include <linux/smc91x.h>
21 #include <linux/mtd/mtd.h>
22 #include <linux/mtd/partitions.h>
23 #include <linux/mtd/physmap.h>
25 #include <asm/mach-types.h>
26 #include <asm/mach/arch.h>
27 #include <asm/mach/irq.h>
28 #include <asm/mach/map.h>
30 #include <mach/hardware.h>
31 #include <mach/pxa25x.h>
32 #include <mach/smemc.h>
36 #define XCEP_ETH_PHYS (PXA_CS3_PHYS + 0x00000300)
37 #define XCEP_ETH_PHYS_END (PXA_CS3_PHYS + 0x000fffff)
38 #define XCEP_ETH_ATTR (PXA_CS3_PHYS + 0x02000000)
39 #define XCEP_ETH_ATTR_END (PXA_CS3_PHYS + 0x020fffff)
40 #define XCEP_ETH_IRQ IRQ_GPIO0
43 #define XCEP_CPLD_BASE 0xf0000000
46 /* Flash partitions. */
48 static struct mtd_partition xcep_partitions
[] = {
53 .mask_flags
= MTD_WRITEABLE
55 .name
= "Bootloader ENV",
58 .mask_flags
= MTD_WRITEABLE
69 .size
= MTDPART_SIZ_FULL
,
74 static struct physmap_flash_data xcep_flash_data
[] = {
76 .width
= 4, /* bankwidth in bytes */
77 .parts
= xcep_partitions
,
78 .nr_parts
= ARRAY_SIZE(xcep_partitions
)
82 static struct resource flash_resource
= {
83 .start
= PXA_CS0_PHYS
,
84 .end
= PXA_CS0_PHYS
+ SZ_32M
- 1,
85 .flags
= IORESOURCE_MEM
,
88 static struct platform_device flash_device
= {
89 .name
= "physmap-flash",
92 .platform_data
= xcep_flash_data
,
94 .resource
= &flash_resource
,
100 /* SMC LAN91C111 network controller. */
102 static struct resource smc91x_resources
[] = {
104 .name
= "smc91x-regs",
105 .start
= XCEP_ETH_PHYS
,
106 .end
= XCEP_ETH_PHYS_END
,
107 .flags
= IORESOURCE_MEM
,
110 .start
= XCEP_ETH_IRQ
,
112 .flags
= IORESOURCE_IRQ
,
115 .name
= "smc91x-attrib",
116 .start
= XCEP_ETH_ATTR
,
117 .end
= XCEP_ETH_ATTR_END
,
118 .flags
= IORESOURCE_MEM
,
122 static struct smc91x_platdata xcep_smc91x_info
= {
123 .flags
= SMC91X_USE_32BIT
| SMC91X_NOWAIT
| SMC91X_USE_DMA
,
126 static struct platform_device smc91x_device
= {
129 .num_resources
= ARRAY_SIZE(smc91x_resources
),
130 .resource
= smc91x_resources
,
132 .platform_data
= &xcep_smc91x_info
,
137 static struct platform_device
*devices
[] __initdata
= {
143 /* We have to state that there are HWMON devices on the I2C bus on XCEP.
144 * Drivers for HWMON verify capabilities of the adapter when loading and
145 * refuse to attach if the adapter doesn't support HWMON class of devices. */
146 static struct i2c_pxa_platform_data xcep_i2c_platform_data
= {
147 .class = I2C_CLASS_HWMON
151 static mfp_cfg_t xcep_pin_config
[] __initdata
= {
152 GPIO79_nCS_3
, /* SMC 91C111 chip select. */
153 GPIO80_nCS_4
, /* CPLD chip select. */
154 /* SSP communication to MSP430 */
162 static void __init
xcep_init(void)
164 pxa2xx_mfp_config(ARRAY_AND_SIZE(xcep_pin_config
));
166 pxa_set_ffuart_info(NULL
);
167 pxa_set_btuart_info(NULL
);
168 pxa_set_stuart_info(NULL
);
169 pxa_set_hwuart_info(NULL
);
171 /* See Intel XScale Developer's Guide for details */
172 /* Set RDF and RDN to appropriate values (chip select 3 (smc91x)) */
173 __raw_writel((__raw_readl(MSC1
) & 0xffff) | 0xD5540000, MSC1
);
174 /* Set RDF and RDN to appropriate values (chip select 5 (fpga)) */
175 __raw_writel((__raw_readl(MSC2
) & 0xffff) | 0x72A00000, MSC2
);
177 platform_add_devices(ARRAY_AND_SIZE(devices
));
178 pxa_set_i2c_info(&xcep_i2c_platform_data
);
181 MACHINE_START(XCEP
, "Iskratel XCEP")
182 .atag_offset
= 0x100,
183 .init_machine
= xcep_init
,
184 .map_io
= pxa25x_map_io
,
185 .init_irq
= pxa25x_init_irq
,
186 .handle_irq
= pxa25x_handle_irq
,