Skip to content

Commit

Permalink
ppdev: use new parport device model
Browse files Browse the repository at this point in the history
Modify ppdev driver to use the new parallel port device model.

Initially submitted and committed as:
e7223f1 ("ppdev: use new parport device model")

But due to some regression it was reverted by:
1701f68 ("Revert "ppdev: use new parport device model"")

Now that the original source of regression is fixed by:
bbca503 ("parport: use subsys_initcall") we can again modify ppdev
to use device model.

Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Sudip Mukherjee authored and Greg Kroah-Hartman committed Aug 31, 2016
1 parent 5ed22ce commit 8b7d3a9
Showing 1 changed file with 20 additions and 5 deletions.
25 changes: 20 additions & 5 deletions drivers/char/ppdev.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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) {
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 8b7d3a9

Please sign in to comment.