mbox series

[00/13] media: mt9m114: Changes to make it work with atomisp devices

Message ID 20250504101336.18748-1-hdegoede@redhat.com
Headers show
Series media: mt9m114: Changes to make it work with atomisp devices | expand

Message

Hans de Goede May 4, 2025, 10:13 a.m. UTC
Hi All,

Here is a series of patches to make the "mainline" mt9m114 driver work
on devices with an atomisp CSI2 receiver / ISP. This has been tested on
an Asus T100TA.

This allows dropping the atomisp specific atomisp-mt9m114 driver from
drivers/staging.

Chances are there are conflicts here with Mathis':
"[PATCH v4 0/6] MT9M114 driver bugfix and improvements"
series.

I'll expect there be some review comments on this series anyways,
so merging Mathis' series first is fine, then I'll rebase this
series on top for v2.

Regards,

Hans


Hans de Goede (13):
  media: aptina-pll: Debug log p1 min and max values
  media: mt9m114: Add support for clock-frequency property
  media: mt9m114: Use aptina-PLL helper to get PLL values
  media: mt9m114: Lower minimum vblank value
  media: mt9m114: Fix default hblank and vblank values
  media: mt9m114: Tweak default hblank and vblank for more accurate fps
  media: mt9m114: Update hblank and vblank defaults on pixel-array
    format changes
  media: mt9m114: Avoid a reset low spike during probe()
  media: mt9m114: Put sensor in reset on power-down
  media: mt9m114: Fix scaler bypass mode
  media: mt9m114: Drop start-, stop-streaming sequence from initialize
  media: mt9m114: Return -EPROBE_DEFER if no endpoint is found
  media: mt9m114: Add ACPI enumeration support

 drivers/media/i2c/aptina-pll.c |   2 +
 drivers/media/i2c/mt9m114.c    | 167 ++++++++++++++++++++++++---------
 2 files changed, 125 insertions(+), 44 deletions(-)

Comments

Laurent Pinchart May 9, 2025, 6:47 p.m. UTC | #1
Hi Hans,

Thank you for the patch.

On Sun, May 04, 2025 at 12:13:22PM +0200, Hans de Goede wrote:
> Make aptina_pll_calculate() debug log the calculated p1 min and max values,
> this makes it easier to see how the m, n and p1 values were chosen.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/media/i2c/aptina-pll.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/media/i2c/aptina-pll.c b/drivers/media/i2c/aptina-pll.c
> index b1f89bbf9d47..cd2ed4583c97 100644
> --- a/drivers/media/i2c/aptina-pll.c
> +++ b/drivers/media/i2c/aptina-pll.c
> @@ -129,6 +129,8 @@ int aptina_pll_calculate(struct device *dev,
>  	p1_max = min(limits->p1_max, limits->out_clock_max * div /
>  		     (pll->ext_clock * pll->m));
>  
> +	dev_dbg(dev, "pll: p1 min %u max %u\n", p1_min, p1_max);
> +
>  	for (p1 = p1_max & ~1; p1 >= p1_min; p1 -= 2) {
>  		unsigned int mf_inc = p1 / gcd(div, p1);
>  		unsigned int mf_high;
Laurent Pinchart May 9, 2025, 10:38 p.m. UTC | #2
Hi Hans,

Thank you for the patch.

On Sun, May 04, 2025 at 12:13:28PM +0200, Hans de Goede wrote:
> Update hblank and vblank defaults when the pixel-array format changes,
> to maintain 30 fps on format changes.

I don't think this should be the kernel's responsibility to do so.
Sakari, any opinion ?

> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/media/i2c/mt9m114.c | 14 +++++++++++---
>  1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c
> index ba8b7660f88a..be3e7bb44ad8 100644
> --- a/drivers/media/i2c/mt9m114.c
> +++ b/drivers/media/i2c/mt9m114.c
> @@ -333,6 +333,10 @@
>  #define MT9M114_MIN_VBLANK				21
>  #define MT9M114_DEF_HBLANK				308
>  #define MT9M114_DEF_VBLANK				21
> +#define MT9M114_DEF_HTS					\
> +	(MT9M114_PIXEL_ARRAY_WIDTH + MT9M114_DEF_HBLANK)
> +#define MT9M114_DEF_VTS					\
> +	(MT9M114_PIXEL_ARRAY_HEIGHT + MT9M114_DEF_VBLANK)
>  
>  #define MT9M114_DEF_FRAME_RATE				30
>  #define MT9M114_MAX_FRAME_RATE				120
> @@ -1130,18 +1134,22 @@ static void mt9m114_pa_ctrl_update_exposure(struct mt9m114 *sensor, bool manual)
>  static void mt9m114_pa_ctrl_update_blanking(struct mt9m114 *sensor,
>  					    const struct v4l2_mbus_framefmt *format)
>  {
> -	unsigned int max_blank;
> +	unsigned int def_blank, max_blank;
>  
>  	/* Update the blanking controls ranges based on the output size. */
>  	max_blank = MT9M114_CAM_SENSOR_CFG_LINE_LENGTH_PCK_MAX
>  		  - format->width;
> +	def_blank = MT9M114_DEF_HTS - format->width;
>  	__v4l2_ctrl_modify_range(sensor->pa.hblank, MT9M114_MIN_HBLANK,
> -				 max_blank, 1, MT9M114_DEF_HBLANK);
> +				 max_blank, 1, def_blank);
> +	__v4l2_ctrl_s_ctrl(sensor->pa.hblank, def_blank);
>  
>  	max_blank = MT9M114_CAM_SENSOR_CFG_FRAME_LENGTH_LINES_MAX
>  		  - format->height;
> +	def_blank = MT9M114_DEF_VTS - format->height;
>  	__v4l2_ctrl_modify_range(sensor->pa.vblank, MT9M114_MIN_VBLANK,
> -				 max_blank, 1, MT9M114_DEF_VBLANK);
> +				 max_blank, 1, def_blank);
> +	__v4l2_ctrl_s_ctrl(sensor->pa.vblank, def_blank);
>  }
>  
>  /* -----------------------------------------------------------------------------
Laurent Pinchart May 9, 2025, 10:43 p.m. UTC | #3
Hi Hans,

On Sun, May 04, 2025 at 12:13:30PM +0200, Hans de Goede wrote:
> Put sensor back in reset on power-down.
> 
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
>  drivers/media/i2c/mt9m114.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/media/i2c/mt9m114.c b/drivers/media/i2c/mt9m114.c
> index 43efcbdf614e..fa7c2137c6ba 100644
> --- a/drivers/media/i2c/mt9m114.c
> +++ b/drivers/media/i2c/mt9m114.c
> @@ -2202,6 +2202,7 @@ static int mt9m114_power_on(struct mt9m114 *sensor)
>  
>  static void mt9m114_power_off(struct mt9m114 *sensor)
>  {
> +	gpiod_set_value(sensor->reset, 1);

The sensor requires a delay of at least 10 EXTCLK cycles here.

>  	clk_disable_unprepare(sensor->clk);
>  	regulator_bulk_disable(ARRAY_SIZE(sensor->supplies), sensor->supplies);
>  }