Beispiel #1
0
/* If this is the alerting device, notify its driver */
static int smbus_do_alert(struct device *dev, void *addrp)
{
	struct i2c_client *client = i2c_verify_client(dev);
	struct alert_data *data = addrp;
	struct i2c_driver *driver;

	if (!client || client->addr != data->addr)
		return 0;
	if (client->flags & I2C_CLIENT_TEN)
		return 0;

	/*
	 * Drivers should either disable alerts, or provide at least
	 * a minimal handler.  Lock so the driver won't change.
	 */
	device_lock(dev);
	if (client->dev.driver) {
		driver = to_i2c_driver(client->dev.driver);
		if (driver->alert)
			driver->alert(client, data->flag);
		else
			dev_warn(&client->dev, "no driver alert()!\n");
	} else
		dev_dbg(&client->dev, "alert with no driver\n");
	device_unlock(dev);

	/* Stop iterating after we find the device */
	return -EBUSY;
}
static int pluto_chk_conflict(struct device *dev, void *addrp)
{
	struct i2c_client	*client = i2c_verify_client(dev);
	unsigned short		addr = *(unsigned short *)addrp;

	if (!client)
		return 0;

	pr_info("%s: %s %x - %x\n", __func__, client->name, client->addr, addr);
	if (client->addr == addr)
		i2c_unregister_device(client);
	return 0;
}
Beispiel #3
0
static int dpc_check_clients(struct device *dev, void *data)
{
	struct dpc* dpc = data;
	struct i2c_client *client = i2c_verify_client(dev);

	if( !client )
		return 0;

	if( I2C_SAA7111A == client->addr )
		dpc->saa7111a = client;

	return 0;
}
Beispiel #4
0
/* must call put_device() when done with returned i2c_client device */
struct i2c_client *of_find_i2c_device_by_node(struct device_node *node)
{
	struct device *dev;
	struct i2c_client *client;

	dev = bus_find_device(&i2c_bus_type, NULL, node, of_dev_node_match);
	if (!dev)
		return NULL;

	client = i2c_verify_client(dev);
	if (!client)
		put_device(dev);

	return client;
}
Beispiel #5
0
static int apds9801_resume(struct device *device)
{
#ifdef LGE_APDS9801
	struct i2c_client *client = i2c_verify_client(device);
	struct apds9801_data *data = i2c_get_clientdata(client);
	struct proximity_platform_data *pdata = client->dev.platform_data;	

	if (data->enable)
	{
		if (device_may_wakeup(&client->dev))
			disable_irq_wake(data->irq);	
	} else {
		pdata->power(1);
		apds9801_set_shutdown(client, 0);	
	}

	return 0;
#else
	return apds9801_set_shutdown(client, 1);
#endif
}
Beispiel #6
0
static int mxb_check_clients(struct device *dev, void *data)
{
    struct mxb *mxb = data;
    struct i2c_client *client = i2c_verify_client(dev);

    if (!client)
        return 0;

    if (I2C_ADDR_TEA6420_1 == client->addr)
        mxb->tea6420_1 = client;
    if (I2C_ADDR_TEA6420_2 == client->addr)
        mxb->tea6420_2 = client;
    if (I2C_TEA6415C_2 == client->addr)
        mxb->tea6415c = client;
    if (I2C_ADDR_TDA9840 == client->addr)
        mxb->tda9840 = client;
    if (I2C_SAA7111 == client->addr)
        mxb->saa7111a = client;
    if (0x60 == client->addr)
        mxb->tuner = client;

    return 0;
}
static int smbus_do_alert(struct device *dev, void *addrp)
{
	struct i2c_client *client = i2c_verify_client(dev);
	struct alert_data *data = addrp;

	if (!client || client->addr != data->addr)
		return 0;
	if (client->flags & I2C_CLIENT_TEN)
		return 0;

	device_lock(dev);
	if (client->driver) {
		if (client->driver->alert)
			client->driver->alert(client, data->flag);
		else
			dev_warn(&client->dev, "no driver alert()!\n");
	} else
		dev_dbg(&client->dev, "alert with no driver\n");
	device_unlock(dev);

	
	return -EBUSY;
}
static int match_name(struct device *dev, void *data)
{
	const char *name = data;
	struct i2c_client *client = i2c_verify_client(dev);
	return client ? !strncmp(client->name, name, strlen(name)) : 0;
}