static void parport_attach(struct parport *port) { printk(KERN_INFO "%s: Using %s for debugging\n", THIS_MODULE->name, port->name); if(debug_sync_parport) { printk(KERN_ERR "%s: Using %s, ignore new attachment %s\n", THIS_MODULE->name, debug_sync_parport->name, port->name); return; } parport_get_port(port); debug_sync_parport = port; }
struct pardevice *parport_open (int devnum, const char *name, int (*pf) (void *), void (*kf) (void *), void (*irqf) (int, void *, struct pt_regs *), int flags, void *handle) { struct daisydev *p = topology; struct parport *port; struct pardevice *dev; int daisy; spin_lock(&topology_lock); while (p && p->devnum != devnum) p = p->next; if (!p) { spin_unlock(&topology_lock); return NULL; } daisy = p->daisy; port = parport_get_port(p->port); spin_unlock(&topology_lock); dev = parport_register_device (port, name, pf, kf, irqf, flags, handle); parport_put_port(port); if (!dev) return NULL; dev->daisy = daisy; /* Check that there really is a device to select. */ if (daisy >= 0) { int selected; parport_claim_or_block (dev); selected = port->daisy; parport_release (dev); if (selected != daisy) { /* No corresponding device. */ parport_unregister_device (dev); return NULL; } } return dev; }
struct pardevice *parport_open(int devnum, const char *name) { struct daisydev *p = topology; struct parport *port; struct pardevice *dev; int daisy; spin_lock(&topology_lock); while (p && p->devnum != devnum) p = p->next; if (!p) { spin_unlock(&topology_lock); return NULL; } daisy = p->daisy; port = parport_get_port(p->port); spin_unlock(&topology_lock); dev = parport_register_device(port, name, NULL, NULL, NULL, 0, NULL); parport_put_port(port); if (!dev) return NULL; dev->daisy = daisy; if (daisy >= 0) { int selected; parport_claim_or_block(dev); selected = port->daisy; parport_release(dev); if (selected != daisy) { parport_unregister_device(dev); return NULL; } } return dev; }