lkml.org 
[lkml]   [2019]   [Jul]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 5.2 092/249] regmap: fix bulk writes on paged registers
    Date
    From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

    [ Upstream commit db057679de3e9e6a03c1bcd5aee09b0d25fd9f5b ]

    On buses like SlimBus and SoundWire which does not support
    gather_writes yet in regmap, A bulk write on paged register
    would be silently ignored after programming page.
    This is because local variable 'ret' value in regmap_raw_write_impl()
    gets reset to 0 once page register is written successfully and the
    code below checks for 'ret' value to be -ENOTSUPP before linearising
    the write buffer to send to bus->write().

    Fix this by resetting the 'ret' value to -ENOTSUPP in cases where
    gather_writes() is not supported or single register write is
    not possible.

    Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/base/regmap/regmap.c | 2 ++
    1 file changed, 2 insertions(+)

    diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
    index f1025452bb39..19f57ccfbe1d 100644
    --- a/drivers/base/regmap/regmap.c
    +++ b/drivers/base/regmap/regmap.c
    @@ -1637,6 +1637,8 @@ static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,
    map->format.reg_bytes +
    map->format.pad_bytes,
    val, val_len);
    + else
    + ret = -ENOTSUPP;

    /* If that didn't work fall back on linearising by hand. */
    if (ret == -ENOTSUPP) {
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-15 16:15    [W:4.037 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site