Add back missing i2c_get_client() call. # # Patch managed by http://www.mn-logistik.de/unsupported/pxa250/patcher # --- linux-ra_alpha-update/drivers/i2c/i2c-core.c~i2c-get-client +++ linux-ra_alpha-update/drivers/i2c/i2c-core.c @@ -412,6 +412,57 @@ return res; } +struct i2c_client *i2c_get_client(int driver_id, int adapter_id, + struct i2c_client *prev) +{ + struct list_head *adap_list; + struct list_head *item, *_n; + struct i2c_adapter *adap; + struct i2c_client *client; + int found; + + down(&core_lists); + + adap_list = &adapters; + if ( prev ) { + /* we start searching at the previous clients adapter */ + adap_list = &prev->adapter->list; + } + + found = 0; + client = NULL; + list_for_each_entry(adap, adap_list, list) { + dev_dbg(&adap->dev, "examining adapter id=%08x\n", adap->id); + + if ( adapter_id && adap->id != adapter_id ) + continue; /* not the adapter id we want */ + + list_for_each_safe(item, _n, &adap->clients) { + client = list_entry(item, struct i2c_client, list); + dev_dbg(&client->dev, "examining client\n"); + dev_dbg(&client->dev, "driver id=%08x\n", client->driver->id); + + if ( prev && prev == client ) { + prev = NULL; + continue; + } + + if (client->driver->id != driver_id) + continue; /* not the driver id we want */ + + if ( client->flags & I2C_CLIENT_ALLOW_USE ) { + dev_dbg(&client->dev, "found client\n"); + found = 1; + goto out_unlock; + } + } + } + +out_unlock: + up(&core_lists); + return found?client:NULL; +} + static int i2c_inc_use_client(struct i2c_client *client) { @@ -1261,6 +1312,7 @@ EXPORT_SYMBOL(i2c_del_driver); EXPORT_SYMBOL(i2c_attach_client); EXPORT_SYMBOL(i2c_detach_client); +EXPORT_SYMBOL(i2c_get_client); EXPORT_SYMBOL(i2c_use_client); EXPORT_SYMBOL(i2c_release_client); EXPORT_SYMBOL(i2c_clients_command);