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

Commit 3eef2510 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab
Browse files

[media] v4l2: drop V4L2_CHIP_MATCH_SUBDEV_NAME



After using the new VIDIOC_DBG_G_CHIP_NAME ioctl I realized that the matching
by name possibility is useless. Just drop it and rename MATCH_SUBDEV_IDX to
just MATCH_SUBDEV.
The v4l2-dbg utility is much better placed to match by name by just enumerating
all bridge and subdev devices until chip_name.name matches.

Signed-off-by: default avatarHans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent cd634f1b
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -221,13 +221,8 @@ the values from <xref linkend="chip-ids" />.</entry>
	    <entry>Match the nth anciliary AC97 chip.</entry>
	  </row>
	  <row>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV_NAME</constant></entry>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry>
	    <entry>4</entry>
	    <entry>Match the sub-device by name. Can't be used with this ioctl.</entry>
	  </row>
	  <row>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV_IDX</constant></entry>
	    <entry>5</entry>
	    <entry>Match the nth sub-device. Can't be used with this ioctl.</entry>
	  </row>
	</tbody>
+2 −16
Original line number Diff line number Diff line
@@ -87,16 +87,7 @@ connected to the PCI or USB bus. Non-zero numbers identify specific
parts of the bridge chip such as an AC97 register block.</para>

    <para>When <structfield>match.type</structfield> is
<constant>V4L2_CHIP_MATCH_SUBDEV_NAME</constant>,
<structfield>match.name</structfield> contains the name of a sub-device.
For instance
<constant>"saa7127 6-0044"</constant> will match the saa7127 sub-device
at the given i2c bus. This match type is not very useful for this ioctl
and is here only for consistency.
</para>

    <para>When <structfield>match.type</structfield> is
<constant>V4L2_CHIP_MATCH_SUBDEV_IDX</constant>,
<constant>V4L2_CHIP_MATCH_SUBDEV</constant>,
<structfield>match.addr</structfield> selects the nth sub-device. This
allows you to enumerate over all sub-devices.</para>

@@ -207,13 +198,8 @@ is set, then the driver supports reading registers from the device. If
	    <entry>Match the nth anciliary AC97 chip. Can't be used with this ioctl.</entry>
	  </row>
	  <row>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV_NAME</constant></entry>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry>
	    <entry>4</entry>
	    <entry>Match the sub-device by name.</entry>
	  </row>
	  <row>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV_IDX</constant></entry>
	    <entry>5</entry>
	    <entry>Match the nth sub-device.</entry>
	  </row>
	</tbody>
+2 −15
Original line number Diff line number Diff line
@@ -123,15 +123,7 @@ bus address.</para>
on the TV card.</para>

    <para>When <structfield>match.type</structfield> is
<constant>V4L2_CHIP_MATCH_SUBDEV_NAME</constant>,
<structfield>match.name</structfield> contains the sub-device name.
For instance
<constant>"saa7127 6-0044"</constant> will match this specific saa7127
sub-device. Again with the &VIDIOC-DBG-G-CHIP-NAME; ioctl you can find
out which sub-devices are present.</para>

    <para>When <structfield>match.type</structfield> is
<constant>V4L2_CHIP_MATCH_SUBDEV_IDX</constant>,
<constant>V4L2_CHIP_MATCH_SUBDEV</constant>,
<structfield>match.addr</structfield> selects the nth sub-device.</para>

    <note>
@@ -250,13 +242,8 @@ register.</entry>
	    <entry>Match the nth anciliary AC97 chip.</entry>
	  </row>
	  <row>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV_NAME</constant></entry>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV</constant></entry>
	    <entry>4</entry>
	    <entry>Match the sub-device by name.</entry>
	  </row>
	  <row>
	    <entry><constant>V4L2_CHIP_MATCH_SUBDEV_IDX</constant></entry>
	    <entry>5</entry>
	    <entry>Match the nth sub-device.</entry>
	  </row>
	</tbody>
+1 −2
Original line number Diff line number Diff line
@@ -254,8 +254,7 @@ int v4l2_chip_match_i2c_client(struct i2c_client *c, const struct v4l2_dbg_match
		return len && !strncmp(c->driver->driver.name, match->name, len);
	case V4L2_CHIP_MATCH_I2C_ADDR:
		return c->addr == match->addr;
	case V4L2_CHIP_MATCH_SUBDEV_IDX:
	case V4L2_CHIP_MATCH_SUBDEV_NAME:
	case V4L2_CHIP_MATCH_SUBDEV:
		return 1;
	default:
		return 0;
+19 −36
Original line number Diff line number Diff line
@@ -629,8 +629,7 @@ static void v4l_print_dbg_chip_ident(const void *arg, bool write_only)
	const struct v4l2_dbg_chip_ident *p = arg;

	pr_cont("type=%u, ", p->match.type);
	if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER ||
	    p->match.type == V4L2_CHIP_MATCH_SUBDEV_NAME)
	if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER)
		pr_cont("name=%.*s, ",
				(int)sizeof(p->match.name), p->match.name);
	else
@@ -644,8 +643,7 @@ static void v4l_print_dbg_chip_name(const void *arg, bool write_only)
	const struct v4l2_dbg_chip_name *p = arg;

	pr_cont("type=%u, ", p->match.type);
	if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER ||
	    p->match.type == V4L2_CHIP_MATCH_SUBDEV_NAME)
	if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER)
		pr_cont("name=%.*s, ",
				(int)sizeof(p->match.name), p->match.name);
	else
@@ -658,8 +656,7 @@ static void v4l_print_dbg_register(const void *arg, bool write_only)
	const struct v4l2_dbg_register *p = arg;

	pr_cont("type=%u, ", p->match.type);
	if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER ||
	    p->match.type == V4L2_CHIP_MATCH_SUBDEV_NAME)
	if (p->match.type == V4L2_CHIP_MATCH_I2C_DRIVER)
		pr_cont("name=%.*s, ",
				(int)sizeof(p->match.name), p->match.name);
	else
@@ -1791,14 +1788,6 @@ static int v4l_log_status(const struct v4l2_ioctl_ops *ops,
	return ret;
}

static bool v4l_dbg_found_match(const struct v4l2_dbg_match *match,
		struct v4l2_subdev *sd, int idx)
{
	if (match->type == V4L2_CHIP_MATCH_SUBDEV_IDX)
		return match->addr == idx;
	return !strcmp(match->name, sd->name);
}

static int v4l_dbg_g_register(const struct v4l2_ioctl_ops *ops,
				struct file *file, void *fh, void *arg)
{
@@ -1810,14 +1799,12 @@ static int v4l_dbg_g_register(const struct v4l2_ioctl_ops *ops,

	if (!capable(CAP_SYS_ADMIN))
		return -EPERM;
	if (p->match.type == V4L2_CHIP_MATCH_SUBDEV_IDX ||
	    p->match.type == V4L2_CHIP_MATCH_SUBDEV_NAME) {
	if (p->match.type == V4L2_CHIP_MATCH_SUBDEV) {
		if (vfd->v4l2_dev == NULL)
			return -EINVAL;
		v4l2_device_for_each_subdev(sd, vfd->v4l2_dev) {
			if (v4l_dbg_found_match(&p->match, sd, idx++))
		v4l2_device_for_each_subdev(sd, vfd->v4l2_dev)
			if (p->match.addr == idx++)
				return v4l2_subdev_call(sd, core, g_register, p);
		}
		return -EINVAL;
	}
	if (ops->vidioc_g_register)
@@ -1839,14 +1826,12 @@ static int v4l_dbg_s_register(const struct v4l2_ioctl_ops *ops,

	if (!capable(CAP_SYS_ADMIN))
		return -EPERM;
	if (p->match.type == V4L2_CHIP_MATCH_SUBDEV_IDX ||
	    p->match.type == V4L2_CHIP_MATCH_SUBDEV_NAME) {
	if (p->match.type == V4L2_CHIP_MATCH_SUBDEV) {
		if (vfd->v4l2_dev == NULL)
			return -EINVAL;
		v4l2_device_for_each_subdev(sd, vfd->v4l2_dev) {
			if (v4l_dbg_found_match(&p->match, sd, idx++))
		v4l2_device_for_each_subdev(sd, vfd->v4l2_dev)
			if (p->match.addr == idx++)
				return v4l2_subdev_call(sd, core, s_register, p);
		}
		return -EINVAL;
	}
	if (ops->vidioc_s_register)
@@ -1864,8 +1849,7 @@ static int v4l_dbg_g_chip_ident(const struct v4l2_ioctl_ops *ops,

	p->ident = V4L2_IDENT_NONE;
	p->revision = 0;
	if (p->match.type == V4L2_CHIP_MATCH_SUBDEV_NAME ||
	    p->match.type == V4L2_CHIP_MATCH_SUBDEV_IDX)
	if (p->match.type == V4L2_CHIP_MATCH_SUBDEV)
		return -EINVAL;
	return ops->vidioc_g_chip_ident(file, fh, p);
}
@@ -1897,12 +1881,12 @@ static int v4l_dbg_g_chip_name(const struct v4l2_ioctl_ops *ops,
			strlcpy(p->name, "bridge", sizeof(p->name));
		return 0;

	case V4L2_CHIP_MATCH_SUBDEV_IDX:
	case V4L2_CHIP_MATCH_SUBDEV_NAME:
	case V4L2_CHIP_MATCH_SUBDEV:
		if (vfd->v4l2_dev == NULL)
			break;
		v4l2_device_for_each_subdev(sd, vfd->v4l2_dev) {
			if (v4l_dbg_found_match(&p->match, sd, idx++)) {
			if (p->match.addr != idx++)
				continue;
			if (sd->ops->core && sd->ops->core->s_register)
				p->flags |= V4L2_CHIP_FL_WRITABLE;
			if (sd->ops->core && sd->ops->core->g_register)
@@ -1910,7 +1894,6 @@ static int v4l_dbg_g_chip_name(const struct v4l2_ioctl_ops *ops,
			strlcpy(p->name, sd->name, sizeof(p->name));
			return 0;
		}
		}
		break;
	}
	return -EINVAL;
Loading