Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2eb563b7 authored by Mike Isely's avatar Mike Isely Committed by Mauro Carvalho Chehab
Browse files

V4L/DVB (11203): pvrusb2: Implement better reporting on attached sub-devices

parent fd28aeaf
Loading
Loading
Loading
Loading
+86 −29
Original line number Diff line number Diff line
@@ -4876,17 +4876,57 @@ static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
			stats.buffers_processed,
			stats.buffers_failed);
	}
	case 6: {
	default: break;
	}
	return 0;
}


/* Generate report containing info about attached sub-devices and attached
   i2c clients, including an indication of which attached i2c clients are
   actually sub-devices. */
static unsigned int pvr2_hdw_report_clients(struct pvr2_hdw *hdw,
					    char *buf, unsigned int acnt)
{
	struct v4l2_subdev *sd;
	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:");
	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);
			tcnt += ccnt;
		} else {
			ccnt = scnprintf(buf + tcnt, acnt - tcnt,
					 " (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)) {
@@ -4895,19 +4935,23 @@ static unsigned int pvr2_hdw_report_unlocked(struct pvr2_hdw *hdw,int which,
				if (p) {
					ccnt = scnprintf(buf + tcnt,
							 acnt - tcnt,
						 " %s", p);
							 " subdev=%s", p);
					tcnt += ccnt;
				} else {
					ccnt = scnprintf(buf + tcnt,
							 acnt - tcnt,
						 " (unknown id=%u)", id);
			}
							 " subdev= id %u)",
							 id);
					tcnt += ccnt;
				}
		return tcnt;
				break;
			}
	default: break;
		}
	return 0;
		ccnt = scnprintf(buf + tcnt, acnt - tcnt, "\n");
		tcnt += ccnt;
	}
	mutex_unlock(&hdw->i2c_adap.clist_lock);
	return tcnt;
}


@@ -4925,6 +4969,8 @@ unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,
		buf[0] = '\n'; ccnt = 1;
		bcnt += ccnt; acnt -= ccnt; buf += ccnt;
	}
	ccnt = pvr2_hdw_report_clients(hdw, buf, acnt);
	bcnt += ccnt; acnt -= ccnt; buf += ccnt;
	LOCK_GIVE(hdw->big_lock);
	return bcnt;
}
@@ -4932,14 +4978,25 @@ unsigned int pvr2_hdw_state_report(struct pvr2_hdw *hdw,

static void pvr2_hdw_state_log_state(struct pvr2_hdw *hdw)
{
	char buf[128];
	char buf[256];
	unsigned int idx, ccnt;
	unsigned int lcnt, ucnt;

	for (idx = 0; ; idx++) {
		ccnt = pvr2_hdw_report_unlocked(hdw,idx,buf,sizeof(buf));
		if (!ccnt) break;
		printk(KERN_INFO "%s %.*s\n",hdw->name,ccnt,buf);
	}
	ccnt = pvr2_hdw_report_clients(hdw, buf, sizeof(buf));
	ucnt = 0;
	while (ucnt < ccnt) {
		lcnt = 0;
		while ((lcnt + ucnt < ccnt) && (buf[lcnt + ucnt] != '\n')) {
			lcnt++;
		}
		printk(KERN_INFO "%s %.*s\n", hdw->name, lcnt, buf + ucnt);
		ucnt += lcnt + 1;
	}
}