mbox series

[v3,0/5] media: Add ST VGXY61 camera sensor driver

Message ID 20220512074037.3829926-1-benjamin.mugnier@foss.st.com (mailing list archive)
Headers show
Series media: Add ST VGXY61 camera sensor driver | expand

Message

Benjamin Mugnier May 12, 2022, 7:40 a.m. UTC
Hey,

This series adds a driver for the ST VGXY61 camera sensor. This camera sensor is using the i2c bus
for control and the csi-2 bus for data.
These commits introduce the MEDIA_BUS_FMT_Y16_1X16 as a media bus format (1/5), reserve 16 user
controls for the driver (2/5), add a uapi header file to declare a control for the hdr mode (3/5),
dt bindings (3/5), and finally the driver (5/5).
Tested on DragonBoard 410c and on Raspberry Pi 4.

Unfortunately, I was not able to do the freely configurable frame size as advised by Laurent, and
I'm stuck. I tried to mimic the ov5693 driver as it seems to work mostly the same but was not
successful.
I managed to implement the get_selection to set the sensor crop, and set the set_format call to the
same frame size. By doing that my captured frame has black lines appearing if I don't use the sensor
native resolution, and seem to have issues with matching the sensor internal frame size and the one
I want to display (as lines appear wider than they should be).
If anyone has an example driver for this please tell me. Any help is appreciated.
I hope this fixed frame sizes will be ok, and I could come back to it later once I figure it out.

Thanks,

Benjamin

v2->v3:
- Fix errors in dt bindings
- Use alphabetical order where applicable
- Remove US_PER_MS macro
- Rename device specific macros
- Fix some control grabs not releasing
- Move user controls to public header and add documentation
- Rename set_framerate to set_framelength
- Rework i2c access
- Remove branchings that should never happen
- Rework pattern generator setting
- Update information on sensor rules of thumb
- Remove temperature control
- Remove suspend and resume
- Move mutex init to probe
- Move detect to probe
- Fix async_subdev_register order
- Support autosuspend
- Add init_cfg
- Fix controls not updating when sensor was off
- Various cleaning
- Rebase on master

v1->v2:
- Move temperature control to v4l2-controls.h as a standard control
- Reserve controls in v4l2-controls.h for HDR control
- Remove GPIO strobbing controls
- Remove references to unused controls in sensor struct
- Use v4l2_find_nearest_size
- Use V4L2_COLORSPACE_RAW instead of V4L2_COLORSPACE_SRGB
- Fill ycbcr_enc, quantization, and xfer_func in v4l2_mbus_framefmt
- Change gain from formula to a register RAW write
- Change temperature control value directly
- Remove clock-name and clock-lanes from device tree bindings
- Declare crop zones in mode_info structure
- Remove frame_interval functions and add hblank and vblank instead
- Update controls dependencies on change
- Fix first exposure rule of thumb being too restrictive
- Disable hflip and vflip controls while streaming
- Change RGB media bus code to Y as the sensor is monochrome
- Add Y16 format to v4l2 media bus formats
- Add get_selection API
- Fix timeout errors while disabling streaming on high framerates
- Support pm_runtime
- Rebase on master

Benjamin Mugnier (5):
  media: v4l: Add 1X16 16-bit greyscale media bus code definition
  media: v4l: ctrls: Add user control base for st-vgxy61 controls
  media: uapi: Add ST VGXY61 header file
  media: dt-bindings: media: i2c: Add ST VGXY61 camera sensor binding
  media: i2c: Add driver for ST VGXY61 camera sensor

 .../bindings/media/i2c/st,st-vgxy61.yaml      |  117 +
 .../userspace-api/media/drivers/st-vgxy61.rst |   23 +
 .../media/v4l/subdev-formats.rst              |   37 +
 MAINTAINERS                                   |    9 +
 drivers/media/i2c/Kconfig                     |   10 +
 drivers/media/i2c/Makefile                    |    1 +
 drivers/media/i2c/st-vgxy61.c                 | 1940 +++++++++++++++++
 include/uapi/linux/media-bus-format.h         |    3 +-
 include/uapi/linux/st-vgxy61.h                |   15 +
 include/uapi/linux/v4l2-controls.h            |    5 +
 10 files changed, 2159 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/media/i2c/st,st-vgxy61.yaml
 create mode 100644 Documentation/userspace-api/media/drivers/st-vgxy61.rst
 create mode 100644 drivers/media/i2c/st-vgxy61.c
 create mode 100644 include/uapi/linux/st-vgxy61.h

Comments

Benjamin Mugnier June 1, 2022, 7:20 a.m. UTC | #1
Hey,

Gentle ping, so that you don't forget about me ;)

Benjamin

On 12/05/2022 09:40, Benjamin Mugnier wrote:
> Hey,
> 
> This series adds a driver for the ST VGXY61 camera sensor. This camera sensor is using the i2c bus
> for control and the csi-2 bus for data.
> These commits introduce the MEDIA_BUS_FMT_Y16_1X16 as a media bus format (1/5), reserve 16 user
> controls for the driver (2/5), add a uapi header file to declare a control for the hdr mode (3/5),
> dt bindings (3/5), and finally the driver (5/5).
> Tested on DragonBoard 410c and on Raspberry Pi 4.
> 
> Unfortunately, I was not able to do the freely configurable frame size as advised by Laurent, and
> I'm stuck. I tried to mimic the ov5693 driver as it seems to work mostly the same but was not
> successful.
> I managed to implement the get_selection to set the sensor crop, and set the set_format call to the
> same frame size. By doing that my captured frame has black lines appearing if I don't use the sensor
> native resolution, and seem to have issues with matching the sensor internal frame size and the one
> I want to display (as lines appear wider than they should be).
> If anyone has an example driver for this please tell me. Any help is appreciated.
> I hope this fixed frame sizes will be ok, and I could come back to it later once I figure it out.
> 
> Thanks,
> 
> Benjamin
> 
> v2->v3:
> - Fix errors in dt bindings
> - Use alphabetical order where applicable
> - Remove US_PER_MS macro
> - Rename device specific macros
> - Fix some control grabs not releasing
> - Move user controls to public header and add documentation
> - Rename set_framerate to set_framelength
> - Rework i2c access
> - Remove branchings that should never happen
> - Rework pattern generator setting
> - Update information on sensor rules of thumb
> - Remove temperature control
> - Remove suspend and resume
> - Move mutex init to probe
> - Move detect to probe
> - Fix async_subdev_register order
> - Support autosuspend
> - Add init_cfg
> - Fix controls not updating when sensor was off
> - Various cleaning
> - Rebase on master
> 
> v1->v2:
> - Move temperature control to v4l2-controls.h as a standard control
> - Reserve controls in v4l2-controls.h for HDR control
> - Remove GPIO strobbing controls
> - Remove references to unused controls in sensor struct
> - Use v4l2_find_nearest_size
> - Use V4L2_COLORSPACE_RAW instead of V4L2_COLORSPACE_SRGB
> - Fill ycbcr_enc, quantization, and xfer_func in v4l2_mbus_framefmt
> - Change gain from formula to a register RAW write
> - Change temperature control value directly
> - Remove clock-name and clock-lanes from device tree bindings
> - Declare crop zones in mode_info structure
> - Remove frame_interval functions and add hblank and vblank instead
> - Update controls dependencies on change
> - Fix first exposure rule of thumb being too restrictive
> - Disable hflip and vflip controls while streaming
> - Change RGB media bus code to Y as the sensor is monochrome
> - Add Y16 format to v4l2 media bus formats
> - Add get_selection API
> - Fix timeout errors while disabling streaming on high framerates
> - Support pm_runtime
> - Rebase on master
> 
> Benjamin Mugnier (5):
>   media: v4l: Add 1X16 16-bit greyscale media bus code definition
>   media: v4l: ctrls: Add user control base for st-vgxy61 controls
>   media: uapi: Add ST VGXY61 header file
>   media: dt-bindings: media: i2c: Add ST VGXY61 camera sensor binding
>   media: i2c: Add driver for ST VGXY61 camera sensor
> 
>  .../bindings/media/i2c/st,st-vgxy61.yaml      |  117 +
>  .../userspace-api/media/drivers/st-vgxy61.rst |   23 +
>  .../media/v4l/subdev-formats.rst              |   37 +
>  MAINTAINERS                                   |    9 +
>  drivers/media/i2c/Kconfig                     |   10 +
>  drivers/media/i2c/Makefile                    |    1 +
>  drivers/media/i2c/st-vgxy61.c                 | 1940 +++++++++++++++++
>  include/uapi/linux/media-bus-format.h         |    3 +-
>  include/uapi/linux/st-vgxy61.h                |   15 +
>  include/uapi/linux/v4l2-controls.h            |    5 +
>  10 files changed, 2159 insertions(+), 1 deletion(-)
>  create mode 100644 Documentation/devicetree/bindings/media/i2c/st,st-vgxy61.yaml
>  create mode 100644 Documentation/userspace-api/media/drivers/st-vgxy61.rst
>  create mode 100644 drivers/media/i2c/st-vgxy61.c
>  create mode 100644 include/uapi/linux/st-vgxy61.h
>
Benjamin Mugnier June 20, 2022, 7:30 a.m. UTC | #2
Hi everyone,

Can somebody have a look at this series?
Thank you.

Benjamin

On 01/06/2022 09:20, Benjamin Mugnier wrote:
> Hey,
> 
> Gentle ping, so that you don't forget about me ;)
> 
> Benjamin
> 
> On 12/05/2022 09:40, Benjamin Mugnier wrote:
>> Hey,
>>
>> This series adds a driver for the ST VGXY61 camera sensor. This camera sensor is using the i2c bus
>> for control and the csi-2 bus for data.
>> These commits introduce the MEDIA_BUS_FMT_Y16_1X16 as a media bus format (1/5), reserve 16 user
>> controls for the driver (2/5), add a uapi header file to declare a control for the hdr mode (3/5),
>> dt bindings (3/5), and finally the driver (5/5).
>> Tested on DragonBoard 410c and on Raspberry Pi 4.
>>
>> Unfortunately, I was not able to do the freely configurable frame size as advised by Laurent, and
>> I'm stuck. I tried to mimic the ov5693 driver as it seems to work mostly the same but was not
>> successful.
>> I managed to implement the get_selection to set the sensor crop, and set the set_format call to the
>> same frame size. By doing that my captured frame has black lines appearing if I don't use the sensor
>> native resolution, and seem to have issues with matching the sensor internal frame size and the one
>> I want to display (as lines appear wider than they should be).
>> If anyone has an example driver for this please tell me. Any help is appreciated.
>> I hope this fixed frame sizes will be ok, and I could come back to it later once I figure it out.
>>
>> Thanks,
>>
>> Benjamin
>>
>> v2->v3:
>> - Fix errors in dt bindings
>> - Use alphabetical order where applicable
>> - Remove US_PER_MS macro
>> - Rename device specific macros
>> - Fix some control grabs not releasing
>> - Move user controls to public header and add documentation
>> - Rename set_framerate to set_framelength
>> - Rework i2c access
>> - Remove branchings that should never happen
>> - Rework pattern generator setting
>> - Update information on sensor rules of thumb
>> - Remove temperature control
>> - Remove suspend and resume
>> - Move mutex init to probe
>> - Move detect to probe
>> - Fix async_subdev_register order
>> - Support autosuspend
>> - Add init_cfg
>> - Fix controls not updating when sensor was off
>> - Various cleaning
>> - Rebase on master
>>
>> v1->v2:
>> - Move temperature control to v4l2-controls.h as a standard control
>> - Reserve controls in v4l2-controls.h for HDR control
>> - Remove GPIO strobbing controls
>> - Remove references to unused controls in sensor struct
>> - Use v4l2_find_nearest_size
>> - Use V4L2_COLORSPACE_RAW instead of V4L2_COLORSPACE_SRGB
>> - Fill ycbcr_enc, quantization, and xfer_func in v4l2_mbus_framefmt
>> - Change gain from formula to a register RAW write
>> - Change temperature control value directly
>> - Remove clock-name and clock-lanes from device tree bindings
>> - Declare crop zones in mode_info structure
>> - Remove frame_interval functions and add hblank and vblank instead
>> - Update controls dependencies on change
>> - Fix first exposure rule of thumb being too restrictive
>> - Disable hflip and vflip controls while streaming
>> - Change RGB media bus code to Y as the sensor is monochrome
>> - Add Y16 format to v4l2 media bus formats
>> - Add get_selection API
>> - Fix timeout errors while disabling streaming on high framerates
>> - Support pm_runtime
>> - Rebase on master
>>
>> Benjamin Mugnier (5):
>>   media: v4l: Add 1X16 16-bit greyscale media bus code definition
>>   media: v4l: ctrls: Add user control base for st-vgxy61 controls
>>   media: uapi: Add ST VGXY61 header file
>>   media: dt-bindings: media: i2c: Add ST VGXY61 camera sensor binding
>>   media: i2c: Add driver for ST VGXY61 camera sensor
>>
>>  .../bindings/media/i2c/st,st-vgxy61.yaml      |  117 +
>>  .../userspace-api/media/drivers/st-vgxy61.rst |   23 +
>>  .../media/v4l/subdev-formats.rst              |   37 +
>>  MAINTAINERS                                   |    9 +
>>  drivers/media/i2c/Kconfig                     |   10 +
>>  drivers/media/i2c/Makefile                    |    1 +
>>  drivers/media/i2c/st-vgxy61.c                 | 1940 +++++++++++++++++
>>  include/uapi/linux/media-bus-format.h         |    3 +-
>>  include/uapi/linux/st-vgxy61.h                |   15 +
>>  include/uapi/linux/v4l2-controls.h            |    5 +
>>  10 files changed, 2159 insertions(+), 1 deletion(-)
>>  create mode 100644 Documentation/devicetree/bindings/media/i2c/st,st-vgxy61.yaml
>>  create mode 100644 Documentation/userspace-api/media/drivers/st-vgxy61.rst
>>  create mode 100644 drivers/media/i2c/st-vgxy61.c
>>  create mode 100644 include/uapi/linux/st-vgxy61.h
>>
Benjamin Mugnier July 18, 2022, 7:26 a.m. UTC | #3
Gentle ping :)

On 20/06/2022 09:30, Benjamin Mugnier wrote:
> Hi everyone,
> 
> Can somebody have a look at this series?
> Thank you.
> 
> Benjamin
> 
> On 01/06/2022 09:20, Benjamin Mugnier wrote:
>> Hey,
>>
>> Gentle ping, so that you don't forget about me ;)
>>
>> Benjamin
>>
>> On 12/05/2022 09:40, Benjamin Mugnier wrote:
>>> Hey,
>>>
>>> This series adds a driver for the ST VGXY61 camera sensor. This camera sensor is using the i2c bus
>>> for control and the csi-2 bus for data.
>>> These commits introduce the MEDIA_BUS_FMT_Y16_1X16 as a media bus format (1/5), reserve 16 user
>>> controls for the driver (2/5), add a uapi header file to declare a control for the hdr mode (3/5),
>>> dt bindings (3/5), and finally the driver (5/5).
>>> Tested on DragonBoard 410c and on Raspberry Pi 4.
>>>
>>> Unfortunately, I was not able to do the freely configurable frame size as advised by Laurent, and
>>> I'm stuck. I tried to mimic the ov5693 driver as it seems to work mostly the same but was not
>>> successful.
>>> I managed to implement the get_selection to set the sensor crop, and set the set_format call to the
>>> same frame size. By doing that my captured frame has black lines appearing if I don't use the sensor
>>> native resolution, and seem to have issues with matching the sensor internal frame size and the one
>>> I want to display (as lines appear wider than they should be).
>>> If anyone has an example driver for this please tell me. Any help is appreciated.
>>> I hope this fixed frame sizes will be ok, and I could come back to it later once I figure it out.
>>>
>>> Thanks,
>>>
>>> Benjamin
>>>
>>> v2->v3:
>>> - Fix errors in dt bindings
>>> - Use alphabetical order where applicable
>>> - Remove US_PER_MS macro
>>> - Rename device specific macros
>>> - Fix some control grabs not releasing
>>> - Move user controls to public header and add documentation
>>> - Rename set_framerate to set_framelength
>>> - Rework i2c access
>>> - Remove branchings that should never happen
>>> - Rework pattern generator setting
>>> - Update information on sensor rules of thumb
>>> - Remove temperature control
>>> - Remove suspend and resume
>>> - Move mutex init to probe
>>> - Move detect to probe
>>> - Fix async_subdev_register order
>>> - Support autosuspend
>>> - Add init_cfg
>>> - Fix controls not updating when sensor was off
>>> - Various cleaning
>>> - Rebase on master
>>>
>>> v1->v2:
>>> - Move temperature control to v4l2-controls.h as a standard control
>>> - Reserve controls in v4l2-controls.h for HDR control
>>> - Remove GPIO strobbing controls
>>> - Remove references to unused controls in sensor struct
>>> - Use v4l2_find_nearest_size
>>> - Use V4L2_COLORSPACE_RAW instead of V4L2_COLORSPACE_SRGB
>>> - Fill ycbcr_enc, quantization, and xfer_func in v4l2_mbus_framefmt
>>> - Change gain from formula to a register RAW write
>>> - Change temperature control value directly
>>> - Remove clock-name and clock-lanes from device tree bindings
>>> - Declare crop zones in mode_info structure
>>> - Remove frame_interval functions and add hblank and vblank instead
>>> - Update controls dependencies on change
>>> - Fix first exposure rule of thumb being too restrictive
>>> - Disable hflip and vflip controls while streaming
>>> - Change RGB media bus code to Y as the sensor is monochrome
>>> - Add Y16 format to v4l2 media bus formats
>>> - Add get_selection API
>>> - Fix timeout errors while disabling streaming on high framerates
>>> - Support pm_runtime
>>> - Rebase on master
>>>
>>> Benjamin Mugnier (5):
>>>   media: v4l: Add 1X16 16-bit greyscale media bus code definition
>>>   media: v4l: ctrls: Add user control base for st-vgxy61 controls
>>>   media: uapi: Add ST VGXY61 header file
>>>   media: dt-bindings: media: i2c: Add ST VGXY61 camera sensor binding
>>>   media: i2c: Add driver for ST VGXY61 camera sensor
>>>
>>>  .../bindings/media/i2c/st,st-vgxy61.yaml      |  117 +
>>>  .../userspace-api/media/drivers/st-vgxy61.rst |   23 +
>>>  .../media/v4l/subdev-formats.rst              |   37 +
>>>  MAINTAINERS                                   |    9 +
>>>  drivers/media/i2c/Kconfig                     |   10 +
>>>  drivers/media/i2c/Makefile                    |    1 +
>>>  drivers/media/i2c/st-vgxy61.c                 | 1940 +++++++++++++++++
>>>  include/uapi/linux/media-bus-format.h         |    3 +-
>>>  include/uapi/linux/st-vgxy61.h                |   15 +
>>>  include/uapi/linux/v4l2-controls.h            |    5 +
>>>  10 files changed, 2159 insertions(+), 1 deletion(-)
>>>  create mode 100644 Documentation/devicetree/bindings/media/i2c/st,st-vgxy61.yaml
>>>  create mode 100644 Documentation/userspace-api/media/drivers/st-vgxy61.rst
>>>  create mode 100644 drivers/media/i2c/st-vgxy61.c
>>>  create mode 100644 include/uapi/linux/st-vgxy61.h
>>>
Sakari Ailus July 18, 2022, 9:06 a.m. UTC | #4
Hi Benjamin,

On Mon, Jul 18, 2022 at 09:26:01AM +0200, Benjamin Mugnier wrote:
> Gentle ping :)

I'll try to review the set this week.
Benjamin Mugnier Aug. 22, 2022, 8:18 a.m. UTC | #5
On 7/18/22 11:06, Sakari Ailus wrote:
> Hi Benjamin,
> 
> On Mon, Jul 18, 2022 at 09:26:01AM +0200, Benjamin Mugnier wrote:
>> Gentle ping :)
> 
> I'll try to review the set this week.
> 

Hi Sakari,

This is another gentle ping ;)
Thank you.

Benjamin