add power-supply control to enable eeprom usage
Subsystems (4)
v3 cover add power-supply control to enable eeprom usage
First patch describes the new binding property. Second patch adds the functionality to the driver.
Change between v3 and v2:
- Apply on top of v6.0-rc1.
Change between v2 and v1:
- Use a gpio regulator for power-supply control.
Eliav Farber (2):
dt-bindings: at24: add new optional power-supply property
eeprom: at24: add support for power-supply control
.../devicetree/bindings/eeprom/at24.yaml | 4 ++ drivers/misc/eeprom/at24.c | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+)
Signature · 1 line
2.37.1
PATCH v3 1/2 dt-bindings: at24: add new optional power-supply property
Boards using the AT24 EEPROMs might have a GPIO that controls the power supply of the chip, and it must be set to enable the usage of it.
Add a new optional property to the device tree binding document, which allows to specify a GPIO regulator for the pin that controls the power.
On Linux this means that we need to enable the GPIO at the beginning of probe function, before trying to access the chip.
---
V2 -> V3:
Apply on top of v6.0-rc1
Documentation/devicetree/bindings/eeprom/at24.yaml | 4 ++++ 1 file changed, 4 insertions(+)
Documentation/devicetree/bindings/eeprom/at24.yaml +4 -0
@@ -179,6 +179,10 @@ properties: description: phandle of the regulator that provides the supply voltage. + power-supply: + description: + phandle of the gpio regulator that provides the supply voltage. + required: - compatible - reg
Signature · 1 line
2.37.1
Re: [PATCH v3 1/2] dt-bindings: at24: add new optional power-supply property
Quoted 23 lines · Eliav Farber
Boards using the AT24 EEPROMs might have a GPIO that controls the power supply of the chip, and it must be set to enable the usage of it.
Add a new optional property to the device tree binding document, which allows to specify a GPIO regulator for the pin that controls the power.
On Linux this means that we need to enable the GPIO at the beginning of probe function, before trying to access the chip.
Signed-off-by Eliav Farber <[email protected]>---
V2 -> V3:
Apply on top of v6.0-rc1Documentation/devicetree/bindings/eeprom/at24.yaml | 4 ++++ 1 file changed, 4 insertions(+)Documentation/devicetree/bindings/eeprom/at24.yaml +0
-0
Documentation/devicetree/bindings/eeprom/at24.yaml properties: · line 182
Quoted 4 lines
Documentation/devicetree/bindings/eeprom/at24.yaml +1
-0@@ -179,6 +179,10 @@ properties: description: phandle of the regulator that provides the supply voltage. + power-supply:
The datasheets I looked at say the supply name is 'VCC', so vcc-supply.
Documentation/devicetree/bindings/eeprom/at24.yaml properties: · line 184
Quoted 2 lines
Documentation/devicetree/bindings/eeprom/at24.yaml +2
-0+ description: + phandle of the gpio regulator that provides the supply voltage.
What the connection is is outside the scope of the binding. IOW, it might not be a GPIO controlled regulator. So drop the description.
Quoted 7 lines
Documentation/devicetree/bindings/eeprom/at24.yaml +1
-1+ required: - compatible - reg --2.37.1
PATCH v3 2/2 eeprom: at24: add support for power-supply control
In reply to Eliav FarberAdd an optional gpio regulator to support a power-supply control. If a gpio power-supply regulator is supplied in the device tree, the gpio is enabled during probe, and disabled on remove.
---
V2 -> V3:
Apply on top of v6.0-rc1
drivers/misc/eeprom/at24.c | 40 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+)
drivers/misc/eeprom/at24.c +40 -0
@@ -87,6 +87,8 @@ struct at24_data {struct regulator *vcc_reg;void (*read_post)(unsigned int off,char *buf,size_t count); +struct regulator *supply; +/* * Some chips tie up multiple I2C addresses; dummy devices reserve * them for us.
@@ -581,6 +583,13 @@ static unsigned int at24_get_offset_adj(u8 flags, unsigned int byte_len) } } +static void devm_at24_regulator_disable (void *data) +{ +struct at24_data *at24 = data; + +regulator_disable (at24->supply); +} +static int at24_probe (struct i2c_client *client) {struct regmap_config regmap_config = { };
@@ -681,6 +690,37 @@ static int at24_probe(struct i2c_client *client)if (!at24)return -ENOMEM ; + at24->supply =devm_regulator_get_optional (dev,"power" ); +if (IS_ERR (at24->supply)) { + err =PTR_ERR (at24->supply); +if (err == -ENODEV ) + at24->supply =NULL ; +else +return dev_err_probe (dev, err, +"failed to get power-supply regulator\n" ); + } + +if (at24->supply) { + err =regulator_enable (at24->supply); +if (err <0 ) { +dev_err (dev, +"failed to enable power-supply regulator: %d\n" , + err); +return err; + } + + err =devm_add_action_or_reset (dev, devm_at24_regulator_disable, + at24); +if (err <0 ) { +dev_err (dev, +"failed to add action to disable power-supply regulator: %d\n" , + err); +return err; + } + +usleep_range (2000 ,3000 ); + } +mutex_init (&at24->lock); at24->byte_len = byte_len; at24->page_size = page_size;
Signature · 1 line
2.37.1
Quoted 14 lines · Eliav Farber
First patch describes the new binding property. Second patch adds the functionality to the driver.
Change between v3 and v2:
- Apply on top of v6.0-rc1.Change between v2 and v1:
- Use a gpio regulator for power-supply control.Eliav Farber (2):
dt-bindings: at24: add new optional power-supply property
eeprom: at24: add support for power-supply control
Quoted 7 lines
.../devicetree/bindings/eeprom/at24.yaml | 4 ++ drivers/misc/eeprom/at24.c | 40 +++++++++++++++++++ 2 files changed, 44 insertions(+)--
2.37.1
What is the difference between this and the existing "vcc" regulator? Why are you going through all the hoops in probe if a regular regulator_get() will return a dummy regulator if the supply is not found?
Bart