Commit 1c5fa1c7 authored by Sudip Mukherjee's avatar Sudip Mukherjee Committed by Greg Kroah-Hartman

staging: media: lirc: use new parport device model

Modify lirc_parallel driver to use the new parallel port device model.
Signed-off-by: default avatarSudip Mukherjee <sudip.mukherjee@codethink.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 76f2507b
...@@ -626,41 +626,26 @@ static void kf(void *handle) ...@@ -626,41 +626,26 @@ static void kf(void *handle)
/*** module initialization and cleanup ***/ /*** module initialization and cleanup ***/
static int __init lirc_parallel_init(void) static void lirc_parallel_attach(struct parport *port)
{ {
int result; struct pardev_cb lirc_parallel_cb;
result = platform_driver_register(&lirc_parallel_driver);
if (result) {
pr_notice("platform_driver_register returned %d\n", result);
return result;
}
lirc_parallel_dev = platform_device_alloc(LIRC_DRIVER_NAME, 0); if (port->base != io)
if (!lirc_parallel_dev) { return;
result = -ENOMEM;
goto exit_driver_unregister;
}
result = platform_device_add(lirc_parallel_dev); pport = port;
if (result) memset(&lirc_parallel_cb, 0, sizeof(lirc_parallel_cb));
goto exit_device_put; lirc_parallel_cb.preempt = pf;
lirc_parallel_cb.wakeup = kf;
lirc_parallel_cb.irq_func = lirc_lirc_irq_handler;
pport = parport_find_base(io); ppdevice = parport_register_dev_model(port, LIRC_DRIVER_NAME,
if (!pport) { &lirc_parallel_cb, 0);
pr_notice("no port at %x found\n", io);
result = -ENXIO;
goto exit_device_del;
}
ppdevice = parport_register_device(pport, LIRC_DRIVER_NAME,
pf, kf, lirc_lirc_irq_handler, 0,
NULL);
parport_put_port(pport);
if (!ppdevice) { if (!ppdevice) {
pr_notice("parport_register_device() failed\n"); pr_notice("parport_register_device() failed\n");
result = -ENXIO; return;
goto exit_device_del;
} }
if (parport_claim(ppdevice) != 0) if (parport_claim(ppdevice) != 0)
goto skip_init; goto skip_init;
is_claimed = 1; is_claimed = 1;
...@@ -688,18 +673,64 @@ static int __init lirc_parallel_init(void) ...@@ -688,18 +673,64 @@ static int __init lirc_parallel_init(void)
is_claimed = 0; is_claimed = 0;
parport_release(ppdevice); parport_release(ppdevice);
skip_init: skip_init:
return;
}
static void lirc_parallel_detach(struct parport *port)
{
if (port->base != io)
return;
parport_unregister_device(ppdevice);
}
static struct parport_driver lirc_parport_driver = {
.name = LIRC_DRIVER_NAME,
.match_port = lirc_parallel_attach,
.detach = lirc_parallel_detach,
.devmodel = true,
};
static int __init lirc_parallel_init(void)
{
int result;
result = platform_driver_register(&lirc_parallel_driver);
if (result) {
pr_notice("platform_driver_register returned %d\n", result);
return result;
}
lirc_parallel_dev = platform_device_alloc(LIRC_DRIVER_NAME, 0);
if (!lirc_parallel_dev) {
result = -ENOMEM;
goto exit_driver_unregister;
}
result = platform_device_add(lirc_parallel_dev);
if (result)
goto exit_device_put;
result = parport_register_driver(&lirc_parport_driver);
if (result) {
pr_notice("parport_register_driver returned %d\n", result);
goto exit_device_del;
}
driver.dev = &lirc_parallel_dev->dev; driver.dev = &lirc_parallel_dev->dev;
driver.minor = lirc_register_driver(&driver); driver.minor = lirc_register_driver(&driver);
if (driver.minor < 0) { if (driver.minor < 0) {
pr_notice("register_chrdev() failed\n"); pr_notice("register_chrdev() failed\n");
parport_unregister_device(ppdevice);
result = -EIO; result = -EIO;
goto exit_device_del; goto exit_unregister;
} }
pr_info("installed using port 0x%04x irq %d\n", io, irq); pr_info("installed using port 0x%04x irq %d\n", io, irq);
return 0; return 0;
exit_unregister:
parport_unregister_driver(&lirc_parport_driver);
exit_device_del: exit_device_del:
platform_device_del(lirc_parallel_dev); platform_device_del(lirc_parallel_dev);
exit_device_put: exit_device_put:
...@@ -711,9 +742,9 @@ static int __init lirc_parallel_init(void) ...@@ -711,9 +742,9 @@ static int __init lirc_parallel_init(void)
static void __exit lirc_parallel_exit(void) static void __exit lirc_parallel_exit(void)
{ {
parport_unregister_device(ppdevice);
lirc_unregister_driver(driver.minor); lirc_unregister_driver(driver.minor);
parport_unregister_driver(&lirc_parport_driver);
platform_device_unregister(lirc_parallel_dev); platform_device_unregister(lirc_parallel_dev);
platform_driver_unregister(&lirc_parallel_driver); platform_driver_unregister(&lirc_parallel_driver);
} }
......
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