Skip to contentSkip to conversation

regmap: Generic I2C and SPI register map library

GIT PULL Mark Brown 2 participants 3 messages Jul 22, 2011 – Jul 23, 2011

Subsystems (3)
lore
Share & tools
lore

Mark Brown

author
#0 lore raw

This pull request adds regmap, a library which abstracts out some widely reimplemented code for accessing the register maps of devices on slow buses like I2C and SPI. As well as factoring out code this makes it much easier to factor out higher level code for this class of devices. We've been using equivalent code in ASoC to great effect, the idea here is to move that functionality so that it's usable in other subsystems.

I'm not 100% happy with the implementation at present (to a large extent due to keeping it simple for initial review, though there's some stuff I'm just not happy with) so I expect a bit of internal churn but the external interface should be solid and allow other code to start making use of the code.

Only one driver is converted to the API in this pull request (the tps65023), some other drivers have been converted including the generic cache code in ASoC but various cross tree dependencies mean they can't be applied until everything settles down in the merge window.

The code is in a separate directory because it is expected that the addition of register cache support and diagnostic features like trace and debugfs access to the register maps will mean that the code will get larger.

The following changes since commit 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe:

Linux 3.0 (2011-07-21 19:17:23 -0700)

are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git for-linus

Mark Brown (4):
regmap: Add generic non-memory mapped register access API
regmap: Add I2C bus support
regmap: Add SPI bus support
regulator: Convert tps65023 to use regmap API

 MAINTAINERS                            |    7 +
 drivers/base/Kconfig                   |    2 +
 drivers/base/Makefile                  |    1 +
 drivers/base/regmap/Kconfig            |   14 +
 drivers/base/regmap/Makefile           |    3 +
 drivers/base/regmap/regmap-i2c.c       |  115 ++++++++
 drivers/base/regmap/regmap-spi.c       |   72 +++++
 drivers/base/regmap/regmap.c           |  455 ++++++++++++++++++++++++++++++++
 drivers/regulator/Kconfig              |    1 +
 drivers/regulator/tps65023-regulator.c |   97 ++-----
 include/linux/regmap.h                 |   82 ++++++
 11 files changed, 779 insertions(+), 70 deletions(-)
 create mode 100644 drivers/base/regmap/Kconfig
 create mode 100644 drivers/base/regmap/Makefile
 create mode 100644 drivers/base/regmap/regmap-i2c.c
 create mode 100644 drivers/base/regmap/regmap-spi.c
 create mode 100644 drivers/base/regmap/regmap.c
 create mode 100644 include/linux/regmap.h
#1 lore raw
Quoted 6 lines · Mark Brown

I'm not 100% happy with the implementation at present (to a large extent due to keeping it simple for initial review, though there's some stuff I'm just not happy with) so I expect a bit of internal churn but the external interface should be solid and allow other code to start making use of the code.

What kind of sh*t is this?

First it says

"There are no user servicable options here, this is an API intended
to be used by other kernel subsystems. These subsystems should select the appropriate symbols.:"

and then it does

config REGMAP_I2C
tristate
default I2C

so now that thing turns on REGMAP_I2C and compiles in the code WITHOUT EVEN ASKING. It's enough to enable i2c.

That is TOTALLY UNACCEPTABLE. It's pure and utter sh*t.

Linus

author
#2 lore raw
Quoted 2 lines · Linus Torvalds

so now that thing turns on REGMAP_I2C and compiles in the code WITHOUT EVEN ASKING. It's enough to enable i2c.

Providing some device in the system enabled regmap; the issue here was that dependencies of selected symbols don't work terribly reliably and originally the API was written to support the common idiom of bus neutral core drivers which don't know which bus they're working with but the code got refactored since then and the Kconfig didn't keep up.

Anyway, I've changed the code with the diff below and pushed out again, pull request below the diff:

drivers/base/regmap/Kconfig +1 -2
index 54b5854..fabbf6c 100644
@@ -3,12 +3,11 @@
 # subsystems should select the appropriate symbols.
 
 config REGMAP
+	default y if (REGMAP_I2C || REGMAP_SPI)
 	bool
 
 config REGMAP_I2C
 	tristate
-	default I2C
 
 config REGMAP_SPI
 	tristate
-	default SPI_MASTER
drivers/regulator/Kconfig +1 -1
index 8128db3..c7fd2c0 100644
@@ -235,7 +235,7 @@ config REGULATOR_TPS6105X
 config REGULATOR_TPS65023
 	tristate "TI TPS65023 Power regulators"
 	depends on I2C
-	select REGMAP
+	select REGMAP_I2C
 	help
 	  This driver supports TPS65023 voltage regulator chips. TPS65023 provides
 	  three step-down converters and two general-purpose LDO voltage regulators.

The following changes since commit 02f8c6aee8df3cdc935e9bdd4f2d020306035dbe:

Linux 3.0 (2011-07-21 19:17:23 -0700)

are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap.git for-linus

Mark Brown (4):
regmap: Add generic non-memory mapped register access API
regmap: Add I2C bus support
regmap: Add SPI bus support
regulator: Convert tps65023 to use regmap API

 MAINTAINERS                            |    7 +
 drivers/base/Kconfig                   |    2 +
 drivers/base/Makefile                  |    1 +
 drivers/base/regmap/Kconfig            |   13 +
 drivers/base/regmap/Makefile           |    3 +
 drivers/base/regmap/regmap-i2c.c       |  115 ++++++++
 drivers/base/regmap/regmap-spi.c       |   72 +++++
 drivers/base/regmap/regmap.c           |  455 ++++++++++++++++++++++++++++++++
 drivers/regulator/Kconfig              |    1 +
 drivers/regulator/tps65023-regulator.c |   97 ++-----
 include/linux/regmap.h                 |   82 ++++++
 11 files changed, 778 insertions(+), 70 deletions(-)
 create mode 100644 drivers/base/regmap/Kconfig
 create mode 100644 drivers/base/regmap/Makefile
 create mode 100644 drivers/base/regmap/regmap-i2c.c
 create mode 100644 drivers/base/regmap/regmap-spi.c
 create mode 100644 drivers/base/regmap/regmap.c
 create mode 100644 include/linux/regmap.h