|
@@ -157,3 +157,145 @@ static struct mtd_partition nand_partitions[] = {
|
|
|
.name = "xloader",
|
|
|
.offset = 0,
|
|
|
.size = 64 * 1024,
|
|
|
+ .mask_flags = MTD_WRITEABLE, /* force read-only */
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "bootloader",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 256 * 1024,
|
|
|
+ .mask_flags = MTD_WRITEABLE, /* force read-only */
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "params",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 192 * 1024,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "kernel",
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ .size = 2 * SZ_1M,
|
|
|
+ },
|
|
|
+#endif
|
|
|
+ {
|
|
|
+ .name = "filesystem",
|
|
|
+ .size = MTDPART_SIZ_FULL,
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+#define H3_NAND_RB_GPIO_PIN 10
|
|
|
+
|
|
|
+static int nand_dev_ready(struct mtd_info *mtd)
|
|
|
+{
|
|
|
+ return gpio_get_value(H3_NAND_RB_GPIO_PIN);
|
|
|
+}
|
|
|
+
|
|
|
+static struct platform_nand_data nand_platdata = {
|
|
|
+ .chip = {
|
|
|
+ .nr_chips = 1,
|
|
|
+ .chip_offset = 0,
|
|
|
+ .nr_partitions = ARRAY_SIZE(nand_partitions),
|
|
|
+ .partitions = nand_partitions,
|
|
|
+ .options = NAND_SAMSUNG_LP_OPTIONS,
|
|
|
+ },
|
|
|
+ .ctrl = {
|
|
|
+ .cmd_ctrl = omap1_nand_cmd_ctl,
|
|
|
+ .dev_ready = nand_dev_ready,
|
|
|
+
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource nand_resource = {
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device nand_device = {
|
|
|
+ .name = "gen_nand",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &nand_platdata,
|
|
|
+ },
|
|
|
+ .num_resources = 1,
|
|
|
+ .resource = &nand_resource,
|
|
|
+};
|
|
|
+
|
|
|
+static struct smc91x_platdata smc91x_info = {
|
|
|
+ .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
|
|
+ .leda = RPC_LED_100_10,
|
|
|
+ .ledb = RPC_LED_TX_RX,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource smc91x_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = OMAP1710_ETHR_START, /* Physical */
|
|
|
+ .end = OMAP1710_ETHR_START + 0xf,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device smc91x_device = {
|
|
|
+ .name = "smc91x",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &smc91x_info,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(smc91x_resources),
|
|
|
+ .resource = smc91x_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static void __init h3_init_smc91x(void)
|
|
|
+{
|
|
|
+ omap_cfg_reg(W15_1710_GPIO40);
|
|
|
+ if (gpio_request(40, "SMC91x irq") < 0) {
|
|
|
+ printk("Error requesting gpio 40 for smc91x irq\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#define GPTIMER_BASE 0xFFFB1400
|
|
|
+#define GPTIMER_REGS(x) (0xFFFB1400 + (x * 0x800))
|
|
|
+#define GPTIMER_REGS_SIZE 0x46
|
|
|
+
|
|
|
+static struct resource intlat_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = GPTIMER_REGS(0), /* Physical */
|
|
|
+ .end = GPTIMER_REGS(0) + GPTIMER_REGS_SIZE,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+ [1] = {
|
|
|
+ .start = INT_1610_GPTIMER1,
|
|
|
+ .end = INT_1610_GPTIMER1,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device intlat_device = {
|
|
|
+ .name = "omap_intlat",
|
|
|
+ .id = 0,
|
|
|
+ .num_resources = ARRAY_SIZE(intlat_resources),
|
|
|
+ .resource = intlat_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource h3_kp_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = INT_KEYBOARD,
|
|
|
+ .end = INT_KEYBOARD,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static const struct matrix_keymap_data h3_keymap_data = {
|
|
|
+ .keymap = h3_keymap,
|
|
|
+ .keymap_size = ARRAY_SIZE(h3_keymap),
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_kp_platform_data h3_kp_data = {
|
|
|
+ .rows = 8,
|
|
|
+ .cols = 8,
|
|
|
+ .keymap_data = &h3_keymap_data,
|
|
|
+ .rep = true,
|
|
|
+ .delay = 9,
|
|
|
+ .dbounce = true,
|