media: i2c: ds90ub960: Fix logging SP & EQ status only for UB9702
commit42d0ec194aupstream. 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:afe267f2d3("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> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
c3c9300062
commit
1eb8e73eb4
@@ -2956,6 +2956,54 @@ static const struct v4l2_subdev_pad_ops ub960_pad_ops = {
|
||||
.init_cfg = ub960_init_cfg,
|
||||
};
|
||||
|
||||
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);
|
||||
@@ -3003,8 +3051,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);
|
||||
@@ -3040,44 +3086,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++) {
|
||||
|
||||
Reference in New Issue
Block a user