15 Apr, 2016

1 commit

  • Specifically for the case of reads that use the Extended Register
    Read Long command, a multi-byte read operation is broken up into
    8-byte chunks. However the call to spmi_ext_register_readl() is
    incorrectly passing 'val_size', which if greater than 8 will
    always fail. The argument should instead be 'len'.

    Fixes: c9afbb05a9ff ("regmap: spmi: support base and extended register spaces")
    Signed-off-by: Jack Pham
    Signed-off-by: Mark Brown
    Cc: stable@vger.kernel.org

    Jack Pham
     

12 Aug, 2015

1 commit

  • Init functions defined in regmap*.c files are now prefixed with
    __, take lockdep key and class parameters, and should not be
    called directly: move the documentation to regmap.h, where the
    macros are defined.

    Signed-off-by: Nicolas Boichat
    Signed-off-by: Mark Brown

    Nicolas Boichat
     

07 Aug, 2015

1 commit

  • Lockdep validator complains about recursive locking and deadlock
    when two different regmap instances are called in a nested order.
    That happens anytime a regmap read/write call needs to access
    another regmap.

    This is because, for performance reason, lockdep groups all locks
    initialized by the same mutex_init() in the same lock class.
    Therefore all regmap mutexes are in the same lock class, leading
    to lockdep "nested locking" warnings if a regmap accesses another
    regmap.

    In general, it is impossible to establish in advance the hierarchy
    of regmaps, so we make sure that each regmap init call initializes
    its own static lock_class_key. This is done by wrapping all
    regmap_init calls into macros.

    This also allows us to give meaningful names to the lock_class_key.
    For example, in rt5677 case, we have in /proc/lockdep_chains:
    irq_context: 0
    [ffffffc0018d2198] &dev->mutex
    [ffffffc0018d2198] &dev->mutex
    [ffffffc001bd7f60] rt5677:5104:(&rt5677_regmap)->_lock
    [ffffffc001bd7f58] rt5677:5096:(&rt5677_regmap_physical)->_lock
    [ffffffc001b95448] &(&base->lock)->rlock

    The above would have resulted in a lockdep recursive warning
    previously. This is not the case anymore as the lockdep validator
    now clearly identifies the 2 regmaps as separate.

    Signed-off-by: Nicolas Boichat
    Signed-off-by: Mark Brown

    Nicolas Boichat
     

16 Feb, 2014

1 commit

  • SPMI states that a slave may contain two register spaces, the Base
    register space is a 5-bit byte-addressable space accessed via the
    Register Read/Write and Register Zero Write command sequences, and the
    Extended register space: a 16-bit byte-addressable space accessed via
    the Extended Read/Write and Extended Read/Write Long command sequences.

    Provide support for accessing both of these spaces, taking advantage of
    the more bandwidth-efficient commands ('Register 0 Write' vs 'Register
    Write', and 'Extended Register Read/Write' vs 'Extended Register
    Read/Write Long') when possible.

    Signed-off-by: Josh Cartwright
    Acked-by: Mark Brown
    Signed-off-by: Greg Kroah-Hartman

    Josh Cartwright
     

29 Oct, 2013

1 commit

  • Add basic support for the System Power Management Interface (SPMI) bus.
    This is a simple implementation which only implements register accesses
    via the Extended Register Read/Write Long commands.

    Signed-off-by: Josh Cartwright
    Signed-off-by: Mark Brown

    Josh Cartwright