mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user