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 @@
#include <asm/hardware.h>
#include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/mach/map.h>
#include <asm/arch/tc.h>
......@@ -25,6 +26,38 @@
#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;
}
......
......@@ -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);
......
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