Commit 7c367d8e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents 10a6e5fe c46f16f1
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -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))
+3 −1
Original line number Diff line number Diff line
@@ -107,9 +107,11 @@ 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;
}
+12 −5
Original line number Diff line number Diff line
@@ -55,12 +55,19 @@ 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) {
	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;
}
+7 −0
Original line number Diff line number Diff line
@@ -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;