V4L/DVB (11748): pvrusb2: Don't use the internal i2c client list
The i2c core used to maintain a list of client for each adapter. This is a duplication of what the driver core already does, so this list will be removed as part of a future cleanup. Anyone using this list must stop doing so. For pvrusb2, I propose the following change, which should lead to an equally informative output. The only difference is that i2c clients which are not a v4l2 subdev won't show up, but I guess this case is not supposed to happen anyway. Signed-off-by: Jean Delvare <khali@linux-fr.org> Signed-off-by: Mike Isely <isely@pobox.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
48c5b0dfd7
commit
fa7ce76428
1 changed files with 14 additions and 44 deletions
|
@ -4841,65 +4841,35 @@ static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
|
|||
unsigned int tcnt = 0;
|
||||
unsigned int ccnt;
|
||||
struct i2c_client *client;
|
||||
struct list_head *item;
|
||||
void *cd;
|
||||
const char *p;
|
||||
unsigned int id;
|
||||
|
||||
ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers:");
|
||||
ccnt = scnprintf(buf, acnt, "Associated v4l2-subdev drivers and I2C clients:\n");
|
||||
tcnt += ccnt;
|
||||
v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
|
||||
id = sd->grp_id;
|
||||
p = NULL;
|
||||
if (id < ARRAY_SIZE(module_names)) p = module_names[id];
|
||||
if (p) {
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s", p);
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt, " %s:", p);
|
||||
tcnt += ccnt;
|
||||
} else {
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt,
|
||||
" (unknown id=%u)", id);
|
||||
" (unknown id=%u):", id);
|
||||
tcnt += ccnt;
|
||||
}
|
||||
client = v4l2_get_subdevdata(sd);
|
||||
if (client) {
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt,
|
||||
" %s @ %02x\n", client->name,
|
||||
client->addr);
|
||||
tcnt += ccnt;
|
||||
} else {
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt,
|
||||
" no i2c client\n");
|
||||
tcnt += ccnt;
|
||||
}
|
||||
}
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt, "\n");
|
||||
tcnt += ccnt;
|
||||
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt, "I2C clients:\n");
|
||||
tcnt += ccnt;
|
||||
|
||||
mutex_lock(&hdw->i2c_adap.clist_lock);
|
||||
list_for_each(item, &hdw->i2c_adap.clients) {
|
||||
client = list_entry(item, struct i2c_client, list);
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt,
|
||||
" %s: i2c=%02x", client->name, client->addr);
|
||||
tcnt += ccnt;
|
||||
cd = i2c_get_clientdata(client);
|
||||
v4l2_device_for_each_subdev(sd, &hdw->v4l2_dev) {
|
||||
if (cd == sd) {
|
||||
id = sd->grp_id;
|
||||
p = NULL;
|
||||
if (id < ARRAY_SIZE(module_names)) {
|
||||
p = module_names[id];
|
||||
}
|
||||
if (p) {
|
||||
ccnt = scnprintf(buf + tcnt,
|
||||
acnt - tcnt,
|
||||
" subdev=%s", p);
|
||||
tcnt += ccnt;
|
||||
} else {
|
||||
ccnt = scnprintf(buf + tcnt,
|
||||
acnt - tcnt,
|
||||
" subdev= id %u)",
|
||||
id);
|
||||
tcnt += ccnt;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
ccnt = scnprintf(buf + tcnt, acnt - tcnt, "\n");
|
||||
tcnt += ccnt;
|
||||
}
|
||||
mutex_unlock(&hdw->i2c_adap.clist_lock);
|
||||
return tcnt;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue