mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 11:26:02 +09:00
phy: rockchip: mipi-dcphy: support get phy param with multi dev
Signed-off-by: Zefa Chen <zefa.chen@rock-chips.com> Change-Id: I859d6e3f06bf38e77ba9ca7a2cd22ca78ca527c2
This commit is contained in:
@@ -77,7 +77,7 @@ struct csi2_dphy {
|
||||
bool is_streaming;
|
||||
enum csi2_dphy_lane_mode lane_mode;
|
||||
const struct dphy_drv_data *drv_data;
|
||||
struct rkmodule_csi_dphy_param *dphy_param;
|
||||
struct rkmodule_csi_dphy_param dphy_param;
|
||||
};
|
||||
|
||||
struct dphy_hw_drv_data {
|
||||
|
||||
@@ -176,7 +176,7 @@ static int csi2_dphy_update_sensor_mbus(struct v4l2_subdev *sd)
|
||||
if (dphy->drv_data->vendor == PHY_VENDOR_SAMSUNG) {
|
||||
ret = v4l2_subdev_call(sensor_sd, core, ioctl,
|
||||
RKMODULE_GET_CSI_DPHY_PARAM,
|
||||
dphy->dphy_param);
|
||||
&dphy->dphy_param);
|
||||
if (ret) {
|
||||
dev_err(dphy->dev, "%s fail to get dphy param, used default value\n",
|
||||
__func__);
|
||||
@@ -738,7 +738,7 @@ static int rockchip_csi2_dphy_probe(struct platform_device *pdev)
|
||||
csi2dphy->phy_index = 0;
|
||||
if (csi2dphy->drv_data->vendor == PHY_VENDOR_SAMSUNG) {
|
||||
ret = rockchip_csi2_dphy_attach_samsung_phy(csi2dphy);
|
||||
csi2dphy->dphy_param = &rk3588_dcphy_param;
|
||||
csi2dphy->dphy_param = rk3588_dcphy_param;
|
||||
} else {
|
||||
ret = rockchip_csi2_dphy_attach_hw(csi2dphy);
|
||||
}
|
||||
|
||||
@@ -1275,13 +1275,13 @@ static void samsung_mipi_dcphy_bias_block_enable(struct samsung_mipi_dcphy *sams
|
||||
u32 bias_con2 = 0x3223;
|
||||
|
||||
if (csi_dphy &&
|
||||
csi_dphy->dphy_param->lp_vol_ref != 3 &&
|
||||
csi_dphy->dphy_param->lp_vol_ref < 0x7) {
|
||||
csi_dphy->dphy_param.lp_vol_ref != 3 &&
|
||||
csi_dphy->dphy_param.lp_vol_ref < 0x7) {
|
||||
bias_con2 &= 0xfffffff8;
|
||||
bias_con2 |= csi_dphy->dphy_param->lp_vol_ref;
|
||||
bias_con2 |= csi_dphy->dphy_param.lp_vol_ref;
|
||||
dev_info(samsung->dev,
|
||||
"rx change lp_vol_ref to %d, it may cause tx exception\n",
|
||||
csi_dphy->dphy_param->lp_vol_ref);
|
||||
csi_dphy->dphy_param.lp_vol_ref);
|
||||
}
|
||||
regmap_write(samsung->regmap, BIAS_CON0, 0x0010);
|
||||
regmap_write(samsung->regmap, BIAS_CON1, 0x0110);
|
||||
@@ -1987,87 +1987,87 @@ static int samsung_dcphy_rx_config_common(struct csi2_dphy *dphy,
|
||||
dlysel = 1 << 8;
|
||||
else if (dphy->data_rate_mbps < 6500)
|
||||
dlysel = 0;
|
||||
if (dphy->dphy_param->clk_hs_term_sel > 0x7) {
|
||||
if (dphy->dphy_param.clk_hs_term_sel > 0x7) {
|
||||
dev_err(dphy->dev, "clk_hs_term_sel error param %d\n",
|
||||
dphy->dphy_param->clk_hs_term_sel);
|
||||
dphy->dphy_param.clk_hs_term_sel);
|
||||
return -EINVAL;
|
||||
}
|
||||
for (i = 0; i < sensor->lanes; i++) {
|
||||
if (dphy->dphy_param->data_hs_term_sel[i] > 0x7) {
|
||||
if (dphy->dphy_param.data_hs_term_sel[i] > 0x7) {
|
||||
dev_err(dphy->dev, "data_hs_term_sel[%d] error param %d\n",
|
||||
i,
|
||||
dphy->dphy_param->data_hs_term_sel[i]);
|
||||
dphy->dphy_param.data_hs_term_sel[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (dphy->dphy_param->lp_hys_sw[i] > 0x3) {
|
||||
if (dphy->dphy_param.lp_hys_sw[i] > 0x3) {
|
||||
dev_err(dphy->dev, "lp_hys_sw[%d] error param %d\n",
|
||||
i,
|
||||
dphy->dphy_param->lp_hys_sw[i]);
|
||||
dphy->dphy_param.lp_hys_sw[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (dphy->dphy_param->lp_escclk_pol_sel[i] > 0x1) {
|
||||
if (dphy->dphy_param.lp_escclk_pol_sel[i] > 0x1) {
|
||||
dev_err(dphy->dev, "lp_escclk_pol_sel[%d] error param %d\n",
|
||||
i,
|
||||
dphy->dphy_param->lp_escclk_pol_sel[i]);
|
||||
dphy->dphy_param.lp_escclk_pol_sel[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
if (dphy->dphy_param->skew_data_cal_clk[i] > 0x1f) {
|
||||
if (dphy->dphy_param.skew_data_cal_clk[i] > 0x1f) {
|
||||
dev_err(dphy->dev, "skew_data_cal_clk[%d] error param %d\n",
|
||||
i,
|
||||
dphy->dphy_param->skew_data_cal_clk[i]);
|
||||
dphy->dphy_param.skew_data_cal_clk[i]);
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
regmap_write(samsung->regmap, RX_S0C_GNR_CON1, 0x1450);
|
||||
regmap_write(samsung->regmap, RX_S0C_ANA_CON1, 0x8000);
|
||||
regmap_write(samsung->regmap, RX_S0C_ANA_CON2, dphy->dphy_param->clk_hs_term_sel);
|
||||
regmap_write(samsung->regmap, RX_S0C_ANA_CON2, dphy->dphy_param.clk_hs_term_sel);
|
||||
regmap_write(samsung->regmap, RX_S0C_ANA_CON3, 0x0600);
|
||||
if (sensor->lanes > 0x00) {
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D0_GNR_CON1, 0x1450);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON1, 0x8000);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON2, dlysel |
|
||||
dphy->dphy_param->data_hs_term_sel[0]);
|
||||
dphy->dphy_param.data_hs_term_sel[0]);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON3, 0x0600 |
|
||||
(dphy->dphy_param->lp_hys_sw[0] << 4) |
|
||||
(dphy->dphy_param->lp_escclk_pol_sel[0] << 11));
|
||||
(dphy->dphy_param.lp_hys_sw[0] << 4) |
|
||||
(dphy->dphy_param.lp_escclk_pol_sel[0] << 11));
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D0_ANA_CON7, 0x40);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D0_DESKEW_CON2,
|
||||
dphy->dphy_param->skew_data_cal_clk[0]);
|
||||
dphy->dphy_param.skew_data_cal_clk[0]);
|
||||
}
|
||||
if (sensor->lanes > 0x01) {
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D1_GNR_CON1, 0x1450);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON1, 0x8000);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON2, dlysel |
|
||||
dphy->dphy_param->data_hs_term_sel[1]);
|
||||
dphy->dphy_param.data_hs_term_sel[1]);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON3, 0x0600 |
|
||||
(dphy->dphy_param->lp_hys_sw[1] << 4) |
|
||||
(dphy->dphy_param->lp_escclk_pol_sel[1] << 11));
|
||||
(dphy->dphy_param.lp_hys_sw[1] << 4) |
|
||||
(dphy->dphy_param.lp_escclk_pol_sel[1] << 11));
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D1_ANA_CON7, 0x40);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D1_DESKEW_CON2,
|
||||
dphy->dphy_param->skew_data_cal_clk[1]);
|
||||
dphy->dphy_param.skew_data_cal_clk[1]);
|
||||
}
|
||||
if (sensor->lanes > 0x02) {
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D2_GNR_CON1, 0x1450);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON1, 0x8000);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON2, dlysel |
|
||||
dphy->dphy_param->data_hs_term_sel[2]);
|
||||
dphy->dphy_param.data_hs_term_sel[2]);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON3, 0x0600 |
|
||||
(dphy->dphy_param->lp_hys_sw[2] << 4) |
|
||||
(dphy->dphy_param->lp_escclk_pol_sel[2] << 11));
|
||||
(dphy->dphy_param.lp_hys_sw[2] << 4) |
|
||||
(dphy->dphy_param.lp_escclk_pol_sel[2] << 11));
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D2_ANA_CON7, 0x40);
|
||||
regmap_write(samsung->regmap, RX_COMBO_S0D2_DESKEW_CON2,
|
||||
dphy->dphy_param->skew_data_cal_clk[2]);
|
||||
dphy->dphy_param.skew_data_cal_clk[2]);
|
||||
}
|
||||
if (sensor->lanes > 0x03) {
|
||||
regmap_write(samsung->regmap, RX_S0D3_GNR_CON1, 0x1450);
|
||||
regmap_write(samsung->regmap, RX_S0D3_ANA_CON1, 0x8000);
|
||||
regmap_write(samsung->regmap, RX_S0D3_ANA_CON2, dlysel |
|
||||
dphy->dphy_param->data_hs_term_sel[3]);
|
||||
dphy->dphy_param.data_hs_term_sel[3]);
|
||||
regmap_write(samsung->regmap, RX_S0D3_ANA_CON3, 0x0600 |
|
||||
(dphy->dphy_param->lp_hys_sw[3] << 4) |
|
||||
(dphy->dphy_param->lp_escclk_pol_sel[3] << 11));
|
||||
(dphy->dphy_param.lp_hys_sw[3] << 4) |
|
||||
(dphy->dphy_param.lp_escclk_pol_sel[3] << 11));
|
||||
regmap_write(samsung->regmap, RX_S0D3_DESKEW_CON2,
|
||||
dphy->dphy_param->skew_data_cal_clk[3]);
|
||||
dphy->dphy_param.skew_data_cal_clk[3]);
|
||||
}
|
||||
} else {
|
||||
if (sensor->lanes > 0x00) {
|
||||
|
||||
Reference in New Issue
Block a user