lkml.org 
[lkml]   [2022]   [Jan]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 055/320] media: rcar-csi2: Correct the selection of hsfreqrange
    Date
    From: Suresh Udipi <sudipi@jp.adit-jv.com>

    [ Upstream commit cee44d4fbacbbdfe62697ec94e76c6e4f726c5df ]

    hsfreqrange should be chosen based on the calculated mbps which
    is closer to the default bit rate and within the range as per
    table[1]. But current calculation always selects first value which
    is greater than or equal to the calculated mbps which may lead
    to chosing a wrong range in some cases.

    For example for 360 mbps for H3/M3N
    Existing logic selects
    Calculated value 360Mbps : Default 400Mbps Range [368.125 -433.125 mbps]

    This hsfreqrange is out of range.

    The logic is changed to get the default value which is closest to the
    calculated value [1]

    Calculated value 360Mbps : Default 350Mbps Range [320.625 -380.625 mpbs]

    [1] specs r19uh0105ej0200-r-car-3rd-generation.pdf [Table 25.9]

    Please note that According to Renesas in Table 25.9 the range for
    220 default value is corrected as below

    |Range (Mbps) | Default Bit rate (Mbps) |
    -----------------------------------------------
    | 197.125-244.125 | 220 |
    -----------------------------------------------

    Fixes: 769afd212b16 ("media: rcar-csi2: add Renesas R-Car MIPI CSI-2 receiver driver")
    Signed-off-by: Suresh Udipi <sudipi@jp.adit-jv.com>
    Signed-off-by: Kazuyoshi Akiyama <akiyama@nds-osk.co.jp>
    Signed-off-by: Michael Rodin <mrodin@de.adit-jv.com>
    Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
    Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/media/platform/rcar-vin/rcar-csi2.c | 9 ++++++++-
    1 file changed, 8 insertions(+), 1 deletion(-)

    diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c
    index e01f22bf826d4..99b28611eb12c 100644
    --- a/drivers/media/platform/rcar-vin/rcar-csi2.c
    +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c
    @@ -430,16 +430,23 @@ static int rcsi2_wait_phy_start(struct rcar_csi2 *priv)
    static int rcsi2_set_phypll(struct rcar_csi2 *priv, unsigned int mbps)
    {
    const struct rcsi2_mbps_reg *hsfreq;
    + const struct rcsi2_mbps_reg *hsfreq_prev = NULL;

    - for (hsfreq = priv->info->hsfreqrange; hsfreq->mbps != 0; hsfreq++)
    + for (hsfreq = priv->info->hsfreqrange; hsfreq->mbps != 0; hsfreq++) {
    if (hsfreq->mbps >= mbps)
    break;
    + hsfreq_prev = hsfreq;
    + }

    if (!hsfreq->mbps) {
    dev_err(priv->dev, "Unsupported PHY speed (%u Mbps)", mbps);
    return -ERANGE;
    }

    + if (hsfreq_prev &&
    + ((mbps - hsfreq_prev->mbps) <= (hsfreq->mbps - mbps)))
    + hsfreq = hsfreq_prev;
    +
    rcsi2_write(priv, PHYPLL_REG, PHYPLL_HSFREQRANGE(hsfreq->reg));

    return 0;
    --
    2.34.1



    \
     
     \ /
      Last update: 2022-01-24 21:13    [W:4.089 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site