// Claim parport for ourself static inline void w9966_pdev_claim(struct w9966_dev* cam) { if (w9966_getState(cam, W9966_STATE_CLAIMED, W9966_STATE_CLAIMED)) return; parport_claim_or_block(cam->pdev); w9966_setState(cam, W9966_STATE_CLAIMED, W9966_STATE_CLAIMED); }
// Claim parport for ourself // 1 on success, else 0 static inline int w9966_pdev_claim(struct w9966_dev* cam) { if (w9966_flag_test(cam, W9966_STATE_CLAIMED)) return 1; if (parport_claim_or_block(cam->pdev) < 0) return 0; w9966_flag_set(cam, W9966_STATE_CLAIMED); return 1; }
static void i2c_parport_attach (struct parport *port) { struct i2c_par *adapter; adapter = kmalloc(sizeof(struct i2c_par), GFP_KERNEL); if (adapter == NULL) { printk(KERN_ERR "i2c-parport: Failed to kmalloc\n"); return; } memset(adapter, 0x00, sizeof(struct i2c_par)); pr_debug("i2c-parport: attaching to %s\n", port->name); adapter->pdev = parport_register_device(port, "i2c-parport", NULL, NULL, NULL, PARPORT_FLAG_EXCL, NULL); if (!adapter->pdev) { printk(KERN_ERR "i2c-parport: Unable to register with parport\n"); goto ERROR0; } /* Fill the rest of the structure */ adapter->adapter = parport_adapter; adapter->algo_data = parport_algo_data; if (!adapter_parm[type].getscl.val) adapter->algo_data.getscl = NULL; adapter->algo_data.data = port; adapter->adapter.algo_data = &adapter->algo_data; if (parport_claim_or_block(adapter->pdev) < 0) { printk(KERN_ERR "i2c-parport: Could not claim parallel port\n"); goto ERROR1; } /* Reset hardware to a sane state (SCL and SDA high) */ parport_setsda(port, 1); parport_setscl(port, 1); /* Other init if needed (power on...) */ if (adapter_parm[type].init.val) line_set(port, 1, &adapter_parm[type].init); parport_release(adapter->pdev); if (i2c_bit_add_bus(&adapter->adapter) < 0) { printk(KERN_ERR "i2c-parport: Unable to register with I2C\n"); goto ERROR1; } /* Add the new adapter to the list */ adapter->next = adapter_list; adapter_list = adapter; return; ERROR1: parport_unregister_device(adapter->pdev); ERROR0: kfree(adapter); }
static int lirc_claim(void) { if (parport_claim(ppdevice) != 0) { pr_warn("could not claim port\n"); pr_warn("waiting for port becoming available\n"); if (parport_claim_or_block(ppdevice) < 0) { pr_notice("could not claim port, giving up\n"); return 0; } } out(LIRC_LP_CONTROL, LP_PSELECP|LP_PINITP); is_claimed = 1; return 1; }
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; }
static int lirc_claim(void) { if (parport_claim(ppdevice) != 0) { printk(KERN_WARNING "%s: could not claim port\n", LIRC_DRIVER_NAME); printk(KERN_WARNING "%s: waiting for port becoming available" "\n", LIRC_DRIVER_NAME); if (parport_claim_or_block(ppdevice) < 0) { printk(KERN_NOTICE "%s: could not claim port, giving" " up\n", LIRC_DRIVER_NAME); return 0; } } out(LIRC_LP_CONTROL, LP_PSELECP|LP_PINITP); is_claimed = 1; return 1; }
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; }
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 parport *port = parport_enumerate (); struct pardevice *dev; int portnum; int muxnum; int daisynum; if (parport_device_coords (devnum, &portnum, &muxnum, &daisynum)) return NULL; while (port && ((port->portnum != portnum) || (port->muxport != muxnum))) port = port->next; if (!port) /* No corresponding parport. */ return NULL; dev = parport_register_device (port, name, pf, kf, irqf, flags, handle); if (dev) dev->daisy = daisynum; /* Check that there really is a device to select. */ if (daisynum >= 0) { int selected; parport_claim_or_block (dev); selected = port->daisy; parport_release (dev); if (selected != port->daisy) { /* No corresponding device. */ parport_unregister_device (dev); return NULL; } } return dev; }
static void i2c_parport_attach (struct parport *port) { struct i2c_par *adapter = kmalloc(sizeof(struct i2c_par), GFP_KERNEL); if (!adapter) { printk(KERN_ERR "i2c-philips-par: Unable to malloc.\n"); return; } printk(KERN_DEBUG "i2c-philips-par.o: attaching to %s\n", port->name); adapter->pdev = parport_register_device(port, "i2c-philips-par", NULL, NULL, NULL, PARPORT_FLAG_EXCL, NULL); if (!adapter->pdev) { printk(KERN_ERR "i2c-philips-par: Unable to register with parport.\n"); return; } adapter->adapter = bit_lp_ops; adapter->adapter.algo_data = &adapter->bit_lp_data; adapter->bit_lp_data = type ? bit_lp_data2 : bit_lp_data; adapter->bit_lp_data.data = port; /* reset hardware to sane state */ parport_claim_or_block(adapter->pdev); adapter->bit_lp_data.setsda(port, 1); adapter->bit_lp_data.setscl(port, 1); parport_release(adapter->pdev); if (i2c_bit_add_bus(&adapter->adapter) < 0) { printk(KERN_ERR "i2c-philips-par: Unable to register with I2C.\n"); parport_unregister_device(adapter->pdev); kfree(adapter); return; /* No good */ } adapter->next = adapter_list; adapter_list = adapter; }