|
@@ -280,3 +280,135 @@ static struct platform_device h2_kp_device = {
|
|
|
|
|
|
static struct omap_irda_config h2_irda_data = {
|
|
|
.transceiver_cap = IR_SIRMODE | IR_MIRMODE | IR_FIRMODE,
|
|
|
+ .rx_channel = OMAP_DMA_UART3_RX,
|
|
|
+ .tx_channel = OMAP_DMA_UART3_TX,
|
|
|
+ .dest_start = UART3_THR,
|
|
|
+ .src_start = UART3_RHR,
|
|
|
+ .tx_trigger = 0,
|
|
|
+ .rx_trigger = 0,
|
|
|
+};
|
|
|
+
|
|
|
+static struct resource h2_irda_resources[] = {
|
|
|
+ [0] = {
|
|
|
+ .start = INT_UART3,
|
|
|
+ .end = INT_UART3,
|
|
|
+ .flags = IORESOURCE_IRQ,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static u64 irda_dmamask = 0xffffffff;
|
|
|
+
|
|
|
+static struct platform_device h2_irda_device = {
|
|
|
+ .name = "omapirda",
|
|
|
+ .id = 0,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &h2_irda_data,
|
|
|
+ .dma_mask = &irda_dmamask,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(h2_irda_resources),
|
|
|
+ .resource = h2_irda_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct gpio_led h2_gpio_led_pins[] = {
|
|
|
+ {
|
|
|
+ .name = "h2:red",
|
|
|
+ .default_trigger = "heartbeat",
|
|
|
+ .gpio = 3,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "h2:green",
|
|
|
+ .default_trigger = "cpu0",
|
|
|
+ .gpio = OMAP_MPUIO(4),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct gpio_led_platform_data h2_gpio_led_data = {
|
|
|
+ .leds = h2_gpio_led_pins,
|
|
|
+ .num_leds = ARRAY_SIZE(h2_gpio_led_pins),
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device h2_gpio_leds = {
|
|
|
+ .name = "leds-gpio",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &h2_gpio_led_data,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device *h2_devices[] __initdata = {
|
|
|
+ &h2_nor_device,
|
|
|
+ &h2_nand_device,
|
|
|
+ &h2_smc91x_device,
|
|
|
+ &h2_irda_device,
|
|
|
+ &h2_kp_device,
|
|
|
+ &h2_gpio_leds,
|
|
|
+};
|
|
|
+
|
|
|
+static void __init h2_init_smc91x(void)
|
|
|
+{
|
|
|
+ if (gpio_request(0, "SMC91x irq") < 0) {
|
|
|
+ printk("Error requesting gpio 0 for smc91x irq\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+static int tps_setup(struct i2c_client *client, void *context)
|
|
|
+{
|
|
|
+ tps65010_config_vregs1(TPS_LDO2_ENABLE | TPS_VLDO2_3_0V |
|
|
|
+ TPS_LDO1_ENABLE | TPS_VLDO1_3_0V);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct tps65010_board tps_board = {
|
|
|
+ .base = H2_TPS_GPIO_BASE,
|
|
|
+ .outmask = 0x0f,
|
|
|
+ .setup = tps_setup,
|
|
|
+};
|
|
|
+
|
|
|
+static struct i2c_board_info __initdata h2_i2c_board_info[] = {
|
|
|
+ {
|
|
|
+ I2C_BOARD_INFO("tps65010", 0x48),
|
|
|
+ .platform_data = &tps_board,
|
|
|
+ }, {
|
|
|
+ I2C_BOARD_INFO("isp1301_omap", 0x2d),
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_usb_config h2_usb_config __initdata = {
|
|
|
+ /* usb1 has a Mini-AB port and external isp1301 transceiver */
|
|
|
+ .otg = 2,
|
|
|
+
|
|
|
+#ifdef CONFIG_USB_GADGET_OMAP
|
|
|
+ .hmc_mode = 19, /* 0:host(off) 1:dev|otg 2:disabled */
|
|
|
+ /* .hmc_mode = 21,*/ /* 0:host(off) 1:dev(loopback) 2:host(loopback) */
|
|
|
+#elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
|
|
+ /* needs OTG cable, or NONSTANDARD (B-to-MiniB) */
|
|
|
+ .hmc_mode = 20, /* 1:dev|otg(off) 1:host 2:disabled */
|
|
|
+#endif
|
|
|
+
|
|
|
+ .pins[1] = 3,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap_lcd_config h2_lcd_config __initdata = {
|
|
|
+ .ctrl_name = "internal",
|
|
|
+};
|
|
|
+
|
|
|
+static void __init h2_init(void)
|
|
|
+{
|
|
|
+ h2_init_smc91x();
|
|
|
+
|
|
|
+ /* Here we assume the NOR boot config: NOR on CS3 (possibly swapped
|
|
|
+ * to address 0 by a dip switch), NAND on CS2B. The NAND driver will
|
|
|
+ * notice whether a NAND chip is enabled at probe time.
|
|
|
+ *
|
|
|
+ * FIXME revC boards (and H3) support NAND-boot, with a dip switch to
|
|
|
+ * put NOR on CS2B and NAND (which on H2 may be 16bit) on CS3. Try
|
|
|
+ * detecting that in code here, to avoid probing every possible flash
|
|
|
+ * configuration...
|
|
|
+ */
|
|
|
+ h2_nor_resource.end = h2_nor_resource.start = omap_cs3_phys();
|
|
|
+ h2_nor_resource.end += SZ_32M - 1;
|
|
|
+
|
|
|
+ h2_nand_resource.end = h2_nand_resource.start = OMAP_CS2B_PHYS;
|
|
|
+ h2_nand_resource.end += SZ_4K - 1;
|