]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
media: i2c: ds90ub960: Fix logging SP & EQ status only for UB9702
authorTomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Fri, 6 Dec 2024 08:26:40 +0000 (10:26 +0200)
committerMauro Carvalho Chehab <mchehab+huawei@kernel.org>
Thu, 19 Dec 2024 11:50:15 +0000 (12:50 +0100)
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@vger.kernel.org
Fixes: afe267f2d368 ("media: i2c: add DS90UB960 driver")
Reviewed-by: Jai Luthra <jai.luthra@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
drivers/media/i2c/ds90ub960.c

index 4642852883a7a4bde2bcb744dffd660b76638306..e28baf7944f387f6ef4a685a1f20d97338293a8b 100644 (file)
@@ -2949,6 +2949,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);
+
+       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);
@@ -2996,8 +3044,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);
@@ -3033,44 +3079,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++) {