media fixes for v6.6-rc6

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE+QmuaPwR3wnBdVwACF8+vY7k4RUFAmUpJFAACgkQCF8+vY7k
 4RUvMQ//WB2m8lI3JBxlqDE+Bj2BfMCPQSVQEInbaZ05imrlbPg0O3lkBL+qMTRc
 5sfEXgh8IEumuv0S+R7QfRHdO+Cr7yaRU4uz+FHn12/61xI/+GakviRvQF5Y2TjZ
 hwpPiLCJRfoVrZBapfc5RmeE/Dq49E6vo0y+IicU16rAQJGfvSGqOVf4Sg7lV4lG
 uZl87Lacn/3xK79TZDQBJ+5+um0cKemQe0aq6H0mJjyDI3MHsll7ydqIphidQCjt
 886E1sdHsdivnOfEHkJz05r9IM3ccoIUxLuZouGfR16TePAlCksEMpRe8mAE+Uml
 30KXpfI3PdjLKM9Y5S9YbAYlSYvtOGgKWjIoKHLuIdrGL3EOjvI6v3MOz2dZh90m
 m3R5ppAduxugi7mVnwjBCkNlLodMNWxuzyvd8s+aUEgBewugtlLTU8FFwQwIZkxR
 bP5xjp0sYWtCl3FZc2/ekp9OsYof/+I2UdeTYdi+i9aEgDVC5KnZsHT3m/M8kr8Q
 odQWkivPFfQ3sN9Dz/Q35wZlssR121NNTAbFs55Hx99i4c9eS5gstlqM3TQrMF1Y
 SVnpHLY+mOBKbsiH7ZWgZIsqIq662oLOw6aoiWzHLGcPEY8FwEzur7ggGOgSPPWp
 0Q+ccous5/Vrtr8/SSuZ4iIZZvAqftmUCjevq0b6RHGIm5rW8CA=
 =8d/O
 -----END PGP SIGNATURE-----

Merge tag 'media/v6.6-5' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media

Pull media fixes from Mauro Carvalho Chehab:

 - a core fix: Don't report V4L2_SUBDEV_CAP_STREAMS when API is disabled

 - ipu-bridge: Add a missing acpi_dev_put()

 - ov8858: fix driver for probe to work after 6.6-rc1

 - xilinx-vipp: fix async notifier logic

* tag 'media/v6.6-5' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media:
  media: i2c: ov8858: Don't set fwnode in the driver
  media: ipu-bridge: Add missing acpi_dev_put() in ipu_bridge_get_ivsc_acpi_dev()
  media: xilinx-vipp: Look for entities also in waiting_list
  media: subdev: Don't report V4L2_SUBDEV_CAP_STREAMS when the streams API is disabled
This commit is contained in:
Linus Torvalds 2023-10-13 08:47:29 -07:00
commit 7c367d8ead
4 changed files with 23 additions and 13 deletions

View File

@ -1850,9 +1850,9 @@ static int ov8858_parse_of(struct ov8858 *ov8858)
}
ret = v4l2_fwnode_endpoint_parse(endpoint, &vep);
fwnode_handle_put(endpoint);
if (ret) {
dev_err(dev, "Failed to parse endpoint: %d\n", ret);
fwnode_handle_put(endpoint);
return ret;
}
@ -1864,12 +1864,9 @@ static int ov8858_parse_of(struct ov8858 *ov8858)
default:
dev_err(dev, "Unsupported number of data lanes %u\n",
ov8858->num_lanes);
fwnode_handle_put(endpoint);
return -EINVAL;
}
ov8858->subdev.fwnode = endpoint;
return 0;
}
@ -1913,7 +1910,7 @@ static int ov8858_probe(struct i2c_client *client)
ret = ov8858_init_ctrls(ov8858);
if (ret)
goto err_put_fwnode;
return ret;
sd = &ov8858->subdev;
sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS;
@ -1964,8 +1961,6 @@ static int ov8858_probe(struct i2c_client *client)
media_entity_cleanup(&sd->entity);
err_free_handler:
v4l2_ctrl_handler_free(&ov8858->ctrl_handler);
err_put_fwnode:
fwnode_handle_put(ov8858->subdev.fwnode);
return ret;
}
@ -1978,7 +1973,6 @@ static void ov8858_remove(struct i2c_client *client)
v4l2_async_unregister_subdev(sd);
media_entity_cleanup(&sd->entity);
v4l2_ctrl_handler_free(&ov8858->ctrl_handler);
fwnode_handle_put(ov8858->subdev.fwnode);
pm_runtime_disable(&client->dev);
if (!pm_runtime_status_suspended(&client->dev))

View File

@ -107,8 +107,10 @@ static struct acpi_device *ipu_bridge_get_ivsc_acpi_dev(struct acpi_device *adev
for_each_acpi_dev_match(ivsc_adev, acpi_id->id, NULL, -1)
/* camera sensor depends on IVSC in DSDT if exist */
for_each_acpi_consumer_dev(ivsc_adev, consumer)
if (consumer->handle == handle)
if (consumer->handle == handle) {
acpi_dev_put(consumer);
return ivsc_adev;
}
}
return NULL;

View File

@ -55,11 +55,18 @@ xvip_graph_find_entity(struct xvip_composite_device *xdev,
{
struct xvip_graph_entity *entity;
struct v4l2_async_connection *asd;
struct list_head *lists[] = {
&xdev->notifier.done_list,
&xdev->notifier.waiting_list
};
unsigned int i;
list_for_each_entry(asd, &xdev->notifier.done_list, asc_entry) {
entity = to_xvip_entity(asd);
if (entity->asd.match.fwnode == fwnode)
return entity;
for (i = 0; i < ARRAY_SIZE(lists); i++) {
list_for_each_entry(asd, lists[i], asc_entry) {
entity = to_xvip_entity(asd);
if (entity->asd.match.fwnode == fwnode)
return entity;
}
}
return NULL;

View File

@ -502,6 +502,13 @@ static long subdev_do_ioctl(struct file *file, unsigned int cmd, void *arg,
V4L2_SUBDEV_CLIENT_CAP_STREAMS;
int rval;
/*
* If the streams API is not enabled, remove V4L2_SUBDEV_CAP_STREAMS.
* Remove this when the API is no longer experimental.
*/
if (!v4l2_subdev_enable_streams_api)
streams_subdev = false;
switch (cmd) {
case VIDIOC_SUBDEV_QUERYCAP: {
struct v4l2_subdev_capability *cap = arg;