Skip to content

Commit 33ca8ab

Browse files
sudipm-mukherjeedtor
authored andcommitted
Input: parkbd - use parallel port device model
Modify parkbd driver to use the new Parallel Port device model. Signed-off-by: Sudip Mukherjee <[email protected]> Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent 7b41528 commit 33ca8ab

File tree

1 file changed

+37
-18
lines changed

1 file changed

+37
-18
lines changed

drivers/input/serio/parkbd.c

Lines changed: 37 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,15 @@ static void parkbd_interrupt(void *dev_id)
141141
parkbd_last = jiffies;
142142
}
143143

144-
static int parkbd_getport(void)
144+
static int parkbd_getport(struct parport *pp)
145145
{
146-
struct parport *pp;
146+
struct pardev_cb parkbd_parport_cb;
147147

148-
pp = parport_find_number(parkbd_pp_no);
148+
parkbd_parport_cb.irq_func = parkbd_interrupt;
149+
parkbd_parport_cb.flags = PARPORT_FLAG_EXCL;
149150

150-
if (pp == NULL) {
151-
printk(KERN_ERR "parkbd: no such parport\n");
152-
return -ENODEV;
153-
}
154-
155-
parkbd_dev = parport_register_device(pp, "parkbd", NULL, NULL, parkbd_interrupt, PARPORT_DEV_EXCL, NULL);
156-
parport_put_port(pp);
151+
parkbd_dev = parport_register_dev_model(pp, "parkbd",
152+
&parkbd_parport_cb, 0);
157153

158154
if (!parkbd_dev)
159155
return -ENODEV;
@@ -183,19 +179,21 @@ static struct serio * __init parkbd_allocate_serio(void)
183179
return serio;
184180
}
185181

186-
static int __init parkbd_init(void)
182+
static void parkbd_attach(struct parport *pp)
187183
{
188-
int err;
184+
if (pp->number != parkbd_pp_no) {
185+
pr_debug("Not using parport%d.\n", pp->number);
186+
return;
187+
}
189188

190-
err = parkbd_getport();
191-
if (err)
192-
return err;
189+
if (parkbd_getport(pp))
190+
return;
193191

194192
parkbd_port = parkbd_allocate_serio();
195193
if (!parkbd_port) {
196194
parport_release(parkbd_dev);
197195
parport_unregister_device(parkbd_dev);
198-
return -ENOMEM;
196+
return;
199197
}
200198

201199
parkbd_writelines(3);
@@ -205,14 +203,35 @@ static int __init parkbd_init(void)
205203
printk(KERN_INFO "serio: PARKBD %s adapter on %s\n",
206204
parkbd_mode ? "AT" : "XT", parkbd_dev->port->name);
207205

208-
return 0;
206+
return;
209207
}
210208

211-
static void __exit parkbd_exit(void)
209+
static void parkbd_detach(struct parport *port)
212210
{
211+
if (!parkbd_port || port->number != parkbd_pp_no)
212+
return;
213+
213214
parport_release(parkbd_dev);
214215
serio_unregister_port(parkbd_port);
215216
parport_unregister_device(parkbd_dev);
217+
parkbd_port = NULL;
218+
}
219+
220+
static struct parport_driver parkbd_parport_driver = {
221+
.name = "parkbd",
222+
.match_port = parkbd_attach,
223+
.detach = parkbd_detach,
224+
.devmodel = true,
225+
};
226+
227+
static int __init parkbd_init(void)
228+
{
229+
return parport_register_driver(&parkbd_parport_driver);
230+
}
231+
232+
static void __exit parkbd_exit(void)
233+
{
234+
parport_unregister_driver(&parkbd_parport_driver);
216235
}
217236

218237
module_init(parkbd_init);

0 commit comments

Comments
 (0)