diff --git a/drivers/media/i2c/rk628/rk628_combtxphy.c b/drivers/media/i2c/rk628/rk628_combtxphy.c index ec42f539857c..dac86c39ab20 100644 --- a/drivers/media/i2c/rk628/rk628_combtxphy.c +++ b/drivers/media/i2c/rk628/rk628_combtxphy.c @@ -114,7 +114,7 @@ void rk628_txphy_set_mode(struct rk628 *rk628, enum phy_mode mode) unsigned int flags = bus_width & 0xff; fhsc = fin * (fhsc / fin); - if (fhsc < 80 || fhsc > 1800) + if (fhsc < 80 || fhsc > 2000) return; else if (fhsc < 375) txphy->rate_div = 4; diff --git a/drivers/media/i2c/rk628/rk628_csi.h b/drivers/media/i2c/rk628/rk628_csi.h index 86d8defe9050..d24a5022c708 100644 --- a/drivers/media/i2c/rk628/rk628_csi.h +++ b/drivers/media/i2c/rk628/rk628_csi.h @@ -113,4 +113,6 @@ #define CSITX1_DPHY_CTRL (CSITX1_BASE + 0x00b0) #define CSI1_MAX_REGISTER CSITX1_DPHY_CTRL +#define CSI_SKIP_FRAME_NORMAL 1 + #endif diff --git a/drivers/media/i2c/rk628/rk628_csi_v4l2.c b/drivers/media/i2c/rk628/rk628_csi_v4l2.c index e799a65c6e58..d5038ddf545b 100644 --- a/drivers/media/i2c/rk628/rk628_csi_v4l2.c +++ b/drivers/media/i2c/rk628/rk628_csi_v4l2.c @@ -2557,6 +2557,12 @@ static long rk628_csi_ioctl(struct v4l2_subdev *sd, unsigned int cmd, void *arg) v4l2_info(sd, "user set color range: %d\n", csi->user_color_range); rk628_csi_set_color_range(sd); break; + case RKMODULE_GET_SKIP_FRAME: + if (csi->plat_data->tx_mode == DSI_MODE) + *(int *)arg = CSI_SKIP_FRAME_NORMAL; + else + *(int *)arg = 0; + break; default: ret = -ENOIOCTLCMD; break; diff --git a/drivers/media/i2c/rk628/rk628_dsi.c b/drivers/media/i2c/rk628/rk628_dsi.c index b1499796519b..1364d7493100 100644 --- a/drivers/media/i2c/rk628/rk628_dsi.c +++ b/drivers/media/i2c/rk628/rk628_dsi.c @@ -302,6 +302,9 @@ u32 rk628_dsi_get_lane_rate_mbps(struct rk628_dsi *dsi) else lane_rate = 700; + if (dsi->timings.bt.width == 4096 && lane_rate > 1300) + lane_rate = 1850; + return lane_rate; } EXPORT_SYMBOL(rk628_dsi_get_lane_rate_mbps);