Skip to content

regmap: Generic I2C and SPI register map library

Mark Brown lkml 1 version In review

Get series with b4
b4 am [email protected]

Versions newest first

  1. v1 Latest8 patches 2 repliesIn review

Patches in v1 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/8regmap: Add generic non-memory mapped register access APIMAINTAINERS drivers/Kconfig drivers/Makefile +4 more+574 -00 replies
2/8regmap: Add I2C bus supportdrivers/regmap/Makefile drivers/regmap/regmap-i2c.c+114 -10 replies
3/8regmap: Add SPI bus supportdrivers/regmap/Makefile drivers/regmap/regmap-spi.c+76 -00 replies
4/8ASoC: Use new register map API for ASoC generic physical I/Oinclude/sound/soc.h sound/soc/Kconfig sound/soc/soc-io.c+28 -2910 replies
5/8mfd: Convert WM831x to use regmap APIdrivers/mfd/Kconfig drivers/mfd/wm831x-core.c drivers/mfd/wm831x-i2c.c +2 more+40 -1700 replies
6/8mfd: Convert WM8994 to use new register map APIdrivers/mfd/Kconfig drivers/mfd/wm8994-core.c include/linux/mfd/wm8994/core.h+34 -1510 replies
7/8mfd: Convert pcf50633 to use new register map APIdrivers/mfd/Kconfig drivers/mfd/pcf50633-core.c include/linux/mfd/pcf50633/core.h+32 -860 replies
8/8regulator: Convert tps65023 to use regmap APIdrivers/regulator/Kconfig drivers/regulator/tps65023-regulator.c+28 -710 replies

Reviews trailers per patch

None of the 8 patches has a Reviewed-by or Acked-by of their own; the series has one for all of them.

PatchLiam Girdwood
SeriesA-b
1/8
2/8
3/8
4/8
5/8
6/8
7/8
8/8

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v1 thread

Cover letter [PATCH 0/8] regmap: Generic I2C and SPI register map library

[This revision of the series has some minor updates to the SPI code.]

Many I2C and SPI based devices implement register maps on top of the raw wire interface. This is generally done in a very standard fashion by devices, resulting in a lot of very similar code in drivers. For some time now ASoC has factored this code out into the subsystem but that's only useful for audio devices. The intention with this series is to generalise the concept so that it can be used throughout the kernel.

It's not intended that this be suitable for all devices - some devices have things that are hard to generalise like registers with variable size and paging which are hard to support genericly. At the minute the code is focused on the common cases. It is likely that the same code could be used with other buses with similar properties to I2C and SPI.

Currently only physical I/O is handled, the intention is that once this support has been reviewed and merged the generic register cache code that ASoC includes will also be factored out too. For devices with read heavy workloads (especially those that need a lot of read/modify/write cycles) or which don't support read at all this can provide a useful performance improvement and for sparse register maps there's a lot of benefit in relatively complex cache code.

I'm not entirely happy with the implementation currently but am fairly happy with the external interfaces.

A semi-random set of driver conversions have been included in the series with various degrees of testing including the subsystem wide ASoC code. Far more drivers could use the code, these have mostly just been done as samples in a minimally invasive fashion.

There's a git branch at:

git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git for-next

but due to various -next dependencies this does not currently include all of the patches posted here. I've also created a regmap-asoc branch there which merges current ASoC code with the regmap code.

Mark Brown (8):
regmap: Add generic non-memory mapped register access API
regmap: Add I2C bus support
regmap: Add SPI bus support
ASoC: Use new register map API for ASoC generic physical I/O
mfd: Convert WM831x to use regmap API
mfd: Convert WM8994 to use new register map API
mfd: Convert pcf50633 to use new register map API
regulator: Convert tps65023 to use regmap API

 MAINTAINERS                            |    7 +
 drivers/Kconfig                        |    1 +
 drivers/Makefile                       |    1 +
 drivers/mfd/Kconfig                    |    4 +
 drivers/mfd/pcf50633-core.c            |  114 ++------
 drivers/mfd/wm831x-core.c              |   97 +++----
 drivers/mfd/wm831x-i2c.c               |   56 ----
 drivers/mfd/wm831x-spi.c               |   48 ----
 drivers/mfd/wm8994-core.c              |  175 ++----------
 drivers/regmap/Kconfig                 |    6 +
 drivers/regmap/Makefile                |    3 +
 drivers/regmap/regmap-i2c.c            |  113 ++++++++
 drivers/regmap/regmap-spi.c            |   75 +++++
 drivers/regmap/regmap.c                |  481 ++++++++++++++++++++++++++++++++
 drivers/regulator/Kconfig              |    1 +
 drivers/regulator/tps65023-regulator.c |   98 ++-----
 include/linux/mfd/pcf50633/core.h      |    3 +-
 include/linux/mfd/wm831x/core.h        |    7 +-
 include/linux/mfd/wm8994/core.h        |    9 +-
 include/linux/regmap.h                 |   76 +++++
 include/sound/soc.h                    |    2 +
 sound/soc/Kconfig                      |    1 +
 sound/soc/soc-io.c                     |  316 ++-------------------
 23 files changed, 925 insertions(+), 769 deletions(-)
 create mode 100644 drivers/regmap/Kconfig
 create mode 100644 drivers/regmap/Makefile
 create mode 100644 drivers/regmap/regmap-i2c.c
 create mode 100644 drivers/regmap/regmap-spi.c
 create mode 100644 drivers/regmap/regmap.c
 create mode 100644 include/linux/regmap.h