]> Pileus Git - ~andy/linux/commitdiff
V4L/DVB (11748): pvrusb2: Don't use the internal i2c client list
authorJean Delvare <khali@linux-fr.org>
Sat, 2 May 2009 03:22:27 +0000 (00:22 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 16 Jun 2009 21:21:00 +0000 (18:21 -0300)
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>
drivers/media/video/pvrusb2/pvrusb2-hdw.c

index 686df1afbbaf4b26b4bbbab57c732992ee8f34d0..0c745b142fb73999c77067aa83ff7eccd29d8bbf 100644 (file)
@@ -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;
                }
-       }
-       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;
-                       }
+               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;
        }
-       mutex_unlock(&hdw->i2c_adap.clist_lock);
        return tcnt;
 }