From 97e05b42e3f9737f4e20c696afa8f35593556ef0 Mon Sep 17 00:00:00 2001 From: Hu Kejun Date: Tue, 8 Jan 2019 18:24:13 +0800 Subject: [PATCH] phy: rockchip: mipi-rx: update sensor mbus when stream start Change-Id: I5ced164e38b3869da0d3ec12ed180b75ccd924a3 Signed-off-by: Hu Kejun --- drivers/phy/rockchip/phy-rockchip-mipi-rx.c | 35 +++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/drivers/phy/rockchip/phy-rockchip-mipi-rx.c b/drivers/phy/rockchip/phy-rockchip-mipi-rx.c index 1ee4687c17e1..38603d0207e5 100644 --- a/drivers/phy/rockchip/phy-rockchip-mipi-rx.c +++ b/drivers/phy/rockchip/phy-rockchip-mipi-rx.c @@ -646,6 +646,39 @@ static int mipidphy_get_sensor_data_rate(struct v4l2_subdev *sd) return 0; } +static int mipidphy_update_sensor_mbus(struct v4l2_subdev *sd) +{ + struct mipidphy_priv *priv = to_dphy_priv(sd); + struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); + struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + struct v4l2_mbus_config mbus; + int ret; + + ret = v4l2_subdev_call(sensor_sd, video, g_mbus_config, &mbus); + if (ret) + return ret; + + sensor->mbus = mbus; + switch (mbus.flags & V4L2_MBUS_CSI2_LANES) { + case V4L2_MBUS_CSI2_1_LANE: + sensor->lanes = 1; + break; + case V4L2_MBUS_CSI2_2_LANE: + sensor->lanes = 2; + break; + case V4L2_MBUS_CSI2_3_LANE: + sensor->lanes = 3; + break; + case V4L2_MBUS_CSI2_4_LANE: + sensor->lanes = 4; + break; + default: + return -EINVAL; + } + + return 0; +} + static int mipidphy_s_stream_start(struct v4l2_subdev *sd) { struct mipidphy_priv *priv = to_dphy_priv(sd); @@ -658,6 +691,7 @@ static int mipidphy_s_stream_start(struct v4l2_subdev *sd) if (ret < 0) return ret; + mipidphy_update_sensor_mbus(sd); priv->stream_on(priv, sd); priv->is_streaming = true; @@ -694,6 +728,7 @@ static int mipidphy_g_mbus_config(struct v4l2_subdev *sd, struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + mipidphy_update_sensor_mbus(sd); *config = sensor->mbus; return 0;