Commit ddb8fcd2 authored by David Brownell's avatar David Brownell Committed by Tony Lindgren

[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: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
parent ff0d5f8b
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include <asm/hardware.h> #include <asm/hardware.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/mach/map.h> #include <asm/mach/map.h>
#include <asm/arch/tc.h> #include <asm/arch/tc.h>
...@@ -25,6 +26,38 @@ ...@@ -25,6 +26,38 @@
#include <asm/arch/gpio.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) #if defined(CONFIG_MMC_OMAP) || defined(CONFIG_MMC_OMAP_MODULE)
#define OMAP_MMC1_BASE 0xfffb7800 #define OMAP_MMC1_BASE 0xfffb7800
...@@ -183,6 +216,8 @@ static inline void omap_init_mmc(void) {} ...@@ -183,6 +216,8 @@ static inline void omap_init_mmc(void) {}
*/ */
static int __init omap_init_devices(void) static int __init omap_init_devices(void)
{ {
omap_init_i2c();
omap_init_irda();
omap_init_mmc(); omap_init_mmc();
return 0; return 0;
} }
......
...@@ -962,11 +962,6 @@ static int omap1610_irda_remove(struct device *_dev) ...@@ -962,11 +962,6 @@ static int omap1610_irda_remove(struct device *_dev)
return 0; return 0;
} }
static void irda_dummy_release(struct device *dev)
{
/* Dummy function to keep the platform driver happy */
}
static struct device_driver omap1610ir_driver = { static struct device_driver omap1610ir_driver = {
.name = "omap1610-ir", .name = "omap1610-ir",
.bus = &platform_bus_type, .bus = &platform_bus_type,
...@@ -976,29 +971,15 @@ static struct device_driver omap1610ir_driver = { ...@@ -976,29 +971,15 @@ static struct device_driver omap1610ir_driver = {
.resume = omap1610_irda_resume, .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) static int __init omap1610_irda_init(void)
{ {
int ret; return driver_register(&omap1610ir_driver);
ret = driver_register(&omap1610ir_driver);
if (ret == 0) {
ret = platform_device_register(&omap1610ir_device);
if (ret)
driver_unregister(&omap1610ir_driver);
}
return ret;
} }
static void __exit omap1610_irda_exit(void) static void __exit omap1610_irda_exit(void)
{ {
driver_unregister(&omap1610ir_driver); driver_unregister(&omap1610ir_driver);
platform_device_unregister(&omap1610ir_device);
} }
module_init(omap1610_irda_init); module_init(omap1610_irda_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment