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/smc91x.h>
20 #include <linux/mtd/mtd.h>
21 #include <linux/mtd/partitions.h>
22 #include <linux/mtd/physmap.h>
24 #include <asm/mach-types.h>
25 #include <asm/mach/arch.h>
26 #include <asm/mach/irq.h>
27 #include <asm/mach/map.h>
31 #include <mach/hardware.h>
32 #include <mach/pxa2xx-regs.h>
33 #include <mach/mfp-pxa25x.h>
37 #define XCEP_ETH_PHYS (PXA_CS3_PHYS + 0x00000300)
38 #define XCEP_ETH_PHYS_END (PXA_CS3_PHYS + 0x000fffff)
39 #define XCEP_ETH_ATTR (PXA_CS3_PHYS + 0x02000000)
40 #define XCEP_ETH_ATTR_END (PXA_CS3_PHYS + 0x020fffff)
41 #define XCEP_ETH_IRQ IRQ_GPIO0
44 #define XCEP_CPLD_BASE 0xf0000000
47 /* Flash partitions. */
49 static struct mtd_partition xcep_partitions
[] = {
54 .mask_flags
= MTD_WRITEABLE
56 .name
= "Bootloader ENV",
59 .mask_flags
= MTD_WRITEABLE
70 .size
= MTDPART_SIZ_FULL
,
75 static struct physmap_flash_data xcep_flash_data
[] = {
77 .width
= 4, /* bankwidth in bytes */
78 .parts
= xcep_partitions
,
79 .nr_parts
= ARRAY_SIZE(xcep_partitions
)
83 static struct resource flash_resource
= {
84 .start
= PXA_CS0_PHYS
,
85 .end
= PXA_CS0_PHYS
+ SZ_32M
- 1,
86 .flags
= IORESOURCE_MEM
,
89 static struct platform_device flash_device
= {
90 .name
= "physmap-flash",
93 .platform_data
= xcep_flash_data
,
95 .resource
= &flash_resource
,
101 /* SMC LAN91C111 network controller. */
103 static struct resource smc91x_resources
[] = {
105 .name
= "smc91x-regs",
106 .start
= XCEP_ETH_PHYS
,
107 .end
= XCEP_ETH_PHYS_END
,
108 .flags
= IORESOURCE_MEM
,
111 .start
= XCEP_ETH_IRQ
,
113 .flags
= IORESOURCE_IRQ
,
116 .name
= "smc91x-attrib",
117 .start
= XCEP_ETH_ATTR
,
118 .end
= XCEP_ETH_ATTR_END
,
119 .flags
= IORESOURCE_MEM
,
123 static struct smc91x_platdata xcep_smc91x_info
= {
124 .flags
= SMC91X_USE_32BIT
| SMC91X_NOWAIT
| SMC91X_USE_DMA
,
127 static struct platform_device smc91x_device
= {
130 .num_resources
= ARRAY_SIZE(smc91x_resources
),
131 .resource
= smc91x_resources
,
133 .platform_data
= &xcep_smc91x_info
,
138 static struct platform_device
*devices
[] __initdata
= {
144 /* We have to state that there are HWMON devices on the I2C bus on XCEP.
145 * Drivers for HWMON verify capabilities of the adapter when loading and
146 * refuse to attach if the adapter doesn't support HWMON class of devices.
147 * See also Documentation/i2c/porting-clients. */
148 static struct i2c_pxa_platform_data xcep_i2c_platform_data
= {
149 .class = I2C_CLASS_HWMON
153 static mfp_cfg_t xcep_pin_config
[] __initdata
= {
154 GPIO79_nCS_3
, /* SMC 91C111 chip select. */
155 GPIO80_nCS_4
, /* CPLD chip select. */
156 /* SSP communication to MSP430 */
164 static void __init
xcep_init(void)
166 pxa2xx_mfp_config(ARRAY_AND_SIZE(xcep_pin_config
));
168 /* See Intel XScale Developer's Guide for details */
169 /* Set RDF and RDN to appropriate values (chip select 3 (smc91x)) */
170 MSC1
= (MSC1
& 0xffff) | 0xD5540000;
171 /* Set RDF and RDN to appropriate values (chip select 5 (fpga)) */
172 MSC2
= (MSC2
& 0xffff) | 0x72A00000;
174 platform_add_devices(ARRAY_AND_SIZE(devices
));
175 pxa_set_i2c_info(&xcep_i2c_platform_data
);
178 MACHINE_START(XCEP
, "Iskratel XCEP")
179 .phys_io
= 0x40000000,
180 .io_pg_offst
= (io_p2v(0x40000000) >> 18) & 0xfffc,
181 .boot_params
= 0xa0000100,
182 .init_machine
= xcep_init
,
183 .map_io
= pxa_map_io
,
184 .init_irq
= pxa25x_init_irq
,