lkml.org 
[lkml]   [2018]   [Apr]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 30/95] ASoC: ssm2602: Replace reg_default_raw with reg_default
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: James Kelly <jamespeterkelly@gmail.com>

    commit a01df75ce737951ad13a08d101306e88c3f57cb2 upstream.

    SSM2602 driver is broken on recent kernels (at least
    since 4.9). User space applications such as amixer or
    alsamixer get EIO when attempting to access codec
    controls via the relevant IOCTLs.

    Root cause of these failures is the regcache_hw_init
    function in drivers/base/regmap/regcache.c, which
    prevents regmap cache initalization from the
    reg_defaults_raw element of the regmap_config structure
    when registers are write only. It also disables the
    regmap cache entirely when all registers are write only
    or volatile as is the case for the SSM2602 driver.

    Using the reg_defaults element of the regmap_config
    structure rather than the reg_defaults_raw element to
    initalize the regmap cache avoids the logic in the
    regcache_hw_init function entirely. It also makes this
    driver consistent with other ASoC codec drivers, as
    this driver was the ONLY codec driver that used the
    reg_defaults_raw element to initalize the cache.

    Tested on Digilent Zybo Z7 development board which has
    a SSM2603 codec chip connected to a Xilinx Zynq SoC.

    Signed-off-by: James Kelly <jamespeterkelly@gmail.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/soc/codecs/ssm2602.c | 19 +++++++++++++------
    1 file changed, 13 insertions(+), 6 deletions(-)

    --- a/sound/soc/codecs/ssm2602.c
    +++ b/sound/soc/codecs/ssm2602.c
    @@ -54,10 +54,17 @@ struct ssm2602_priv {
    * using 2 wire for device control, so we cache them instead.
    * There is no point in caching the reset register
    */
    -static const u16 ssm2602_reg[SSM2602_CACHEREGNUM] = {
    - 0x0097, 0x0097, 0x0079, 0x0079,
    - 0x000a, 0x0008, 0x009f, 0x000a,
    - 0x0000, 0x0000
    +static const struct reg_default ssm2602_reg[SSM2602_CACHEREGNUM] = {
    + { .reg = 0x00, .def = 0x0097 },
    + { .reg = 0x01, .def = 0x0097 },
    + { .reg = 0x02, .def = 0x0079 },
    + { .reg = 0x03, .def = 0x0079 },
    + { .reg = 0x04, .def = 0x000a },
    + { .reg = 0x05, .def = 0x0008 },
    + { .reg = 0x06, .def = 0x009f },
    + { .reg = 0x07, .def = 0x000a },
    + { .reg = 0x08, .def = 0x0000 },
    + { .reg = 0x09, .def = 0x0000 }
    };


    @@ -620,8 +627,8 @@ const struct regmap_config ssm2602_regma
    .volatile_reg = ssm2602_register_volatile,

    .cache_type = REGCACHE_RBTREE,
    - .reg_defaults_raw = ssm2602_reg,
    - .num_reg_defaults_raw = ARRAY_SIZE(ssm2602_reg),
    + .reg_defaults = ssm2602_reg,
    + .num_reg_defaults = ARRAY_SIZE(ssm2602_reg),
    };
    EXPORT_SYMBOL_GPL(ssm2602_regmap_config);


    \
     
     \ /
      Last update: 2018-04-22 16:57    [W:3.756 / U:0.012 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site