media: stm32: dcmi: Register V4L2 subdev nodes

Message ID 20220618222335.478205-1-marex@denx.de (mailing list archive)
State Rejected
Delegated to: Hans Verkuil
Headers
Series media: stm32: dcmi: Register V4L2 subdev nodes |

Commit Message

Marek Vasut June 18, 2022, 10:23 p.m. UTC
  Unless the V4L2 device calls v4l2_device_register_subdev_nodes(),
the /dev/v4l-subdev* sub-device nodes are not registered and thus
not created. Add the missing call.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Alain Volmat <alain.volmat@foss.st.com>
Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
Cc: Amelie DELAUNAY <amelie.delaunay@foss.st.com>
Cc: Hugues FRUCHET <hugues.fruchet@foss.st.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Cc: Philippe CORNU <philippe.cornu@foss.st.com>
Cc: linux-stm32@st-md-mailman.stormreply.com
Cc: linux-arm-kernel@lists.infradead.org
---
 drivers/media/platform/st/stm32/stm32-dcmi.c | 6 ++++++
 1 file changed, 6 insertions(+)
  

Comments

Laurent Pinchart June 18, 2022, 11:20 p.m. UTC | #1
Hi Marek,

Thank you for the patch.

On Sun, Jun 19, 2022 at 12:23:35AM +0200, Marek Vasut wrote:
> Unless the V4L2 device calls v4l2_device_register_subdev_nodes(),
> the /dev/v4l-subdev* sub-device nodes are not registered and thus
> not created. Add the missing call.

This driver configures the subdevs internally. Exposing the subdev nodes
to userspace would conflict with driver operation.

If you need the subdev nodes only to query subdev information, you can
use v4l2_device_register_ro_subdev_nodes(). Ideally I'd prefer this
driver to expose subdev nodes to userspace and stop propagating formats
internally, but that may break applications :-(

> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Alain Volmat <alain.volmat@foss.st.com>
> Cc: Alexandre Torgue <alexandre.torgue@foss.st.com>
> Cc: Amelie DELAUNAY <amelie.delaunay@foss.st.com>
> Cc: Hugues FRUCHET <hugues.fruchet@foss.st.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> Cc: Philippe CORNU <philippe.cornu@foss.st.com>
> Cc: linux-stm32@st-md-mailman.stormreply.com
> Cc: linux-arm-kernel@lists.infradead.org
> ---
>  drivers/media/platform/st/stm32/stm32-dcmi.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/media/platform/st/stm32/stm32-dcmi.c b/drivers/media/platform/st/stm32/stm32-dcmi.c
> index 5f08ba47ea96b..56f4e04bc7c49 100644
> --- a/drivers/media/platform/st/stm32/stm32-dcmi.c
> +++ b/drivers/media/platform/st/stm32/stm32-dcmi.c
> @@ -1805,6 +1805,12 @@ static int dcmi_graph_notify_complete(struct v4l2_async_notifier *notifier)
>  
>  	dcmi->vdev->ctrl_handler = dcmi->source->ctrl_handler;
>  
> +	ret = v4l2_device_register_subdev_nodes(&dcmi->v4l2_dev);
> +	if (ret) {
> +		dev_err(dcmi->dev, "Count not register subdev nodes\n");
> +		return ret;
> +	}
> +
>  	ret = dcmi_formats_init(dcmi);
>  	if (ret) {
>  		dev_err(dcmi->dev, "No supported mediabus format found\n");
  
Marek Vasut June 19, 2022, 12:28 a.m. UTC | #2
On 6/19/22 01:20, Laurent Pinchart wrote:
> Hi Marek,
> 
> Thank you for the patch.
> 
> On Sun, Jun 19, 2022 at 12:23:35AM +0200, Marek Vasut wrote:
>> Unless the V4L2 device calls v4l2_device_register_subdev_nodes(),
>> the /dev/v4l-subdev* sub-device nodes are not registered and thus
>> not created. Add the missing call.
> 
> This driver configures the subdevs internally. Exposing the subdev nodes
> to userspace would conflict with driver operation.
> 
> If you need the subdev nodes only to query subdev information, you can
> use v4l2_device_register_ro_subdev_nodes(). Ideally I'd prefer this
> driver to expose subdev nodes to userspace and stop propagating formats
> internally, but that may break applications :-(

I need those subdevs to configure e.g. test pattern on the sensor side.
  
Laurent Pinchart June 19, 2022, 12:33 a.m. UTC | #3
On Sun, Jun 19, 2022 at 02:28:55AM +0200, Marek Vasut wrote:
> On 6/19/22 01:20, Laurent Pinchart wrote:
> > Hi Marek,
> > 
> > Thank you for the patch.
> > 
> > On Sun, Jun 19, 2022 at 12:23:35AM +0200, Marek Vasut wrote:
> >> Unless the V4L2 device calls v4l2_device_register_subdev_nodes(),
> >> the /dev/v4l-subdev* sub-device nodes are not registered and thus
> >> not created. Add the missing call.
> > 
> > This driver configures the subdevs internally. Exposing the subdev nodes
> > to userspace would conflict with driver operation.
> > 
> > If you need the subdev nodes only to query subdev information, you can
> > use v4l2_device_register_ro_subdev_nodes(). Ideally I'd prefer this
> > driver to expose subdev nodes to userspace and stop propagating formats
> > internally, but that may break applications :-(
> 
> I need those subdevs to configure e.g. test pattern on the sensor side.

Doesn't the dcmi driver expose the sensor controls on the video node ?
  
Marek Vasut June 19, 2022, 12:43 a.m. UTC | #4
On 6/19/22 02:33, Laurent Pinchart wrote:
> On Sun, Jun 19, 2022 at 02:28:55AM +0200, Marek Vasut wrote:
>> On 6/19/22 01:20, Laurent Pinchart wrote:
>>> Hi Marek,
>>>
>>> Thank you for the patch.
>>>
>>> On Sun, Jun 19, 2022 at 12:23:35AM +0200, Marek Vasut wrote:
>>>> Unless the V4L2 device calls v4l2_device_register_subdev_nodes(),
>>>> the /dev/v4l-subdev* sub-device nodes are not registered and thus
>>>> not created. Add the missing call.
>>>
>>> This driver configures the subdevs internally. Exposing the subdev nodes
>>> to userspace would conflict with driver operation.
>>>
>>> If you need the subdev nodes only to query subdev information, you can
>>> use v4l2_device_register_ro_subdev_nodes(). Ideally I'd prefer this
>>> driver to expose subdev nodes to userspace and stop propagating formats
>>> internally, but that may break applications :-(
>>
>> I need those subdevs to configure e.g. test pattern on the sensor side.
> 
> Doesn't the dcmi driver expose the sensor controls on the video node ?

Apparently it does, so, discard this patch.
  
Hugues FRUCHET June 27, 2022, 8:52 a.m. UTC | #5
Hi Marek,

As said by Laurent -thanks for answer Laurent- driver configures the 
subdevs internally and not expose subdev interface. This is done to keep 
legacy applications based on V4L2 interface up & running.

As said also, all the sensor controls are exposed on dcmi video node so 
you don't need subdev interface to get access on sensor controls.

Best regards,
Hugues.

On 6/19/22 02:43, Marek Vasut wrote:
> On 6/19/22 02:33, Laurent Pinchart wrote:
>> On Sun, Jun 19, 2022 at 02:28:55AM +0200, Marek Vasut wrote:
>>> On 6/19/22 01:20, Laurent Pinchart wrote:
>>>> Hi Marek,
>>>>
>>>> Thank you for the patch.
>>>>
>>>> On Sun, Jun 19, 2022 at 12:23:35AM +0200, Marek Vasut wrote:
>>>>> Unless the V4L2 device calls v4l2_device_register_subdev_nodes(),
>>>>> the /dev/v4l-subdev* sub-device nodes are not registered and thus
>>>>> not created. Add the missing call.
>>>>
>>>> This driver configures the subdevs internally. Exposing the subdev 
>>>> nodes
>>>> to userspace would conflict with driver operation.
>>>>
>>>> If you need the subdev nodes only to query subdev information, you can
>>>> use v4l2_device_register_ro_subdev_nodes(). Ideally I'd prefer this
>>>> driver to expose subdev nodes to userspace and stop propagating formats
>>>> internally, but that may break applications :-(
>>>
>>> I need those subdevs to configure e.g. test pattern on the sensor side.
>>
>> Doesn't the dcmi driver expose the sensor controls on the video node ?
> 
> Apparently it does, so, discard this patch.
  

Patch

diff --git a/drivers/media/platform/st/stm32/stm32-dcmi.c b/drivers/media/platform/st/stm32/stm32-dcmi.c
index 5f08ba47ea96b..56f4e04bc7c49 100644
--- a/drivers/media/platform/st/stm32/stm32-dcmi.c
+++ b/drivers/media/platform/st/stm32/stm32-dcmi.c
@@ -1805,6 +1805,12 @@  static int dcmi_graph_notify_complete(struct v4l2_async_notifier *notifier)
 
 	dcmi->vdev->ctrl_handler = dcmi->source->ctrl_handler;
 
+	ret = v4l2_device_register_subdev_nodes(&dcmi->v4l2_dev);
+	if (ret) {
+		dev_err(dcmi->dev, "Count not register subdev nodes\n");
+		return ret;
+	}
+
 	ret = dcmi_formats_init(dcmi);
 	if (ret) {
 		dev_err(dcmi->dev, "No supported mediabus format found\n");