Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

parport: daisy: use new parport device model

Modify parport daisy driver to use the new parallel port device model.

Signed-off-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

authored by

Sudip Mukherjee and committed by
Greg Kroah-Hartman
1aec4211 bde4a19f

+54 -3
+31 -1
drivers/parport/daisy.c
··· 213 213 struct pardevice *parport_open(int devnum, const char *name) 214 214 { 215 215 struct daisydev *p = topology; 216 + struct pardev_cb par_cb; 216 217 struct parport *port; 217 218 struct pardevice *dev; 218 219 int daisy; 219 220 221 + memset(&par_cb, 0, sizeof(par_cb)); 220 222 spin_lock(&topology_lock); 221 223 while (p && p->devnum != devnum) 222 224 p = p->next; ··· 232 230 port = parport_get_port(p->port); 233 231 spin_unlock(&topology_lock); 234 232 235 - dev = parport_register_device(port, name, NULL, NULL, NULL, 0, NULL); 233 + dev = parport_register_dev_model(port, name, &par_cb, devnum); 236 234 parport_put_port(port); 237 235 if (!dev) 238 236 return NULL; ··· 481 479 482 480 kfree(deviceid); 483 481 return detected; 482 + } 483 + 484 + static int daisy_drv_probe(struct pardevice *par_dev) 485 + { 486 + struct device_driver *drv = par_dev->dev.driver; 487 + 488 + if (strcmp(drv->name, "daisy_drv")) 489 + return -ENODEV; 490 + if (strcmp(par_dev->name, daisy_dev_name)) 491 + return -ENODEV; 492 + 493 + return 0; 494 + } 495 + 496 + static struct parport_driver daisy_driver = { 497 + .name = "daisy_drv", 498 + .probe = daisy_drv_probe, 499 + .devmodel = true, 500 + }; 501 + 502 + int daisy_drv_init(void) 503 + { 504 + return parport_register_driver(&daisy_driver); 505 + } 506 + 507 + void daisy_drv_exit(void) 508 + { 509 + parport_unregister_driver(&daisy_driver); 484 510 }
+1 -1
drivers/parport/probe.c
··· 257 257 ssize_t parport_device_id (int devnum, char *buffer, size_t count) 258 258 { 259 259 ssize_t retval = -ENXIO; 260 - struct pardevice *dev = parport_open (devnum, "Device ID probe"); 260 + struct pardevice *dev = parport_open(devnum, daisy_dev_name); 261 261 if (!dev) 262 262 return -ENXIO; 263 263
+9 -1
drivers/parport/share.c
··· 137 137 138 138 int parport_bus_init(void) 139 139 { 140 - return bus_register(&parport_bus_type); 140 + int retval; 141 + 142 + retval = bus_register(&parport_bus_type); 143 + if (retval) 144 + return retval; 145 + daisy_drv_init(); 146 + 147 + return 0; 141 148 } 142 149 143 150 void parport_bus_exit(void) 144 151 { 152 + daisy_drv_exit(); 145 153 bus_unregister(&parport_bus_type); 146 154 } 147 155
+13
include/linux/parport.h
··· 460 460 void *, size_t, int); 461 461 462 462 /* IEEE1284.3 functions */ 463 + #define daisy_dev_name "Device ID probe" 463 464 extern int parport_daisy_init (struct parport *port); 464 465 extern void parport_daisy_fini (struct parport *port); 465 466 extern struct pardevice *parport_open (int devnum, const char *name); ··· 468 467 extern ssize_t parport_device_id (int devnum, char *buffer, size_t len); 469 468 extern void parport_daisy_deselect_all (struct parport *port); 470 469 extern int parport_daisy_select (struct parport *port, int daisy, int mode); 470 + 471 + #ifdef CONFIG_PARPORT_1284 472 + extern int daisy_drv_init(void); 473 + extern void daisy_drv_exit(void); 474 + #else 475 + static inline int daisy_drv_init(void) 476 + { 477 + return 0; 478 + } 479 + 480 + static inline void daisy_drv_exit(void) {} 481 + #endif 471 482 472 483 /* Lowlevel drivers _can_ call this support function to handle irqs. */ 473 484 static inline void parport_generic_irq(struct parport *port)