Re: [PATCH v4 04/15] media: i2c: ds90ub960: Fix logging SP & EQ status only for UB9702

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Huomenta,

On Fri, Dec 06, 2024 at 10:26:40AM +0200, Tomi Valkeinen wrote:
> UB9702 does not have SP and EQ registers, but the driver uses them in
> log_status(). Fix this by separating the SP and EQ related log_status()
> work into a separate function (for clarity) and calling that function
> only for UB960.
> 
> Cc: stable@xxxxxxxxxxxxxxx
> Fixes: afe267f2d368 ("media: i2c: add DS90UB960 driver")
> Reviewed-by: Jai Luthra <jai.luthra@xxxxxxxxxxxxxxxx>
> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
> ---
>  drivers/media/i2c/ds90ub960.c | 90 ++++++++++++++++++++++++-------------------
>  1 file changed, 50 insertions(+), 40 deletions(-)
> 
> diff --git a/drivers/media/i2c/ds90ub960.c b/drivers/media/i2c/ds90ub960.c
> index 24198b803eff..94c8acf171b4 100644
> --- a/drivers/media/i2c/ds90ub960.c
> +++ b/drivers/media/i2c/ds90ub960.c
> @@ -2950,6 +2950,54 @@ static const struct v4l2_subdev_pad_ops ub960_pad_ops = {
>  	.set_fmt = ub960_set_fmt,
>  };
>  
> +static void ub960_log_status_ub960_sp_eq(struct ub960_data *priv,
> +					 unsigned int nport)
> +{
> +	struct device *dev = &priv->client->dev;
> +	u8 eq_level;
> +	s8 strobe_pos;
> +	u8 v = 0;
> +
> +	/* Strobe */
> +
> +	ub960_read(priv, UB960_XR_AEQ_CTL1, &v);

How about adding __must_check to the ub960_read()?

> +
> +	dev_info(dev, "\t%s strobe\n",
> +		 (v & UB960_XR_AEQ_CTL1_AEQ_SFILTER_EN) ? "Adaptive" :
> +							  "Manual");
> +
> +	if (v & UB960_XR_AEQ_CTL1_AEQ_SFILTER_EN) {
> +		ub960_read(priv, UB960_XR_SFILTER_CFG, &v);
> +
> +		dev_info(dev, "\tStrobe range [%d, %d]\n",
> +			 ((v >> UB960_XR_SFILTER_CFG_SFILTER_MIN_SHIFT) & 0xf) - 7,
> +			 ((v >> UB960_XR_SFILTER_CFG_SFILTER_MAX_SHIFT) & 0xf) - 7);
> +	}
> +
> +	ub960_rxport_get_strobe_pos(priv, nport, &strobe_pos);
> +
> +	dev_info(dev, "\tStrobe pos %d\n", strobe_pos);
> +
> +	/* EQ */
> +
> +	ub960_rxport_read(priv, nport, UB960_RR_AEQ_BYPASS, &v);
> +
> +	dev_info(dev, "\t%s EQ\n",
> +		 (v & UB960_RR_AEQ_BYPASS_ENABLE) ? "Manual" :
> +						    "Adaptive");
> +
> +	if (!(v & UB960_RR_AEQ_BYPASS_ENABLE)) {
> +		ub960_rxport_read(priv, nport, UB960_RR_AEQ_MIN_MAX, &v);
> +
> +		dev_info(dev, "\tEQ range [%u, %u]\n",
> +			 (v >> UB960_RR_AEQ_MIN_MAX_AEQ_FLOOR_SHIFT) & 0xf,
> +			 (v >> UB960_RR_AEQ_MIN_MAX_AEQ_MAX_SHIFT) & 0xf);
> +	}
> +
> +	if (ub960_rxport_get_eq_level(priv, nport, &eq_level) == 0)
> +		dev_info(dev, "\tEQ level %u\n", eq_level);
> +}
> +
>  static int ub960_log_status(struct v4l2_subdev *sd)
>  {
>  	struct ub960_data *priv = sd_to_ub960(sd);
> @@ -2997,8 +3045,6 @@ static int ub960_log_status(struct v4l2_subdev *sd)
>  
>  	for (nport = 0; nport < priv->hw_data->num_rxports; nport++) {
>  		struct ub960_rxport *rxport = priv->rxports[nport];
> -		u8 eq_level;
> -		s8 strobe_pos;
>  		unsigned int i;
>  
>  		dev_info(dev, "RX %u\n", nport);
> @@ -3034,44 +3080,8 @@ static int ub960_log_status(struct v4l2_subdev *sd)
>  		ub960_rxport_read(priv, nport, UB960_RR_CSI_ERR_COUNTER, &v);
>  		dev_info(dev, "\tcsi_err_counter %u\n", v);
>  
> -		/* Strobe */
> -
> -		ub960_read(priv, UB960_XR_AEQ_CTL1, &v);
> -
> -		dev_info(dev, "\t%s strobe\n",
> -			 (v & UB960_XR_AEQ_CTL1_AEQ_SFILTER_EN) ? "Adaptive" :
> -								  "Manual");
> -
> -		if (v & UB960_XR_AEQ_CTL1_AEQ_SFILTER_EN) {
> -			ub960_read(priv, UB960_XR_SFILTER_CFG, &v);
> -
> -			dev_info(dev, "\tStrobe range [%d, %d]\n",
> -				 ((v >> UB960_XR_SFILTER_CFG_SFILTER_MIN_SHIFT) & 0xf) - 7,
> -				 ((v >> UB960_XR_SFILTER_CFG_SFILTER_MAX_SHIFT) & 0xf) - 7);
> -		}
> -
> -		ub960_rxport_get_strobe_pos(priv, nport, &strobe_pos);
> -
> -		dev_info(dev, "\tStrobe pos %d\n", strobe_pos);
> -
> -		/* EQ */
> -
> -		ub960_rxport_read(priv, nport, UB960_RR_AEQ_BYPASS, &v);
> -
> -		dev_info(dev, "\t%s EQ\n",
> -			 (v & UB960_RR_AEQ_BYPASS_ENABLE) ? "Manual" :
> -							    "Adaptive");
> -
> -		if (!(v & UB960_RR_AEQ_BYPASS_ENABLE)) {
> -			ub960_rxport_read(priv, nport, UB960_RR_AEQ_MIN_MAX, &v);
> -
> -			dev_info(dev, "\tEQ range [%u, %u]\n",
> -				 (v >> UB960_RR_AEQ_MIN_MAX_AEQ_FLOOR_SHIFT) & 0xf,
> -				 (v >> UB960_RR_AEQ_MIN_MAX_AEQ_MAX_SHIFT) & 0xf);
> -		}
> -
> -		if (ub960_rxport_get_eq_level(priv, nport, &eq_level) == 0)
> -			dev_info(dev, "\tEQ level %u\n", eq_level);
> +		if (!priv->hw_data->is_ub9702)
> +			ub960_log_status_ub960_sp_eq(priv, nport);
>  
>  		/* GPIOs */
>  		for (i = 0; i < UB960_NUM_BC_GPIOS; i++) {
> 

-- 
Terveisin,

Sakari Ailus




[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux