Skip to content
  • Mark Brown's avatar
    regmap: Add generic non-memory mapped register access API · b83a313b
    Mark Brown authored
    
    
    There are many places in the tree where we implement register access for
    devices on non-memory mapped buses, especially I2C and SPI. Since hardware
    designers seem to have settled on a relatively consistent set of register
    interfaces this can be effectively factored out into shared code.  There
    are a standard set of formats for marshalling data for exchange with the
    device, with the actual I/O mechanisms generally being simple byte
    streams.
    
    We create an abstraction for marshaling data into formats which can be
    sent on the control interfaces, and create a standard method for
    plugging in actual transport underneath that.
    
    This is mostly a refactoring and renaming of the bottom level of the
    existing code for sharing register I/O which we have in ASoC. A
    subsequent patch in this series converts ASoC to use this.  The main
    difference in interface is that reads return values by writing to a
    location provided by a pointer rather than in the return value, ensuring
    we can use the full range of the type for register data.  We also use
    unsigned types rather than ints for the same reason.
    
    As some of the devices can have very large register maps the existing
    ASoC code also contains infrastructure for managing register caches.
    This cache work will be moved over in a future stage to allow for
    separate review, the current patch only deals with the physical I/O.
    
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    Acked-by: default avatarLiam Girdwood <lrg@ti.com>
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    Acked-by: default avatarWolfram Sang <w.sang@pengutronix.de>
    Acked-by: default avatarGrant Likely <grant.likely@secretlab.ca>
    b83a313b