Message ID | 20241218152842.97483-2-frieder@fris.de (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Use correct LDO5 control registers for PCA9450 | expand |
On Wed, Dec 18, 2024 at 04:27:24PM +0100, Frieder Schrempf wrote: > From: Frieder Schrempf <frieder.schrempf@kontron.de> > > This reverts commit 27866e3e8a7e93494f8374f48061aa73ee46ceb2 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>
diff --git a/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml b/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml index 68709a7dc43f1..7605a05a9eedf 100644 --- a/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml +++ b/Documentation/devicetree/bindings/regulator/nxp,pca9450-regulator.yaml @@ -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: @@ -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: