|
@@ -614,7 +614,10 @@ parport_register_device(struct parport *port, const char *name,
|
|
|
* pardevice fields. -arca
|
|
|
*/
|
|
|
port->ops->init_state(tmp, tmp->state);
|
|
|
- parport_device_proc_register(tmp);
|
|
|
+ if (!test_and_set_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags)) {
|
|
|
+ port->proc_device = tmp;
|
|
|
+ parport_device_proc_register(tmp);
|
|
|
+ }
|
|
|
return tmp;
|
|
|
|
|
|
out_free_all:
|
|
@@ -646,10 +649,14 @@ void parport_unregister_device(struct pardevice *dev)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
- parport_device_proc_unregister(dev);
|
|
|
-
|
|
|
port = dev->port->physport;
|
|
|
|
|
|
+ if (port->proc_device == dev) {
|
|
|
+ port->proc_device = NULL;
|
|
|
+ clear_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags);
|
|
|
+ parport_device_proc_unregister(dev);
|
|
|
+ }
|
|
|
+
|
|
|
if (port->cad == dev) {
|
|
|
printk(KERN_DEBUG "%s: %s forgot to release port\n",
|
|
|
port->name, dev->name);
|