diff options
author | Sudip Mukherjee <sudipm.mukherjee@gmail.com> | 2016-02-12 18:33:45 +0530 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2016-02-14 17:43:50 -0800 |
commit | e7223f18603374d235d8bb0398532323e5f318b9 (patch) | |
tree | 9a62c592b5c5a14d140da9aad484171b9f4c92f4 | |
parent | 3c8db584323875a50696718c89d94cef0ed54f30 (diff) | |
download | linux-e7223f18603374d235d8bb0398532323e5f318b9.tar.gz linux-e7223f18603374d235d8bb0398532323e5f318b9.tar.bz2 linux-e7223f18603374d235d8bb0398532323e5f318b9.zip |
ppdev: use new parport device model
Modify ppdev driver to use the new parallel port device model.
Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/char/ppdev.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c index bccc15a4b25d..6152c09e89d9 100644 --- a/drivers/char/ppdev.c +++ b/drivers/char/ppdev.c @@ -286,7 +286,7 @@ static int register_device(int minor, struct pp_struct *pp) struct parport *port; struct pardevice *pdev = NULL; char *name; - int fl; + struct pardev_cb ppdev_cb; name = kasprintf(GFP_KERNEL, CHRDEV "%x", minor); if (name == NULL) @@ -299,9 +299,11 @@ static int register_device(int minor, struct pp_struct *pp) return -ENXIO; } - fl = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0; - pdev = parport_register_device(port, name, NULL, - NULL, pp_irq, fl, pp); + memset(&ppdev_cb, 0, sizeof(ppdev_cb)); + ppdev_cb.irq_func = pp_irq; + ppdev_cb.flags = (pp->flags & PP_EXCL) ? PARPORT_FLAG_EXCL : 0; + ppdev_cb.private = pp; + pdev = parport_register_dev_model(port, name, &ppdev_cb, minor); parport_put_port(port); if (!pdev) { @@ -799,10 +801,23 @@ static void pp_detach(struct parport *port) device_destroy(ppdev_class, MKDEV(PP_MAJOR, port->number)); } +static int pp_probe(struct pardevice *par_dev) +{ + struct device_driver *drv = par_dev->dev.driver; + int len = strlen(drv->name); + + if (strncmp(par_dev->name, drv->name, len)) + return -ENODEV; + + return 0; +} + static struct parport_driver pp_driver = { .name = CHRDEV, - .attach = pp_attach, + .probe = pp_probe, + .match_port = pp_attach, .detach = pp_detach, + .devmodel = true, }; static int __init ppdev_init(void) |