--- a/arch/arm/mach-omap2/board-n8x0.c +++ b/arch/arm/mach-omap2/board-n8x0.c @@ -15,8 +15,10 @@ #include #include #include +#include #include #include +#include #include #include #include @@ -33,6 +35,7 @@ #include #include #include +#include #include "mux.h" @@ -194,6 +197,114 @@ static struct omap_onenand_platform_data }; #endif +#if defined(CONFIG_CBUS) || defined(CONFIG_CBUS_MODULE) + +static struct cbus_host_platform_data n8x0_cbus_data = { + .clk_gpio = 66, + .dat_gpio = 65, + .sel_gpio = 64, +}; + +static struct platform_device n8x0_cbus_device = { + .name = "cbus", + .id = -1, + .dev = { + .platform_data = &n8x0_cbus_data, + }, +}; + +static struct resource retu_resource[] = { + { + .start = -EINVAL, /* set later */ + .flags = IORESOURCE_IRQ, + }, +}; + +static struct cbus_retu_platform_data n8x0_retu_data = { + .irq_base = CBUS_RETU_IRQ_BASE, + .irq_end = CBUS_RETU_IRQ_END, + .devid = CBUS_RETU_DEVICE_ID, +}; + +static struct platform_device retu_device = { + .name = "retu", + .id = -1, + .resource = retu_resource, + .num_resources = ARRAY_SIZE(retu_resource), + .dev = { + .platform_data = &n8x0_retu_data, + }, +}; + +static struct resource tahvo_resource[] = { + { + .start = -EINVAL, /* set later */ + .flags = IORESOURCE_IRQ, + } +}; + +static struct platform_device tahvo_device = { + .name = "tahvo", + .id = -1, + .resource = tahvo_resource, + .num_resources = ARRAY_SIZE(tahvo_resource), +}; + +static struct platform_device tahvo_usb_device = { + .name = "tahvo-usb", + .id = -1, +}; + +static void __init n8x0_cbus_init(void) +{ + int ret; + + platform_device_register(&n8x0_cbus_device); + + ret = gpio_request(108, "RETU irq"); + if (ret < 0) { + pr_err("retu: Unable to reserve IRQ GPIO\n"); + return; + } + + ret = gpio_direction_input(108); + if (ret < 0) { + pr_err("retu: Unable to change gpio direction\n"); + gpio_free(108); + return; + } + + set_irq_type(gpio_to_irq(108), IRQ_TYPE_EDGE_RISING); + retu_resource[0].start = gpio_to_irq(108); + platform_device_register(&retu_device); + + ret = gpio_request(111, "TAHVO irq"); + if (ret) { + pr_err("tahvo: Unable to reserve IRQ GPIO\n"); + gpio_free(108); + return; + } + + /* Set the pin as input */ + ret = gpio_direction_input(111); + if (ret) { + pr_err("tahvo: Unable to change direction\n"); + gpio_free(108); + gpio_free(111); + return; + } + + tahvo_resource[0].start = gpio_to_irq(111); + platform_device_register(&tahvo_device); + platform_device_register(&tahvo_usb_device); +} + +#else +static inline void __init n8x0_cbus_init(void) +{ +} +#endif + #if defined(CONFIG_MENELAUS) && \ (defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)) @@ -628,11 +739,10 @@ static void __init n8x0_map_io(void) omap242x_map_common_io(); } -static void __init n8x0_init_irq(void) +static void __init n8x0_init_early(void) { omap2_init_common_infrastructure(); omap2_init_common_devices(NULL, NULL); - omap_init_irq(); } #ifdef CONFIG_OMAP_MUX @@ -686,6 +796,8 @@ static inline void board_serial_init(voi static void __init n8x0_init_machine(void) { omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC); + n8x0_cbus_init(); + /* FIXME: add n810 spi devices */ spi_register_board_info(n800_spi_board_info, ARRAY_SIZE(n800_spi_board_info)); @@ -703,27 +815,30 @@ static void __init n8x0_init_machine(voi MACHINE_START(NOKIA_N800, "Nokia N800") .boot_params = 0x80000100, - .map_io = n8x0_map_io, .reserve = omap_reserve, - .init_irq = n8x0_init_irq, + .map_io = n8x0_map_io, + .init_early = n8x0_init_early, + .init_irq = omap_init_irq, .init_machine = n8x0_init_machine, .timer = &omap_timer, MACHINE_END MACHINE_START(NOKIA_N810, "Nokia N810") .boot_params = 0x80000100, - .map_io = n8x0_map_io, .reserve = omap_reserve, - .init_irq = n8x0_init_irq, + .map_io = n8x0_map_io, + .init_early = n8x0_init_early, + .init_irq = omap_init_irq, .init_machine = n8x0_init_machine, .timer = &omap_timer, MACHINE_END MACHINE_START(NOKIA_N810_WIMAX, "Nokia N810 WiMAX") .boot_params = 0x80000100, - .map_io = n8x0_map_io, .reserve = omap_reserve, - .init_irq = n8x0_init_irq, + .map_io = n8x0_map_io, + .init_early = n8x0_init_early, + .init_irq = omap_init_irq, .init_machine = n8x0_init_machine, .timer = &omap_timer, MACHINE_END