phy: rockchip: csi2-dphy: fixes lvds bit-width error for rv1126b

Change-Id: I56007548f832c3c89c6e2be324c30ca5445945a2
Signed-off-by: Zefa Chen <zefa.chen@rock-chips.com>
This commit is contained in:
Zefa Chen
2025-08-27 15:55:24 +08:00
committed by Tao Huang
parent 4a1668a9ba
commit d5e575bdf7

View File

@@ -650,6 +650,40 @@ static unsigned char get_lvds_data_width(u32 pixelformat)
}
}
static unsigned char get_lvds_data_width_rv1126b(u32 pixelformat)
{
switch (pixelformat) {
/* csi raw8 */
case MEDIA_BUS_FMT_SBGGR8_1X8:
case MEDIA_BUS_FMT_SGBRG8_1X8:
case MEDIA_BUS_FMT_SGRBG8_1X8:
case MEDIA_BUS_FMT_SRGGB8_1X8:
return 0x1;
/* csi raw10 */
case MEDIA_BUS_FMT_SBGGR10_1X10:
case MEDIA_BUS_FMT_SGBRG10_1X10:
case MEDIA_BUS_FMT_SGRBG10_1X10:
case MEDIA_BUS_FMT_SRGGB10_1X10:
return 0x2;
/* csi raw12 */
case MEDIA_BUS_FMT_SBGGR12_1X12:
case MEDIA_BUS_FMT_SGBRG12_1X12:
case MEDIA_BUS_FMT_SGRBG12_1X12:
case MEDIA_BUS_FMT_SRGGB12_1X12:
return 0x3;
/* csi uyvy 422 */
case MEDIA_BUS_FMT_UYVY8_2X8:
case MEDIA_BUS_FMT_VYUY8_2X8:
case MEDIA_BUS_FMT_YUYV8_2X8:
case MEDIA_BUS_FMT_YVYU8_2X8:
case MEDIA_BUS_FMT_RGB888_1X24:
return 0x1;
default:
return 0x2;
}
}
static void csi2_dphy_hw_do_reset(struct csi2_dphy_hw *hw)
{
if (hw->rsts_bulk)
@@ -991,7 +1025,10 @@ static int csi2_dphy_hw_stream_on(struct csi2_dphy *dphy,
write_csi2_dphy_reg(hw, CSI2PHY_PATH0_MODEL, 0x2);
} else {
write_csi2_dphy_reg(hw, CSI2PHY_PATH0_MODEL, 0x4);
lvds_width = get_lvds_data_width(sensor->format.code);
if (hw->drv_data->chip_id == CHIP_ID_RV1126B)
lvds_width = get_lvds_data_width_rv1126b(sensor->format.code);
else
lvds_width = get_lvds_data_width(sensor->format.code);
write_csi2_dphy_reg(hw, CSI2PHY_PATH0_LVDS_MODEL, (lvds_width << 4) | 0X0f);
}
} else {
@@ -999,7 +1036,10 @@ static int csi2_dphy_hw_stream_on(struct csi2_dphy *dphy,
write_csi2_dphy_reg(hw, CSI2PHY_PATH1_MODEL, 0x2);
} else {
write_csi2_dphy_reg(hw, CSI2PHY_PATH1_MODEL, 0x4);
lvds_width = get_lvds_data_width(sensor->format.code);
if (hw->drv_data->chip_id == CHIP_ID_RV1126B)
lvds_width = get_lvds_data_width_rv1126b(sensor->format.code);
else
lvds_width = get_lvds_data_width(sensor->format.code);
write_csi2_dphy_reg(hw, CSI2PHY_PATH1_LVDS_MODEL, (lvds_width << 4) | 0X0f);
}
}