diff options
Diffstat (limited to 'arch/arm/mach-davinci/board-dm646x-evm.c')
-rw-r--r-- | arch/arm/mach-davinci/board-dm646x-evm.c | 86 |
1 files changed, 70 insertions, 16 deletions
diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c b/arch/arm/mach-davinci/board-dm646x-evm.c index 24e0e13b1492..8d0b0e01c59b 100644 --- a/arch/arm/mach-davinci/board-dm646x-evm.c +++ b/arch/arm/mach-davinci/board-dm646x-evm.c | |||
@@ -17,38 +17,28 @@ | |||
17 | **************************************************************************/ | 17 | **************************************************************************/ |
18 | 18 | ||
19 | #include <linux/kernel.h> | 19 | #include <linux/kernel.h> |
20 | #include <linux/module.h> | ||
21 | #include <linux/init.h> | 20 | #include <linux/init.h> |
22 | #include <linux/fs.h> | ||
23 | #include <linux/major.h> | ||
24 | #include <linux/root_dev.h> | ||
25 | #include <linux/dma-mapping.h> | ||
26 | #include <linux/serial.h> | ||
27 | #include <linux/serial_8250.h> | ||
28 | #include <linux/leds.h> | 21 | #include <linux/leds.h> |
29 | #include <linux/gpio.h> | 22 | #include <linux/gpio.h> |
30 | #include <linux/io.h> | ||
31 | #include <linux/platform_device.h> | 23 | #include <linux/platform_device.h> |
32 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
33 | #include <linux/i2c/at24.h> | 25 | #include <linux/i2c/at24.h> |
34 | #include <linux/i2c/pcf857x.h> | 26 | #include <linux/i2c/pcf857x.h> |
35 | #include <linux/etherdevice.h> | ||
36 | 27 | ||
37 | #include <media/tvp514x.h> | 28 | #include <media/tvp514x.h> |
38 | 29 | ||
39 | #include <asm/setup.h> | 30 | #include <linux/mtd/mtd.h> |
31 | #include <linux/mtd/nand.h> | ||
32 | #include <linux/mtd/partitions.h> | ||
33 | |||
40 | #include <asm/mach-types.h> | 34 | #include <asm/mach-types.h> |
41 | #include <asm/mach/arch.h> | 35 | #include <asm/mach/arch.h> |
42 | #include <asm/mach/map.h> | ||
43 | #include <asm/mach/flash.h> | ||
44 | 36 | ||
45 | #include <mach/dm646x.h> | 37 | #include <mach/dm646x.h> |
46 | #include <mach/common.h> | 38 | #include <mach/common.h> |
47 | #include <mach/psc.h> | ||
48 | #include <mach/serial.h> | 39 | #include <mach/serial.h> |
49 | #include <mach/i2c.h> | 40 | #include <mach/i2c.h> |
50 | #include <mach/mmc.h> | 41 | #include <mach/nand.h> |
51 | #include <mach/emac.h> | ||
52 | 42 | ||
53 | #if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \ | 43 | #if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \ |
54 | defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE) | 44 | defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE) |
@@ -57,6 +47,11 @@ | |||
57 | #define HAS_ATA 0 | 47 | #define HAS_ATA 0 |
58 | #endif | 48 | #endif |
59 | 49 | ||
50 | #define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x20008000 | ||
51 | #define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x42000000 | ||
52 | |||
53 | #define NAND_BLOCK_SIZE SZ_128K | ||
54 | |||
60 | /* CPLD Register 0 bits to control ATA */ | 55 | /* CPLD Register 0 bits to control ATA */ |
61 | #define DM646X_EVM_ATA_RST BIT(0) | 56 | #define DM646X_EVM_ATA_RST BIT(0) |
62 | #define DM646X_EVM_ATA_PWD BIT(1) | 57 | #define DM646X_EVM_ATA_PWD BIT(1) |
@@ -92,6 +87,63 @@ static struct davinci_uart_config uart_config __initdata = { | |||
92 | .enabled_uarts = (1 << 0), | 87 | .enabled_uarts = (1 << 0), |
93 | }; | 88 | }; |
94 | 89 | ||
90 | /* Note: We are setting first partition as 'bootloader' constituting UBL, U-Boot | ||
91 | * and U-Boot environment this avoids dependency on any particular combination | ||
92 | * of UBL, U-Boot or flashing tools etc. | ||
93 | */ | ||
94 | static struct mtd_partition davinci_nand_partitions[] = { | ||
95 | { | ||
96 | /* UBL, U-Boot with environment */ | ||
97 | .name = "bootloader", | ||
98 | .offset = MTDPART_OFS_APPEND, | ||
99 | .size = 16 * NAND_BLOCK_SIZE, | ||
100 | .mask_flags = MTD_WRITEABLE, /* force read-only */ | ||
101 | }, { | ||
102 | .name = "kernel", | ||
103 | .offset = MTDPART_OFS_APPEND, | ||
104 | .size = SZ_4M, | ||
105 | .mask_flags = 0, | ||
106 | }, { | ||
107 | .name = "filesystem", | ||
108 | .offset = MTDPART_OFS_APPEND, | ||
109 | .size = MTDPART_SIZ_FULL, | ||
110 | .mask_flags = 0, | ||
111 | } | ||
112 | }; | ||
113 | |||
114 | static struct davinci_nand_pdata davinci_nand_data = { | ||
115 | .mask_cle = 0x80000, | ||
116 | .mask_ale = 0x40000, | ||
117 | .parts = davinci_nand_partitions, | ||
118 | .nr_parts = ARRAY_SIZE(davinci_nand_partitions), | ||
119 | .ecc_mode = NAND_ECC_HW, | ||
120 | .options = 0, | ||
121 | }; | ||
122 | |||
123 | static struct resource davinci_nand_resources[] = { | ||
124 | { | ||
125 | .start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE, | ||
126 | .end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_32M - 1, | ||
127 | .flags = IORESOURCE_MEM, | ||
128 | }, { | ||
129 | .start = DAVINCI_ASYNC_EMIF_CONTROL_BASE, | ||
130 | .end = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1, | ||
131 | .flags = IORESOURCE_MEM, | ||
132 | }, | ||
133 | }; | ||
134 | |||
135 | static struct platform_device davinci_nand_device = { | ||
136 | .name = "davinci_nand", | ||
137 | .id = 0, | ||
138 | |||
139 | .num_resources = ARRAY_SIZE(davinci_nand_resources), | ||
140 | .resource = davinci_nand_resources, | ||
141 | |||
142 | .dev = { | ||
143 | .platform_data = &davinci_nand_data, | ||
144 | }, | ||
145 | }; | ||
146 | |||
95 | /* CPLD Register 0 Client: used for I/O Control */ | 147 | /* CPLD Register 0 Client: used for I/O Control */ |
96 | static int cpld_reg0_probe(struct i2c_client *client, | 148 | static int cpld_reg0_probe(struct i2c_client *client, |
97 | const struct i2c_device_id *id) | 149 | const struct i2c_device_id *id) |
@@ -142,7 +194,7 @@ static struct gpio_led evm_leds[] = { | |||
142 | { .name = "DS4", .active_low = 1, }, | 194 | { .name = "DS4", .active_low = 1, }, |
143 | }; | 195 | }; |
144 | 196 | ||
145 | static __initconst struct gpio_led_platform_data evm_led_data = { | 197 | static const struct gpio_led_platform_data evm_led_data = { |
146 | .num_leds = ARRAY_SIZE(evm_leds), | 198 | .num_leds = ARRAY_SIZE(evm_leds), |
147 | .leds = evm_leds, | 199 | .leds = evm_leds, |
148 | }; | 200 | }; |
@@ -647,6 +699,8 @@ static __init void evm_init(void) | |||
647 | dm646x_init_mcasp0(&dm646x_evm_snd_data[0]); | 699 | dm646x_init_mcasp0(&dm646x_evm_snd_data[0]); |
648 | dm646x_init_mcasp1(&dm646x_evm_snd_data[1]); | 700 | dm646x_init_mcasp1(&dm646x_evm_snd_data[1]); |
649 | 701 | ||
702 | platform_device_register(&davinci_nand_device); | ||
703 | |||
650 | if (HAS_ATA) | 704 | if (HAS_ATA) |
651 | dm646x_init_ide(); | 705 | dm646x_init_ide(); |
652 | 706 | ||