Skip to content

Commit

Permalink
pps: client: use new parport device model
Browse files Browse the repository at this point in the history
Modify pps client driver to use the new parallel port device model.
In that process, added an index to mention the device number when we
have more than one parallel port.

Signed-off-by: Sudip Mukherjee <[email protected]>
Acked-by: Rodolfo Giometti <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
sudipm-mukherjee authored and gregkh committed Mar 14, 2018
1 parent 823f792 commit fb56d97
Showing 1 changed file with 18 additions and 3 deletions.
21 changes: 18 additions & 3 deletions drivers/pps/clients/pps_parport.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,15 @@ MODULE_PARM_DESC(clear_wait,
" zero turns clear edge capture off entirely");
module_param(clear_wait, uint, 0);

static DEFINE_IDA(pps_client_index);

/* internal per port structure */
struct pps_client_pp {
struct pardevice *pardev; /* parport device */
struct pps_device *pps; /* PPS device */
unsigned int cw; /* port clear timeout */
unsigned int cw_err; /* number of timeouts */
int index; /* device number */
};

static inline int signal_is_set(struct parport *port)
Expand Down Expand Up @@ -136,6 +138,8 @@ static void parport_irq(void *handle)

static void parport_attach(struct parport *port)
{
struct pardev_cb pps_client_cb;
int index;
struct pps_client_pp *device;
struct pps_source_info info = {
.name = KBUILD_MODNAME,
Expand All @@ -154,8 +158,15 @@ static void parport_attach(struct parport *port)
return;
}

device->pardev = parport_register_device(port, KBUILD_MODNAME,
NULL, NULL, parport_irq, PARPORT_FLAG_EXCL, device);
index = ida_simple_get(&pps_client_index, 0, 0, GFP_KERNEL);
memset(&pps_client_cb, 0, sizeof(pps_client_cb));
pps_client_cb.private = device;
pps_client_cb.irq_func = parport_irq;
pps_client_cb.flags = PARPORT_FLAG_EXCL;
device->pardev = parport_register_dev_model(port,
KBUILD_MODNAME,
&pps_client_cb,
index);
if (!device->pardev) {
pr_err("couldn't register with %s\n", port->name);
goto err_free;
Expand All @@ -176,6 +187,7 @@ static void parport_attach(struct parport *port)
device->cw = clear_wait;

port->ops->enable_irq(port);
device->index = index;

pr_info("attached to %s\n", port->name);

Expand All @@ -186,6 +198,7 @@ static void parport_attach(struct parport *port)
err_unregister_dev:
parport_unregister_device(device->pardev);
err_free:
ida_simple_remove(&pps_client_index, index);
kfree(device);
}

Expand All @@ -205,13 +218,15 @@ static void parport_detach(struct parport *port)
pps_unregister_source(device->pps);
parport_release(pardev);
parport_unregister_device(pardev);
ida_simple_remove(&pps_client_index, device->index);
kfree(device);
}

static struct parport_driver pps_parport_driver = {
.name = KBUILD_MODNAME,
.attach = parport_attach,
.match_port = parport_attach,
.detach = parport_detach,
.devmodel = true,
};

/* module staff */
Expand Down

0 comments on commit fb56d97

Please sign in to comment.