Skip to content

Commit

Permalink
dt-bindings: regulator: pca9450: Add properties for handling LDO5
Browse files Browse the repository at this point in the history
This reverts commit 27866e3 and
implements a new future-proof way of handling the mismatch between
the PMIC driver and the hardware for LDO5.

It turned out that this feature was implemented based on the wrong
assumption that the SD_VSEL signal needs to be controlled as GPIO
in any case.

In fact the straight-forward approach is to mux the signal as
USDHC_VSELECT and let the USDHC controller do the job.

Most users never even used this property and the few who did have
been or are getting migrated to the alternative approach.

In order to know the current status (which of the two control
registers is used) for the LDO5 regulator, we need to route back the
USDHC_VSELECT signal by setting the SION bit in the IOMUX.

By adding the according GPIO as sd-vsel-gpios to the LDO5 node, we
allow the regulator driver to sample the current status of the
SD_VSEL signal that is used to select the correct control register.

The SD_VSEL on the PMIC is always an input. It's driven by the SoC's
VSELECT signal (controlled by the USDHC controller) and we use the
SION bit in the IOMUX to internally loop back the signal in order to
sample it using the GPIO.

As the SD_VSEL pin is directly routed to the LDO5 regulator in the
PMIC, make the sd-vsel-gpios property part of the LDO5 node.

SoC                                  PMIC
+-----------------------+           +-------------------+
|                       |           |                   |
|                       |           |                   |
|  GPIO <----------+    |           |                   |
|                  |    |    SD_VSEL|   +-------+       |
|  USDHC_VSELECT ->+------------------->| LDO5  |       |
|                       |           |   +-------+       |
|                       |           |                   |
+-----------------------+           +-------------------+

For boards which have the SD_VSEL tied to a fixed low level, we add
'nxp,sd-vsel-fixed-low'. The voltage of LDO5 is therefore only controlled
by writing to the LDO5CTRL_L register.

If none of 'nxp,sd-vsel-fixed-low' or 'sd-vsel-gpios' is set, we keep
the same behavior as before. The driver assumes that SD_VSEL is tied
high and the LDO5CTRL_H register can be used, which is in fact not true
for all known boards and works merely by chance.

Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Link: https://patch.msgid.link/20241218152842.97483-2-frieder@fris.de
Signed-off-by: Mark Brown <broonie@kernel.org>
  • Loading branch information
Frieder Schrempf authored and Mark Brown committed Feb 3, 2025
1 parent 2014c95 commit f9cbf56
Showing 1 changed file with 23 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,30 @@ properties:
description: |
list of regulators provided by this controller
properties:
LDO5:
type: object
$ref: regulator.yaml#
description:
Properties for single LDO5 regulator.

properties:
nxp,sd-vsel-fixed-low:
type: boolean
description:
Let the driver know that SD_VSEL is hardwired to low level and
there is no GPIO to get the actual value from.

sd-vsel-gpios:
description:
GPIO that can be used to read the current status of the SD_VSEL
signal in order for the driver to know if LDO5CTRL_L or LDO5CTRL_H
is used by the hardware.

unevaluatedProperties: false

patternProperties:
"^LDO[1-5]$":
"^LDO[1-4]$":
type: object
$ref: regulator.yaml#
description:
Expand Down Expand Up @@ -78,11 +100,6 @@ properties:

additionalProperties: false

sd-vsel-gpios:
description: GPIO that is used to switch LDO5 between being configured by
LDO5CTRL_L or LDO5CTRL_H register. Use this if the SD_VSEL signal is
connected to a host GPIO.

nxp,i2c-lt-enable:
type: boolean
description:
Expand Down

0 comments on commit f9cbf56

Please sign in to comment.