lkml.org 
[lkml]   [2020]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.9 138/757] media: i2c: ov5640: Separate out mipi configuration from s_power
    Date
    From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>

    [ Upstream commit b1751ae652fb95919c08df5bdd739ccf9886158a ]

    In preparation for adding DVP configuration in s_power callback
    move mipi configuration into separate function

    Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
    Reviewed-by: Biju Das <biju.das.jz@bp.renesas.com>
    Tested-by: Jacopo Mondi <jacopo@jmondi.org>
    Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/i2c/ov5640.c | 116 +++++++++++++++++++------------------
    1 file changed, 60 insertions(+), 56 deletions(-)

    diff --git a/drivers/media/i2c/ov5640.c b/drivers/media/i2c/ov5640.c
    index 6e558a7e2d244..90db5443c4248 100644
    --- a/drivers/media/i2c/ov5640.c
    +++ b/drivers/media/i2c/ov5640.c
    @@ -2014,6 +2014,61 @@ static void ov5640_set_power_off(struct ov5640_dev *sensor)
    clk_disable_unprepare(sensor->xclk);
    }

    +static int ov5640_set_power_mipi(struct ov5640_dev *sensor, bool on)
    +{
    + int ret;
    +
    + if (!on) {
    + /* Reset MIPI bus settings to their default values. */
    + ov5640_write_reg(sensor, OV5640_REG_IO_MIPI_CTRL00, 0x58);
    + ov5640_write_reg(sensor, OV5640_REG_MIPI_CTRL00, 0x04);
    + ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT00, 0x00);
    + return 0;
    + }
    +
    + /*
    + * Power up MIPI HS Tx and LS Rx; 2 data lanes mode
    + *
    + * 0x300e = 0x40
    + * [7:5] = 010 : 2 data lanes mode (see FIXME note in
    + * "ov5640_set_stream_mipi()")
    + * [4] = 0 : Power up MIPI HS Tx
    + * [3] = 0 : Power up MIPI LS Rx
    + * [2] = 0 : MIPI interface disabled
    + */
    + ret = ov5640_write_reg(sensor, OV5640_REG_IO_MIPI_CTRL00, 0x40);
    + if (ret)
    + return ret;
    +
    + /*
    + * Gate clock and set LP11 in 'no packets mode' (idle)
    + *
    + * 0x4800 = 0x24
    + * [5] = 1 : Gate clock when 'no packets'
    + * [2] = 1 : MIPI bus in LP11 when 'no packets'
    + */
    + ret = ov5640_write_reg(sensor, OV5640_REG_MIPI_CTRL00, 0x24);
    + if (ret)
    + return ret;
    +
    + /*
    + * Set data lanes and clock in LP11 when 'sleeping'
    + *
    + * 0x3019 = 0x70
    + * [6] = 1 : MIPI data lane 2 in LP11 when 'sleeping'
    + * [5] = 1 : MIPI data lane 1 in LP11 when 'sleeping'
    + * [4] = 1 : MIPI clock lane in LP11 when 'sleeping'
    + */
    + ret = ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT00, 0x70);
    + if (ret)
    + return ret;
    +
    + /* Give lanes some time to coax into LP11 state. */
    + usleep_range(500, 1000);
    +
    + return 0;
    +}
    +
    static int ov5640_set_power(struct ov5640_dev *sensor, bool on)
    {
    int ret = 0;
    @@ -2026,67 +2081,16 @@ static int ov5640_set_power(struct ov5640_dev *sensor, bool on)
    ret = ov5640_restore_mode(sensor);
    if (ret)
    goto power_off;
    + }

    - /* We're done here for DVP bus, while CSI-2 needs setup. */
    - if (sensor->ep.bus_type != V4L2_MBUS_CSI2_DPHY)
    - return 0;
    -
    - /*
    - * Power up MIPI HS Tx and LS Rx; 2 data lanes mode
    - *
    - * 0x300e = 0x40
    - * [7:5] = 010 : 2 data lanes mode (see FIXME note in
    - * "ov5640_set_stream_mipi()")
    - * [4] = 0 : Power up MIPI HS Tx
    - * [3] = 0 : Power up MIPI LS Rx
    - * [2] = 0 : MIPI interface disabled
    - */
    - ret = ov5640_write_reg(sensor,
    - OV5640_REG_IO_MIPI_CTRL00, 0x40);
    - if (ret)
    - goto power_off;
    -
    - /*
    - * Gate clock and set LP11 in 'no packets mode' (idle)
    - *
    - * 0x4800 = 0x24
    - * [5] = 1 : Gate clock when 'no packets'
    - * [2] = 1 : MIPI bus in LP11 when 'no packets'
    - */
    - ret = ov5640_write_reg(sensor,
    - OV5640_REG_MIPI_CTRL00, 0x24);
    - if (ret)
    - goto power_off;
    -
    - /*
    - * Set data lanes and clock in LP11 when 'sleeping'
    - *
    - * 0x3019 = 0x70
    - * [6] = 1 : MIPI data lane 2 in LP11 when 'sleeping'
    - * [5] = 1 : MIPI data lane 1 in LP11 when 'sleeping'
    - * [4] = 1 : MIPI clock lane in LP11 when 'sleeping'
    - */
    - ret = ov5640_write_reg(sensor,
    - OV5640_REG_PAD_OUTPUT00, 0x70);
    + if (sensor->ep.bus_type == V4L2_MBUS_CSI2_DPHY) {
    + ret = ov5640_set_power_mipi(sensor, on);
    if (ret)
    goto power_off;
    + }

    - /* Give lanes some time to coax into LP11 state. */
    - usleep_range(500, 1000);
    -
    - } else {
    - if (sensor->ep.bus_type == V4L2_MBUS_CSI2_DPHY) {
    - /* Reset MIPI bus settings to their default values. */
    - ov5640_write_reg(sensor,
    - OV5640_REG_IO_MIPI_CTRL00, 0x58);
    - ov5640_write_reg(sensor,
    - OV5640_REG_MIPI_CTRL00, 0x04);
    - ov5640_write_reg(sensor,
    - OV5640_REG_PAD_OUTPUT00, 0x00);
    - }
    -
    + if (!on)
    ov5640_set_power_off(sensor);
    - }

    return 0;

    --
    2.25.1


    \
     
     \ /
      Last update: 2020-10-27 16:40    [W:2.160 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site