/* 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; }
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; }
/* 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; }
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 }
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; }