• Jacopo Mondi's avatar
    media: ov5640: Re-work MIPI startup sequence · c59dc6cf
    Jacopo Mondi authored
    commit aa4bb8b8 upstream.
    
    Rework the MIPI interface startup sequence with the following changes:
    
    - Remove MIPI bus initialization from the initial settings blob
    - At set_power(1) time power up MIPI Tx/Rx and set data and clock lanes in
      LP11 during 'sleep' and 'idle' with MIPI clock in non-continuous mode.
    - At s_stream time enable/disable the MIPI interface output.
    - Restore default settings at set_power(0) time.
    
    Before this commit the sensor MIPI interface was initialized with settings
    that require a start/stop sequence at power-up time in order to force lanes
    into LP11 state, as they were initialized in LP00 when in 'sleep mode',
    which is assumed to be the sensor manual definition for the D-PHY defined
    stop mode.
    
    The stream start/stop was performed by enabling disabling clock gating,
    and had the side effect to change the lanes sleep mode configuration when
    stream was stopped.
    
    Clock gating/ungating:
    -       ret = ov5640_mod_reg(sensor, OV5640_REG_MIPI_CTRL00, BIT(5),
    -                            on ? 0 : BIT(5));
    -       if (ret)
    
    Set lanes in LP11 when in 'sleep mode':
    -       ret = ov5640_write_reg(sensor, OV5640_REG_PAD_OUTPUT00,
    -                              on ? 0x00 : 0x70);
    
    This commit fixes an issue reported by Jagan Teki on i.MX6 platforms that
    prevents the host interface from powering up correctly:
    https://lkml.org/lkml/2018/6/1/38
    
    It also improves MIPI capture operations stability on my testing platform
    where MIPI capture often failed and returned all-purple frames.
    
    Fixes: f22996db ("media: ov5640: add support of DVP parallel interface")
    
    Tested-by: Steve Longerbeam <slongerbeam@gmail.com> (i.MX6q SabreSD, CSI-2)
    Tested-by: Loic Poulain <loic.poulain@linaro.org> (Dragonboard-410c, CSI-2)
    Reported-by: default avatarJagan Teki <jagan@amarulasolutions.com>
    Signed-off-by: default avatarJacopo Mondi <jacopo@jmondi.org>
    Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
    Signed-off-by: default avatarAdam Ford <aford173@gmail.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    c59dc6cf
ov5640.c 81.5 KB