|
@@ -1087,3 +1087,190 @@ static struct mtd_partition onenand_partitions[] = {
|
|
.offset = MTDPART_OFS_APPEND,
|
|
.offset = MTDPART_OFS_APPEND,
|
|
.size = 0x60000,
|
|
.size = 0x60000,
|
|
},
|
|
},
|
|
|
|
+ {
|
|
|
|
+ .name = "log",
|
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
|
+ .size = 0x40000,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "kernel",
|
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
|
+ .size = 0x200000,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "initfs",
|
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
|
+ .size = 0x200000,
|
|
|
|
+ },
|
|
|
|
+ {
|
|
|
|
+ .name = "rootfs",
|
|
|
|
+ .offset = MTDPART_OFS_APPEND,
|
|
|
|
+ .size = MTDPART_SIZ_FULL,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct omap_onenand_platform_data board_onenand_data[] = {
|
|
|
|
+ {
|
|
|
|
+ .cs = 0,
|
|
|
|
+ .gpio_irq = 65,
|
|
|
|
+ .parts = onenand_partitions,
|
|
|
|
+ .nr_parts = ARRAY_SIZE(onenand_partitions),
|
|
|
|
+ .flags = ONENAND_SYNC_READWRITE,
|
|
|
|
+ }
|
|
|
|
+};
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
|
|
|
|
+
|
|
|
|
+static struct omap_smc91x_platform_data board_smc91x_data = {
|
|
|
|
+ .cs = 1,
|
|
|
|
+ .gpio_irq = 54,
|
|
|
|
+ .gpio_pwrdwn = 86,
|
|
|
|
+ .gpio_reset = 164,
|
|
|
|
+ .flags = GPMC_TIMINGS_SMC91C96 | IORESOURCE_IRQ_HIGHLEVEL,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init board_smc91x_init(void)
|
|
|
|
+{
|
|
|
|
+ omap_mux_init_gpio(54, OMAP_PIN_INPUT_PULLDOWN);
|
|
|
|
+ omap_mux_init_gpio(86, OMAP_PIN_OUTPUT);
|
|
|
|
+ omap_mux_init_gpio(164, OMAP_PIN_OUTPUT);
|
|
|
|
+
|
|
|
|
+ gpmc_smc91x_init(&board_smc91x_data);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#else
|
|
|
|
+
|
|
|
|
+static inline void board_smc91x_init(void)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+static void rx51_wl1251_set_power(bool enable)
|
|
|
|
+{
|
|
|
|
+ gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct gpio rx51_wl1251_gpios[] __initdata = {
|
|
|
|
+ { RX51_WL1251_POWER_GPIO, GPIOF_OUT_INIT_LOW, "wl1251 power" },
|
|
|
|
+ { RX51_WL1251_IRQ_GPIO, GPIOF_IN, "wl1251 irq" },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init rx51_init_wl1251(void)
|
|
|
|
+{
|
|
|
|
+ int irq, ret;
|
|
|
|
+
|
|
|
|
+ ret = gpio_request_array(rx51_wl1251_gpios,
|
|
|
|
+ ARRAY_SIZE(rx51_wl1251_gpios));
|
|
|
|
+ if (ret < 0)
|
|
|
|
+ goto error;
|
|
|
|
+
|
|
|
|
+ irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
|
|
|
|
+ if (irq < 0)
|
|
|
|
+ goto err_irq;
|
|
|
|
+
|
|
|
|
+ wl1251_pdata.set_power = rx51_wl1251_set_power;
|
|
|
|
+ rx51_peripherals_spi_board_info[RX51_SPI_WL1251].irq = irq;
|
|
|
|
+
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+err_irq:
|
|
|
|
+ gpio_free(RX51_WL1251_IRQ_GPIO);
|
|
|
|
+ gpio_free(RX51_WL1251_POWER_GPIO);
|
|
|
|
+error:
|
|
|
|
+ printk(KERN_ERR "wl1251 board initialisation failed\n");
|
|
|
|
+ wl1251_pdata.set_power = NULL;
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Now rx51_peripherals_spi_board_info[1].irq is zero and
|
|
|
|
+ * set_power is null, and wl1251_probe() will fail.
|
|
|
|
+ */
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static struct tsc2005_platform_data tsc2005_pdata = {
|
|
|
|
+ .ts_pressure_max = 2048,
|
|
|
|
+ .ts_pressure_fudge = 2,
|
|
|
|
+ .ts_x_max = 4096,
|
|
|
|
+ .ts_x_fudge = 4,
|
|
|
|
+ .ts_y_max = 4096,
|
|
|
|
+ .ts_y_fudge = 7,
|
|
|
|
+ .ts_x_plate_ohm = 280,
|
|
|
|
+ .esd_timeout_ms = 8000,
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct gpio rx51_tsc2005_gpios[] __initdata = {
|
|
|
|
+ { RX51_TSC2005_IRQ_GPIO, GPIOF_IN, "tsc2005 IRQ" },
|
|
|
|
+ { RX51_TSC2005_RESET_GPIO, GPIOF_OUT_INIT_HIGH, "tsc2005 reset" },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void rx51_tsc2005_set_reset(bool enable)
|
|
|
|
+{
|
|
|
|
+ gpio_set_value(RX51_TSC2005_RESET_GPIO, enable);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static void __init rx51_init_tsc2005(void)
|
|
|
|
+{
|
|
|
|
+ int r;
|
|
|
|
+
|
|
|
|
+ omap_mux_init_gpio(RX51_TSC2005_RESET_GPIO, OMAP_PIN_OUTPUT);
|
|
|
|
+ omap_mux_init_gpio(RX51_TSC2005_IRQ_GPIO, OMAP_PIN_INPUT_PULLUP);
|
|
|
|
+
|
|
|
|
+ r = gpio_request_array(rx51_tsc2005_gpios,
|
|
|
|
+ ARRAY_SIZE(rx51_tsc2005_gpios));
|
|
|
|
+ if (r < 0) {
|
|
|
|
+ printk(KERN_ERR "tsc2005 board initialization failed\n");
|
|
|
|
+ tsc2005_pdata.esd_timeout_ms = 0;
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ tsc2005_pdata.set_reset = rx51_tsc2005_set_reset;
|
|
|
|
+ rx51_peripherals_spi_board_info[RX51_SPI_TSC2005].irq =
|
|
|
|
+ gpio_to_irq(RX51_TSC2005_IRQ_GPIO);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE)
|
|
|
|
+static struct lirc_rx51_platform_data rx51_lirc_data = {
|
|
|
|
+ .set_max_mpu_wakeup_lat = omap_pm_set_max_mpu_wakeup_lat,
|
|
|
|
+ .pwm_timer = 9, /* Use GPT 9 for CIR */
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static struct platform_device rx51_lirc_device = {
|
|
|
|
+ .name = "lirc_rx51",
|
|
|
|
+ .id = -1,
|
|
|
|
+ .dev = {
|
|
|
|
+ .platform_data = &rx51_lirc_data,
|
|
|
|
+ },
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+static void __init rx51_init_lirc(void)
|
|
|
|
+{
|
|
|
|
+ platform_device_register(&rx51_lirc_device);
|
|
|
|
+}
|
|
|
|
+#else
|
|
|
|
+static void __init rx51_init_lirc(void)
|
|
|
|
+{
|
|
|
|
+}
|
|
|
|
+#endif
|
|
|
|
+
|
|
|
|
+void __init rx51_peripherals_init(void)
|
|
|
|
+{
|
|
|
|
+ rx51_i2c_init();
|
|
|
|
+ regulator_has_full_constraints();
|
|
|
|
+ gpmc_onenand_init(board_onenand_data);
|
|
|
|
+ board_smc91x_init();
|
|
|
|
+ rx51_add_gpio_keys();
|
|
|
|
+ rx51_init_wl1251();
|
|
|
|
+ rx51_init_tsc2005();
|
|
|
|
+ rx51_init_si4713();
|
|
|
|
+ rx51_init_lirc();
|
|
|
|
+ spi_register_board_info(rx51_peripherals_spi_board_info,
|
|
|
|
+ ARRAY_SIZE(rx51_peripherals_spi_board_info));
|
|
|
|
+
|
|
|
|
+ partition = omap_mux_get("core");
|
|
|
|
+ if (partition)
|
|
|
|
+ omap_hsmmc_init(mmc);
|
|
|
|
+
|
|
|
|
+ rx51_charger_init();
|
|
|
|
+}
|
|
|
|
+
|