From: David Brownell Date: Tue, 26 Jul 2005 08:19:35 +0000 (-0700) Subject: [PATCH] ARM: OMAP: IR X-Git-Tag: v2.6.13-omap1~61 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=ddb8fcd21832a94932aedcdb5e826e9a04541422;p=linux-2.6-omap-h63xx.git [PATCH] ARM: OMAP: IR Makes IR driver stop defining and registering its own platform_device. Also make it properly declare its DMA capability. Issues noted with IR driver: DMA should just map/unmap SKB data; no UART1 support; SIR/MIR/FIR selection uses board-specific code. And there's no OMAP_TAG saying whether IRDA is even relevant. Signed-off-by: David Brownell Signed-off-by: Tony Lindgren --- diff --git a/arch/arm/mach-omap1/devices.c b/arch/arm/mach-omap1/devices.c index c8e6ef81fdc..07becfbf660 100644 --- a/arch/arm/mach-omap1/devices.c +++ b/arch/arm/mach-omap1/devices.c @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -25,6 +26,38 @@ #include +#if defined(CONFIG_OMAP1610_IR) || defined(CONFIG_OMAP161O_IR_MODULE) + +static u64 irda_dmamask = 0xffffffff; + +static struct platform_device omap1610ir_device = { + .name = "omap1610-ir", + .id = -1, + .dev = { + .release = omap_nop_release, + .dma_mask = &irda_dmamask, + }, +}; + +static void omap_init_irda(void) +{ + /* FIXME define and use a boot tag, members something like: + * u8 uart; // uart1, or uart3 + * ... but driver only handles uart3 for now + * s16 fir_sel; // gpio for SIR vs FIR + * ... may prefer a callback for SIR/MIR/FIR mode select; + * while h2 uses a GPIO, H3 uses a gpio expander + */ + if (machine_is_omap_h2() + || machine_is_omap_h3()) + (void) platform_device_register(&omap1610ir_device); +} +#else +static inline void omap_init_irda(void) {} +#endif + +/*-------------------------------------------------------------------------*/ + #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE) #define OMAP_MMC1_BASE 0xfffb7800 @@ -183,6 +216,8 @@ static inline void omap_init_mmc(void) {} */ static int __init omap_init_devices(void) { + omap_init_i2c(); + omap_init_irda(); omap_init_mmc(); return 0; } diff --git a/drivers/net/irda/omap1610-ir.c b/drivers/net/irda/omap1610-ir.c index 9dddbc45c95..1ee7229c88b 100644 --- a/drivers/net/irda/omap1610-ir.c +++ b/drivers/net/irda/omap1610-ir.c @@ -962,11 +962,6 @@ static int omap1610_irda_remove(struct device *_dev) return 0; } -static void irda_dummy_release(struct device *dev) -{ - /* Dummy function to keep the platform driver happy */ -} - static struct device_driver omap1610ir_driver = { .name = "omap1610-ir", .bus = &platform_bus_type, @@ -976,29 +971,15 @@ static struct device_driver omap1610ir_driver = { .resume = omap1610_irda_resume, }; -static struct platform_device omap1610ir_device = { - .name = "omap1610-ir", - .dev.release = irda_dummy_release, - .id = 0, -}; - static int __init omap1610_irda_init(void) { - int ret; - ret = driver_register(&omap1610ir_driver); - if (ret == 0) { - ret = platform_device_register(&omap1610ir_device); - if (ret) - driver_unregister(&omap1610ir_driver); - } - return ret; + return driver_register(&omap1610ir_driver); } static void __exit omap1610_irda_exit(void) { driver_unregister(&omap1610ir_driver); - platform_device_unregister(&omap1610ir_device); } module_init(omap1610_irda_init);