Beispiel #1
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);
}
static int __devinit i2c_parport_probe(struct platform_device *pdev)
{
	int err;

	/* Reset hardware to a sane state (SCL and SDA high) */
	parport_setsda(NULL, 1);
	parport_setscl(NULL, 1);
	/* Other init if needed (power on...) */
	if (adapter_parm[type].init.val)
		line_set(1, &adapter_parm[type].init);

	parport_adapter.dev.parent = &pdev->dev;
	err = i2c_bit_add_bus(&parport_adapter);
	if (err)
		dev_err(&pdev->dev, "Unable to register with I2C\n");
	return err;
}
Beispiel #3
0
static int __devinit i2c_parport_probe(struct platform_device *pdev)
{
	int err;

	
	parport_setsda(NULL, 1);
	parport_setscl(NULL, 1);
	
	if (adapter_parm[type].init.val)
		line_set(1, &adapter_parm[type].init);

	parport_adapter.dev.parent = &pdev->dev;
	err = i2c_bit_add_bus(&parport_adapter);
	if (err)
		dev_err(&pdev->dev, "Unable to register with I2C\n");
	return err;
}
static int __init i2c_parport_init(void)
{
    if (type < 0) {
        printk(KERN_WARNING "i2c-parport: adapter type unspecified\n");
        return -ENODEV;
    }

    if (type >= ARRAY_SIZE(adapter_parm)) {
        printk(KERN_WARNING "i2c-parport: invalid type (%d)\n", type);
        return -ENODEV;
    }

    if (base == 0) {
        printk(KERN_INFO "i2c-parport: using default base 0x%x\n", DEFAULT_BASE);
        base = DEFAULT_BASE;
    }

    if (!request_region(base, 3, "i2c-parport"))
        return -ENODEV;

    if (!adapter_parm[type].getscl.val)
        parport_algo_data.getscl = NULL;

    /* Reset hardware to a sane state (SCL and SDA high) */
    parport_setsda(NULL, 1);
    parport_setscl(NULL, 1);
    /* Other init if needed (power on...) */
    if (adapter_parm[type].init.val)
        line_set(1, &adapter_parm[type].init);

    if (i2c_bit_add_bus(&parport_adapter) < 0) {
        printk(KERN_ERR "i2c-parport: Unable to register with I2C\n");
        release_region(base, 3);
        return -ENODEV;
    }

    return 0;
}