]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
[PATCH] ARM: OMAP: IR
authorDavid Brownell <dbrownell@users.sourceforge.net>
Tue, 26 Jul 2005 08:19:35 +0000 (01:19 -0700)
committerTony Lindgren <tony@atomide.com>
Tue, 26 Jul 2005 08:19:35 +0000 (01:19 -0700)
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 <dbrownell@users.sourceforge.net>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/mach-omap1/devices.c
drivers/net/irda/omap1610-ir.c

index c8e6ef81fdc6e28a9a1294bd5785776250a4897e..07becfbf660d0b01c556f46c09f64b8eb2dd0b33 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <asm/hardware.h>
 #include <asm/io.h>
+#include <asm/mach-types.h>
 #include <asm/mach/map.h>
 
 #include <asm/arch/tc.h>
 #include <asm/arch/gpio.h>
 
 
+#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;
 }
index 9dddbc45c9546c7cfcdf7368c70543d5b76b3963..1ee7229c88b3fff5c681b807a61f6c5a009aed9a 100644 (file)
@@ -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);