Esempio n. 1
0
// 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);
}
Esempio n. 2
0
// 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;
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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;
}