regulator: add MP8867/MP8869 support
Subsystems (2)
v2 cover regulator: add MP8867/MP8869 support
From: Jisheng Zhang <[email protected]>
The MP8867/MP8869 from Monolithic Power Systems is a single output DC/DC converter. The voltage can be controlled via I2C.
since v1:
- rebase on regulator for-next branch
Jisheng Zhang (4):
regulator: bindings: add MPS mp8869 voltage regulator
regulator: add support for MP8869 regulator
dt-bindings: mp886x: Document MP8867 support
regulator: mp886x: add MP8867 support
.../devicetree/bindings/regulator/mp886x.txt | 27 ++ drivers/regulator/Kconfig | 7 + drivers/regulator/Makefile | 1 + drivers/regulator/mp886x.c | 290 ++++++++++++++++++ 4 files changed, 325 insertions(+) create mode 100644 Documentation/devicetree/bindings/regulator/mp886x.txt create mode 100644 drivers/regulator/mp886x.c
Signature · 1 line
2.24.0
PATCH v2 1/4 regulator: bindings: add MPS mp8869 voltage regulator
From: Jisheng Zhang <[email protected]>
The MP8869 from Monolithic Power Systems is a single output dc/dc converter with voltage control over i2c.
--- .../devicetree/bindings/regulator/mp886x.txt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 Documentation/devicetree/bindings/regulator/mp886x.txt
Documentation/devicetree/bindings/regulator/mp886x.txt new file +25 -0
@@ -0,0 +1,25 @@ +Monolithic Power Systems MP8869 voltage regulator + +Required properties: +- compatible: "mps,mp8869"; +- reg: I2C slave address. +- enable-gpios: enable gpios. +- mps,fb-voltage-divider: An array of two integers containing the resistor + values R1 and R2 of the feedback voltage divider in kilo ohms. + +Any property defined as part of the core regulator binding, defined in +./regulator.txt, can also be used. + +Example: + + vcpu: regulator@62 { + compatible = "mps,mp8869"; + regulator-name = "vcpu"; + regulator-min-microvolt = <700000>; + regulator-max-microvolt = <850000>; + regulator-always-on; + regulator-boot-on; + enable-gpios = <&porta 1 GPIO_ACTIVE_LOW>; + mps,fb-voltage-divider = <80 240>; + reg = <0x62>; + };
Signature · 1 line
2.24.0
PATCH v2 2/4 regulator: add support for MP8869 regulator
In reply to Jisheng ZhangFrom: Jisheng Zhang <[email protected]>
The MP8869 from Monolithic Power Systems is a single output DC/DC converter. The voltage can be controlled via I2C.
--- drivers/regulator/Kconfig | 7 ++ drivers/regulator/Makefile | 1 + drivers/regulator/mp886x.c | 230 +++++++++++++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 drivers/regulator/mp886x.c
drivers/regulator/Kconfig +7 -0
@@ -635,6 +635,13 @@ config REGULATOR_MP8859 Say M here if you want to include support for the regulator as a module. The module will be named "mp8859". +config REGULATOR_MP886X + tristate "MPS MP8869 regulator driver" + depends on I2C && (OF || COMPILE_TEST) + select REGMAP_I2C + help + This driver supports the MP8869 voltage regulator. + config REGULATOR_MPQ7920 tristate "Monolithic MPQ7920 PMIC" depends on I2C && OF
drivers/regulator/Makefile +1 -0
@@ -80,6 +80,7 @@ obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o obj-$(CONFIG_REGULATOR_MCP16502) += mcp16502.o obj-$(CONFIG_REGULATOR_MP5416) += mp5416.o obj-$(CONFIG_REGULATOR_MP8859) += mp8859.o +obj-$(CONFIG_REGULATOR_MP886X) += mp886x.o obj-$(CONFIG_REGULATOR_MPQ7920) += mpq7920.o obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o
drivers/regulator/mp886x.c new file +230 -0
230 lines not on this page · raw message
Signature · 1 line
2.24.0
Mark Brown
maintainerApplied "regulator: add support for MP8869 regulator" to the regulator tree
The patch
regulator: add support for MP8869 regulator
has been applied to the regulator tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
From 97be82880b617fb6bc06ff19e3ddb039501b2dcf Mon Sep 17 00:00:00 2001
From: Jisheng Zhang <[email protected]>
Date: Mon, 16 Mar 2020 22:30:20 +0800
Subject: [PATCH] regulator: add support for MP8869 regulator
The MP8869 from Monolithic Power Systems is a single output DC/DC converter. The voltage can be controlled via I2C.
--- drivers/regulator/Kconfig | 7 ++ drivers/regulator/Makefile | 1 + drivers/regulator/mp886x.c | 230 +++++++++++++++++++++++++++++++++++++ 3 files changed, 238 insertions(+) create mode 100644 drivers/regulator/mp886x.c
drivers/regulator/Kconfig +7 -0
@@ -635,6 +635,13 @@ config REGULATOR_MP8859 Say M here if you want to include support for the regulator as a module. The module will be named "mp8859". +config REGULATOR_MP886X + tristate "MPS MP8869 regulator driver" + depends on I2C && (OF || COMPILE_TEST) + select REGMAP_I2C + help + This driver supports the MP8869 voltage regulator. + config REGULATOR_MPQ7920 tristate "Monolithic MPQ7920 PMIC" depends on I2C && OF
drivers/regulator/Makefile +1 -0
@@ -80,6 +80,7 @@ obj-$(CONFIG_REGULATOR_MC13XXX_CORE) += mc13xxx-regulator-core.o obj-$(CONFIG_REGULATOR_MCP16502) += mcp16502.o obj-$(CONFIG_REGULATOR_MP5416) += mp5416.o obj-$(CONFIG_REGULATOR_MP8859) += mp8859.o +obj-$(CONFIG_REGULATOR_MP886X) += mp886x.o obj-$(CONFIG_REGULATOR_MPQ7920) += mpq7920.o obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o
drivers/regulator/mp886x.c new file +230 -0
230 lines not on this page · raw message
Signature · 1 line
2.20.1
PATCH v2 3/4 dt-bindings: mp886x: Document MP8867 support
In reply to Jisheng ZhangFrom: Jisheng Zhang <[email protected]>
MP8867 is an I2C-controlled adjustable voltage regulator made by Monolithic Power Systems. The difference between MP8867 and MP8869 are:
1.If V_BOOT, the vref of MP8869 is fixed at 600mv while vref of MP8867 is determined by the I2C control.
2.For MP8867, when setting voltage, if the steps is within 5, we need to manually set the GO_BIT to 0.
--- Documentation/devicetree/bindings/regulator/mp886x.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/regulator/mp886x.txt +4 -2
@@ -1,7 +1,9 @@ -Monolithic Power Systems MP8869 voltage regulator +Monolithic Power Systems MP8867/MP8869 voltage regulator Required properties: -- compatible: "mps,mp8869"; +- compatible: Must be one of the following. + "mps,mp8867" + "mps,mp8869" - reg: I2C slave address. - enable-gpios: enable gpios. - mps,fb-voltage-divider: An array of two integers containing the resistor
Signature · 1 line
2.24.0
Mark Brown
maintainerApplied "regulator: mp886x: Document MP8867 support" to the regulator tree
The patch
regulator: mp886x: Document MP8867 support
has been applied to the regulator tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
From b11dec18e6334da2f2a11e07cf43e2a394b12c06 Mon Sep 17 00:00:00 2001
From: Jisheng Zhang <[email protected]>
Date: Mon, 16 Mar 2020 22:31:00 +0800
Subject: [PATCH] regulator: mp886x: Document MP8867 support
MP8867 is an I2C-controlled adjustable voltage regulator made by Monolithic Power Systems. The difference between MP8867 and MP8869 are:
1.If V_BOOT, the vref of MP8869 is fixed at 600mv while vref of MP8867 is determined by the I2C control.
2.For MP8867, when setting voltage, if the steps is within 5, we need to manually set the GO_BIT to 0.
--- Documentation/devicetree/bindings/regulator/mp886x.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/regulator/mp886x.txt +4 -2
@@ -1,7 +1,9 @@ -Monolithic Power Systems MP8869 voltage regulator +Monolithic Power Systems MP8867/MP8869 voltage regulator Required properties: -- compatible: "mps,mp8869"; +- compatible: Must be one of the following. + "mps,mp8867" + "mps,mp8869" - reg: I2C slave address. - enable-gpios: enable gpios. - mps,fb-voltage-divider: An array of two integers containing the resistor
Signature · 1 line
2.20.1
PATCH v2 4/4 regulator: mp886x: add MP8867 support
In reply to Jisheng ZhangFrom: Jisheng Zhang <[email protected]>
MP8867 is an I2C-controlled adjustable voltage regulator made by Monolithic Power Systems. The difference between MP8867 and MP8869 are:
1.If V_BOOT, the vref of MP8869 is fixed at 600mv while vref of MP8867 is determined by the I2C control.
2.For MP8867, when setting voltage, if the step is within 5, we need to manually set the GO BIT to 0.
--- drivers/regulator/mp886x.c | 62 +++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-)
drivers/regulator/mp886x.c +61 -1
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0 // -// MP8869 regulator driver +// MP8867/MP8869 regulator driver // // Copyright (C) 2020 Synaptics Incorporated //
@@ -119,6 +119,62 @@ static const struct regulator_ops mp8869_regulator_ops = { .get_mode = mp886x_get_mode, }; +static int mp8867_set_voltage_sel (struct regulator_dev *rdev,unsigned int sel) +{ +struct mp886x_device_info *di =rdev_get_drvdata (rdev); +int ret, delta; + + ret =mp8869_set_voltage_sel (rdev, sel); +if (ret <0 ) +return ret; + + delta = di->sel - sel; +if (abs (delta) <=5 ) + ret =regmap_update_bits (rdev->regmap,MP886X_SYSCNTLREG1 , +MP886X_GO ,0 ); + di->sel = sel; + +return ret; +} + +static int mp8867_get_voltage_sel (struct regulator_dev *rdev) +{ +struct mp886x_device_info *di =rdev_get_drvdata (rdev); +int ret, uv; +unsigned int val; +bool fbloop; + + ret =regmap_read (rdev->regmap, rdev->desc->vsel_reg, &val); +if (ret) +return ret; + + fbloop = val &MP886X_V_BOOT ; + + val &= rdev->desc->vsel_mask; + val >>=ffs (rdev->desc->vsel_mask) -1 ; + +if (fbloop) { + uv =regulator_list_voltage_linear (rdev, val); + uv =mp8869_scale (uv, di->r[0 ], di->r[1 ]); +return regulator_map_voltage_linear (rdev, uv, uv); + } + +return val; +} + +static const struct regulator_ops mp8867_regulator_ops = { + .set_voltage_sel = mp8867_set_voltage_sel, + .get_voltage_sel = mp8867_get_voltage_sel, + .set_voltage_time_sel = regulator_set_voltage_time_sel, + .map_voltage = regulator_map_voltage_linear, + .list_voltage = regulator_list_voltage_linear, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, + .set_mode = mp886x_set_mode, + .get_mode = mp886x_get_mode, +}; +static int mp886x_regulator_register (struct mp886x_device_info *di,struct regulator_config *config) {
@@ -201,6 +257,10 @@ static int mp886x_i2c_probe(struct i2c_client *client, }static const struct of_device_id mp886x_dt_ids[] = { + { + .compatible ="mps,mp8867" , + .data = &mp8867_regulator_ops + }, { .compatible ="mps,mp8869" , .data = &mp8869_regulator_ops
Signature · 1 line
2.24.0
Mark Brown
maintainerApplied "regulator: mp886x: add MP8867 support" to the regulator tree
The patch
regulator: mp886x: add MP8867 support
has been applied to the regulator tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
From 751ca3aa15be815373536eb8b3dc44910b800e9f Mon Sep 17 00:00:00 2001
From: Jisheng Zhang <[email protected]>
Date: Mon, 16 Mar 2020 22:31:27 +0800
Subject: [PATCH] regulator: mp886x: add MP8867 support
MP8867 is an I2C-controlled adjustable voltage regulator made by Monolithic Power Systems. The difference between MP8867 and MP8869 are:
1.If V_BOOT, the vref of MP8869 is fixed at 600mv while vref of MP8867 is determined by the I2C control.
2.For MP8867, when setting voltage, if the step is within 5, we need to manually set the GO BIT to 0.
--- drivers/regulator/mp886x.c | 62 +++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-)
drivers/regulator/mp886x.c +61 -1
@@ -1,6 +1,6 @@// SPDX-License-Identifier: GPL-2.0 // -// MP8869 regulator driver +// MP8867/MP8869 regulator driver // // Copyright (C) 2020 Synaptics Incorporated //
@@ -119,6 +119,62 @@ static const struct regulator_ops mp8869_regulator_ops = { .get_mode = mp886x_get_mode, }; +static int mp8867_set_voltage_sel (struct regulator_dev *rdev,unsigned int sel) +{ +struct mp886x_device_info *di =rdev_get_drvdata (rdev); +int ret, delta; + + ret =mp8869_set_voltage_sel (rdev, sel); +if (ret <0 ) +return ret; + + delta = di->sel - sel; +if (abs (delta) <=5 ) + ret =regmap_update_bits (rdev->regmap,MP886X_SYSCNTLREG1 , +MP886X_GO ,0 ); + di->sel = sel; + +return ret; +} + +static int mp8867_get_voltage_sel (struct regulator_dev *rdev) +{ +struct mp886x_device_info *di =rdev_get_drvdata (rdev); +int ret, uv; +unsigned int val; +bool fbloop; + + ret =regmap_read (rdev->regmap, rdev->desc->vsel_reg, &val); +if (ret) +return ret; + + fbloop = val &MP886X_V_BOOT ; + + val &= rdev->desc->vsel_mask; + val >>=ffs (rdev->desc->vsel_mask) -1 ; + +if (fbloop) { + uv =regulator_list_voltage_linear (rdev, val); + uv =mp8869_scale (uv, di->r[0 ], di->r[1 ]); +return regulator_map_voltage_linear (rdev, uv, uv); + } + +return val; +} + +static const struct regulator_ops mp8867_regulator_ops = { + .set_voltage_sel = mp8867_set_voltage_sel, + .get_voltage_sel = mp8867_get_voltage_sel, + .set_voltage_time_sel = regulator_set_voltage_time_sel, + .map_voltage = regulator_map_voltage_linear, + .list_voltage = regulator_list_voltage_linear, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .is_enabled = regulator_is_enabled_regmap, + .set_mode = mp886x_set_mode, + .get_mode = mp886x_get_mode, +}; +static int mp886x_regulator_register (struct mp886x_device_info *di,struct regulator_config *config) {
@@ -201,6 +257,10 @@ static int mp886x_i2c_probe(struct i2c_client *client, }static const struct of_device_id mp886x_dt_ids[] = { + { + .compatible ="mps,mp8867" , + .data = &mp8867_regulator_ops + }, { .compatible ="mps,mp8869" , .data = &mp8869_regulator_ops
Signature · 1 line
2.20.1