lkml.org 
[lkml]   [2019]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 06/15] drm/bridge: tc358767: Simplify AUX data read
    Date
    Simplify AUX data read by removing index arithmetic and shifting with
    a helper function that does two things:

    1. Fetch data from up to 4 32-bit registers from the chip
    2. Copy read data into user provided array.

    Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
    Reviewed-by: Andrzej Hajda <a.hajda@samsung.com>
    Cc: Andrzej Hajda <a.hajda@samsung.com>
    Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
    Cc: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Cc: Andrey Gusakov <andrey.gusakov@cogentembedded.com>
    Cc: Philipp Zabel <p.zabel@pengutronix.de>
    Cc: Cory Tusar <cory.tusar@zii.aero>
    Cc: Chris Healy <cphealy@gmail.com>
    Cc: Lucas Stach <l.stach@pengutronix.de>
    Cc: dri-devel@lists.freedesktop.org
    Cc: linux-kernel@vger.kernel.org
    ---
    drivers/gpu/drm/bridge/tc358767.c | 31 ++++++++++++++++++-------------
    1 file changed, 18 insertions(+), 13 deletions(-)

    diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c
    index 7b15caec2ce5..7152b44db8a3 100644
    --- a/drivers/gpu/drm/bridge/tc358767.c
    +++ b/drivers/gpu/drm/bridge/tc358767.c
    @@ -321,6 +321,20 @@ static int tc_aux_get_status(struct tc_data *tc, u8 *reply)
    return 0;
    }

    +static int tc_aux_read_data(struct tc_data *tc, void *data, size_t size)
    +{
    + u32 auxrdata[DP_AUX_MAX_PAYLOAD_BYTES / sizeof(u32)];
    + int ret, count = ALIGN(size, sizeof(u32));
    +
    + ret = regmap_raw_read(tc->regmap, DP0_AUXRDATA(0), auxrdata, count);
    + if (ret)
    + return ret;
    +
    + memcpy(data, auxrdata, size);
    +
    + return size;
    +}
    +
    static ssize_t tc_aux_transfer(struct drm_dp_aux *aux,
    struct drm_dp_aux_msg *msg)
    {
    @@ -379,19 +393,10 @@ static ssize_t tc_aux_transfer(struct drm_dp_aux *aux,
    if (ret)
    return ret;

    - if (request == DP_AUX_I2C_READ || request == DP_AUX_NATIVE_READ) {
    - /* Read data */
    - while (i < size) {
    - if ((i % 4) == 0) {
    - ret = regmap_read(tc->regmap,
    - DP0_AUXRDATA(i >> 2), &tmp);
    - if (ret)
    - return ret;
    - }
    - buf[i] = tmp & 0xff;
    - tmp = tmp >> 8;
    - i++;
    - }
    + switch (request) {
    + case DP_AUX_NATIVE_READ:
    + case DP_AUX_I2C_READ:
    + return tc_aux_read_data(tc, msg->buffer, size);
    }

    return size;
    --
    2.21.0
    \
     
     \ /
      Last update: 2019-06-12 10:34    [W:4.100 / U:0.148 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site