[PATCH v6 00/15] Support ROHM BD71828 PMIC

From: Matti Vaittinen
Date: Wed Dec 11 2019 - 04:34:04 EST

Patch series introducing support for ROHM BD71828 PMIC

ROHM BD71828 is a power management IC containing 7 bucks and 7 LDOs. All
regulators can be controlled individually via I2C. Bucks 1,2,6 and
7 can also be assigned to a "regulator group" controlled by run-levels.
Eg. Run level specific voltages and enable/disable statuses for each of
these bucks can be set via register interface. The buck run-level group
assignment (selection if buck is to be controlled individually or via
run-levels) can be changed at run-time via I2C.

This patch series brings only the basic support for controlling
regulators individually via I2C.

In addition to the bucks and LDOs there are:

- The usual clk gate
- 4 IO pins (mostly usable as GPO or tied to specific purpose)
- power button support
- two LEDs
- battery charger
- HALL sensor input

This patch series adds support to regulators, clk, RTC, GPIOs and LEDs.

Power-supply driver for charger is not included in this series.

The series also adds LED DT-node lookup based on node name or given
property name/value pair in LED core. It also adds generic default-state
and default-trigger property handling to LED core. Follow-up patches
simplifying few other LED drivers should follow.

In GPIO framework this series adds devm-support for gpio_array getting
for MFD sub-devices whose GPIO consumer information may be in parent
device's DT node. And while I was at it I also added few missing GPIO devm
functions to the documentaton listing.

Changelog v6:
Rebased on top of v5.5-rc1
LED core:
- Do new fw-node look-up only if the new match data is given. That
way behaviour for existing drivers is not changed
- Handle generic LED properties by core only if explisitly requested
in init-data. That way behaviour for existing drivers is not changed
until they are verified to work.
BD71828 LEDs:
- Fix module loading by adding "dummy" of_device_id table.
DT bindings:
- Remove regulator run-level properties as run-level support was
dropped for now.
- Change SPDX to dual lisence
- added select: false
- replace oneOf + const by enum
- remove forgotten comments
- comment indenting
- remove unnecessary descriptions
- Dropped patch 12 with run-level controls
- Dropped unnecessary ramp_delay_supported() - ram_delay ops were
already only filled for DVS bucks.
- rename internal function.
- Added missing blank line

Changelog v5:
Only LED patch (patch 15) changed, rest as in v4.
- Fixed issues reported by Dan Carpenter and kbuild-bot static
Changelog v4 (first non RFC):
- Changed subdevice loading and chip version identification to use
platform ID.
- License identifiers changed to GPL-2.0-only
- Styling fixes mostly
- a few more checks as suggested by Rob Herring.
- Order of DT patches changed.
- me as maintainer
- standard units to new properties (microvolts, ohms)
- runlevel values in an array
- BD71828 driver added (back)
- Added DT support
- Added LED DT node lookup in led framework when init_data is given
with DT node match information.
- Added common property parsing for default-state and
- dropped sysfs interfaces
- fixed module unload/reload by binding gpio consumer information to
regulator device not to MFD.
- Added devm_gpiod_get_parent_array
- added few missing devm functions to documentation

Changelog v3:
- yamlify
- add LED binding doc
- Move clk register definitions from MFD headers to clk driver
- Add generic direction define and use it.
- Drop LED driver from the series (for now).

Changelog v2: Mainly RTC and GPIO fixes suggested by Alexandre and Bartosz
-Patch ordering changed to provide dt binding documents right after the
MFD core.
DT-Bindings for regulators (Patch 3)
-Fix typo in PMIC model number
RTC (patch 11)
-Reverted renaming in order to reduce patch size.
-Reworded commit message
BD71828 regulator (patch 7)
GPIO (patch 12)
-Remove file-name from comment
-prefix IN and OUT defines with chip type
-improved documentation for the INPUT only pin.
-removed empty left-over function
-removed unnecessary #ifdef CONFIG_OF_GPIO
-removed unnecessary error print

Patch 1:
dt-bindings for regulators on BD71828 PMIC
Patch 2:
dt-bindings for LEDs on BD71828 PMIC
Patch 3:
dt-bindings for BD71828 PMIC
Patch 4:
Convert rohm PMICs with common sub-devices to use platform_
device_id to match MFD sub-devices
Patch 5:
BD71828 MFD core.
Patch 6:
Power button support using GPIO keys.
Patch 7:
CLK gate support using existing clk-bd718x7
Patch 8:
Split existing bd718x7 regulator driver to generic ROHM dt
parsing portion (used by more than one ROHM drivers) and
bd718x8 specific parts
Patch 9:
Basic regulator support (individual control via I2C). This
should be pretty standard stuff.
Patch 10:
Add devm_gpiod_get_parent_array
Patch 11:
Add missing managed GPIO array get functions to documentation
Patch 12:
Support BD71828 RTC block using BD70528 RTC driver
Patch 13:
Allow control of GP(I)O pins on BD71828 via GPIO subsystem
Patch 14:
Add LED node lookup and common LED binding parsing support
to LED class/core
Patch 15:
Support toggling the LEDs on BD71828.

This patch series is based on v5.5-rc1


Matti Vaittinen (15):
dt-bindings: regulator: Document ROHM BD71282 regulator bindings
dt-bindings: leds: ROHM BD71282 PMIC LED driver
dt-bindings: mfd: Document ROHM BD71828 bindings
mfd: rohm PMICs - use platform_device_id to match MFD sub-devices
mfd: bd71828: Support ROHM BD71828 PMIC - core
mfd: input: bd71828: Add power-key support
clk: bd718x7: Support ROHM BD71828 clk block
regulator: bd718x7: Split driver to common and bd718x7 specific parts
regulator: bd71828: Basic support for ROHM bd71828 PMIC regulators
gpio: devres: Add devm_gpiod_get_parent_array
docs: driver-model: Add missing managed GPIO array get functions
rtc: bd70528 add BD71828 support
gpio: bd71828: Initial support for ROHM BD71828 PMIC GPIOs
leds: Add common LED binding parsing support to LED class/core
led: bd71828: Support LED outputs on ROHM BD71828 PMIC

.../bindings/leds/rohm,bd71828-leds.yaml | 52 ++
.../bindings/mfd/rohm,bd71828-pmic.yaml | 193 +++++
.../regulator/rohm,bd71828-regulator.yaml | 107 +++
.../driver-api/driver-model/devres.rst | 3 +
drivers/clk/Kconfig | 6 +-
drivers/clk/clk-bd718x7.c | 50 +-
drivers/gpio/Kconfig | 12 +
drivers/gpio/Makefile | 1 +
drivers/gpio/gpio-bd71828.c | 159 ++++
drivers/gpio/gpiolib-devres.c | 65 +-
drivers/leds/Kconfig | 10 +
drivers/leds/Makefile | 1 +
drivers/leds/led-class.c | 99 ++-
drivers/leds/led-core.c | 258 +++++-
drivers/leds/leds-bd71828.c | 118 +++
drivers/mfd/Kconfig | 15 +
drivers/mfd/Makefile | 2 +-
drivers/mfd/rohm-bd70528.c | 3 +-
drivers/mfd/rohm-bd71828.c | 345 ++++++++
drivers/mfd/rohm-bd718x7.c | 39 +-
drivers/regulator/Kconfig | 16 +
drivers/regulator/Makefile | 2 +
drivers/regulator/bd71828-regulator.c | 812 ++++++++++++++++++
drivers/regulator/bd718x7-regulator.c | 200 ++---
drivers/regulator/rohm-regulator.c | 95 ++
drivers/rtc/Kconfig | 3 +-
drivers/rtc/rtc-bd70528.c | 168 +++-
include/linux/gpio/consumer.h | 5 +
include/linux/leds.h | 94 +-
include/linux/mfd/rohm-bd70528.h | 19 +-
include/linux/mfd/rohm-bd71828.h | 423 +++++++++
include/linux/mfd/rohm-bd718x7.h | 6 -
include/linux/mfd/rohm-generic.h | 48 +-
include/linux/mfd/rohm-shared.h | 27 +
34 files changed, 3177 insertions(+), 279 deletions(-)
create mode 100644 Documentation/devicetree/bindings/leds/rohm,bd71828-leds.yaml
create mode 100644 Documentation/devicetree/bindings/mfd/rohm,bd71828-pmic.yaml
create mode 100644 Documentation/devicetree/bindings/regulator/rohm,bd71828-regulator.yaml
create mode 100644 drivers/gpio/gpio-bd71828.c
create mode 100644 drivers/leds/leds-bd71828.c
create mode 100644 drivers/mfd/rohm-bd71828.c
create mode 100644 drivers/regulator/bd71828-regulator.c
create mode 100644 drivers/regulator/rohm-regulator.c
create mode 100644 include/linux/mfd/rohm-bd71828.h
create mode 100644 include/linux/mfd/rohm-shared.h


Matti Vaittinen, Linux device drivers
ROHM Semiconductors, Finland SWDC
Kiviharjunlenkki 1E
90220 OULU

~~~ "I don't think so," said Rene Descartes. Just then he vanished ~~~
Simon says - in Latin please.
~~~ "non cogito me" dixit Rene Descarte, deinde evanescavit ~~~
Thanks to Simon Glass for the translation =]