#define GPR_CSI2_1_S_PRG_RXHS_SETTLE(x) (((x) & 0x3F) << 2)
#define GPR_CSI2_1_RX_RCAL (3)
+static u8 rxhs_settle[2] = { 0x14, 0x9 };
+
static struct mxc_mipi_csi2_dev *sd_to_mxc_mipi_csi2_dev(struct v4l2_subdev
*sdev)
{
GPR_CSI2_1_VID_INTFC_ENB |
GPR_CSI2_1_HSEL |
GPR_CSI2_1_CONT_CLK_MODE |
- GPR_CSI2_1_S_PRG_RXHS_SETTLE(9));
+ GPR_CSI2_1_S_PRG_RXHS_SETTLE(csi2dev->
+ hs_settle));
}
return ret;
writel(1, csi2dev->base_regs + 0x180);
/* vid_vc */
writel(1, csi2dev->base_regs + 0x184);
- writel(0x300, csi2dev->base_regs + 0x188);
+ writel(csi2dev->send_level, csi2dev->base_regs + 0x188);
}
static int mipi_csi2_clk_init(struct mxc_mipi_csi2_dev *csi2dev)
if (fmt->pad)
return -EINVAL;
+ if (fmt->format.width * fmt->format.height > 720 * 480) {
+ csi2dev->hs_settle = rxhs_settle[1];
+ csi2dev->send_level = 0x300;
+ } else {
+ csi2dev->hs_settle = rxhs_settle[0];
+ csi2dev->send_level = 0x240;
+ }
+
return v4l2_subdev_call(sensor_sd, pad, set_fmt, NULL, fmt);
}