* [PATCH v2 0/5] BCM59056 PMU regulator support @ 2014-02-18 23:17 Matt Porter 2014-02-18 23:17 ` [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding Matt Porter ` (4 more replies) 0 siblings, 5 replies; 14+ messages in thread From: Matt Porter @ 2014-02-18 23:17 UTC (permalink / raw) To: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Mark Brown, Christian Daudt Cc: Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List The BCM59056 is a multi-function power management unit used with the BCM281xx family of SoCs. This series adds an MFD and voltage regulator driver to support the BCM59056. The bcm28155-ap DT support is updated to enable use of regulators on the otg and sdhci peripherals. Changes since v1: - renamed to bcm590xx to accomodate future family parts - remove use of subsys_initcall - fix BCM590XX_MAX_REGISTER value - remove unused chip id in mfd of/i2c matching - switch to of_platform_populate() in mfd - update binding to single document with regulators as optional properties in the regulator subdevice IP description - remove unused regulator get/set mode ops - remove unneeded regulator NULL constraint check - regulators property is optional, allow the driver to probe when it is missing - move of_node presence check into bcm590xx_parse_dt_reg_data() Matt Porter (5): mfd: add bcm590xx pmu DT binding mfd: add bcm590xx pmu driver regulator: add bcm590xx regulator driver ARM: configs: bcm_defconfig: enable bcm590xx regulator support ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap Documentation/devicetree/bindings/mfd/bcm590xx.txt | 49 +++ arch/arm/boot/dts/bcm28155-ap.dts | 43 ++- arch/arm/boot/dts/bcm59056.dtsi | 162 ++++++++ arch/arm/configs/bcm_defconfig | 7 + drivers/mfd/Kconfig | 8 + drivers/mfd/Makefile | 1 + drivers/mfd/bcm590xx.c | 86 +++++ drivers/regulator/Kconfig | 8 + drivers/regulator/Makefile | 1 + drivers/regulator/bcm590xx-regulator.c | 419 +++++++++++++++++++++ include/linux/mfd/bcm590xx.h | 31 ++ 11 files changed, 814 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/mfd/bcm590xx.txt create mode 100644 arch/arm/boot/dts/bcm59056.dtsi create mode 100644 drivers/mfd/bcm590xx.c create mode 100644 drivers/regulator/bcm590xx-regulator.c create mode 100644 include/linux/mfd/bcm590xx.h -- 1.8.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding 2014-02-18 23:17 [PATCH v2 0/5] BCM59056 PMU regulator support Matt Porter @ 2014-02-18 23:17 ` Matt Porter 2014-02-19 4:47 ` Mark Brown 2014-02-18 23:17 ` [PATCH v2 2/5] mfd: add bcm590xx pmu driver Matt Porter ` (3 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: Matt Porter @ 2014-02-18 23:17 UTC (permalink / raw) To: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Mark Brown, Christian Daudt Cc: Devicetree List, Linux Kernel Mailing List, Linux ARM Kernel List Add a DT binding for the BCM590xx PMUs. The binding inherits from the generic regulator bindings. Signed-off-by: Matt Porter <mporter@linaro.org> Reviewed-by: Tim Kryger <tim.kryger@linaro.org> Reviewed-by: Markus Mayer <markus.mayer@linaro.org> --- Documentation/devicetree/bindings/mfd/bcm590xx.txt | 49 ++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/bcm590xx.txt diff --git a/Documentation/devicetree/bindings/mfd/bcm590xx.txt b/Documentation/devicetree/bindings/mfd/bcm590xx.txt new file mode 100644 index 0000000..a4a8039 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/bcm590xx.txt @@ -0,0 +1,49 @@ +------------------------------- +BCM590xx Power Management Units +------------------------------- + +Required properties: +- compatible: "brcm,bcm59056" +- reg: I2C slave address +- interrupts: interrupt for the PMU. Generic interrupt client node bindings + are described in interrupt-controller/interrupts.txt + +----------------------- +BCM590xx PMU Regulators +----------------------- + +Required properties: +- compatible: "brcm,bcm59056-regs" + +Optional properties: +- regulators: This is the list of child nodes that specify the regulator + initialization data for defined regulators. Generic regulator bindings + are described in regulator/regulator.txt. + + The valid regulator-compatible values for BCM59056 are: + rfldo, camldo1, camldo2, simldo1, simlso2, sdldo, sdxldo, + mmcldo1, mmcldo2, audldo, micldo, usbldo, vibldo, + csr, iosr1, iosr2, msr, sdsr1, sdsr2, vsr + +Example: + pmu: bcm59056@8 { + compatible = "brcm,bcm59056"; + reg = <0x08>; + interrupts = <GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>; + regs { + compatible = "brcm,bcm59056-regs"; + regulators { + #address-cells = <1>; + #size-cells = <0>; + + rfldo_reg: regulator@0 { + reg = <0>; + regulator-compatible = "rfldo"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + ... + }; + }; + }; -- 1.8.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding 2014-02-18 23:17 ` [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding Matt Porter @ 2014-02-19 4:47 ` Mark Brown 2014-03-11 15:49 ` Matt Porter 0 siblings, 1 reply; 14+ messages in thread From: Mark Brown @ 2014-02-19 4:47 UTC (permalink / raw) To: Matt Porter Cc: Mark Rutland, Devicetree List, Samuel Ortiz, Pawel Moll, Ian Campbell, Christian Daudt, Liam Girdwood, Linux Kernel Mailing List, Rob Herring, Kumar Gala, Lee Jones, Linux ARM Kernel List [-- Attachment #1.1: Type: text/plain, Size: 198 bytes --] On Tue, Feb 18, 2014 at 06:17:08PM -0500, Matt Porter wrote: > + > + rfldo_reg: regulator@0 { > + reg = <0>; What do these reg values mean, they don't seem to be documented in the binding? [-- Attachment #1.2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] [-- Attachment #2: Type: text/plain, Size: 176 bytes --] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding 2014-02-19 4:47 ` Mark Brown @ 2014-03-11 15:49 ` Matt Porter 0 siblings, 0 replies; 14+ messages in thread From: Matt Porter @ 2014-03-11 15:49 UTC (permalink / raw) To: Mark Brown Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List [-- Attachment #1: Type: text/plain, Size: 402 bytes --] On Wed, Feb 19, 2014 at 01:47:26PM +0900, Mark Brown wrote: > On Tue, Feb 18, 2014 at 06:17:08PM -0500, Matt Porter wrote: > > > + > > + rfldo_reg: regulator@0 { > > + reg = <0>; > > What do these reg values mean, they don't seem to be documented in the > binding? Dropped this and the deprecated regulator-compatible property in v3 in favor of using node name matching. -Matt [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 2/5] mfd: add bcm590xx pmu driver 2014-02-18 23:17 [PATCH v2 0/5] BCM59056 PMU regulator support Matt Porter 2014-02-18 23:17 ` [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding Matt Porter @ 2014-02-18 23:17 ` Matt Porter 2014-02-19 4:46 ` Mark Brown 2014-02-18 23:17 ` [PATCH v2 3/5] regulator: add bcm590xx regulator driver Matt Porter ` (2 subsequent siblings) 4 siblings, 1 reply; 14+ messages in thread From: Matt Porter @ 2014-02-18 23:17 UTC (permalink / raw) To: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Mark Brown, Christian Daudt Cc: Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List Add a driver for the BCM590xx PMU multi-function devices. The driver initially supports regmap initialization and instantiation of the voltage regulator device function of the PMU. Signed-off-by: Matt Porter <mporter@linaro.org> Reviewed-by: Tim Kryger <tim.kryger@linaro.org> Reviewed-by: Markus Mayer <markus.mayer@linaro.org> --- drivers/mfd/Kconfig | 8 +++++ drivers/mfd/Makefile | 1 + drivers/mfd/bcm590xx.c | 86 ++++++++++++++++++++++++++++++++++++++++++++ include/linux/mfd/bcm590xx.h | 31 ++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 drivers/mfd/bcm590xx.c create mode 100644 include/linux/mfd/bcm590xx.h diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig index 49bb445..eda60de 100644 --- a/drivers/mfd/Kconfig +++ b/drivers/mfd/Kconfig @@ -59,6 +59,14 @@ config MFD_AAT2870_CORE additional drivers must be enabled in order to use the functionality of the device. +config MFD_BCM590XX + bool "Broadcom BCM590xx PMUs" + select MFD_CORE + select REGMAP_I2C + depends on I2C=y + help + Support for the BCM590xx PMUs from Broadcom + config MFD_CROS_EC tristate "ChromeOS Embedded Controller" select MFD_CORE diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile index 5aea5ef..4c342bf 100644 --- a/drivers/mfd/Makefile +++ b/drivers/mfd/Makefile @@ -8,6 +8,7 @@ obj-$(CONFIG_MFD_88PM800) += 88pm800.o 88pm80x.o obj-$(CONFIG_MFD_88PM805) += 88pm805.o 88pm80x.o obj-$(CONFIG_MFD_SM501) += sm501.o obj-$(CONFIG_MFD_ASIC3) += asic3.o tmio_core.o +obj-$(CONFIG_MFD_BCM590XX) += bcm590xx.o obj-$(CONFIG_MFD_CROS_EC) += cros_ec.o obj-$(CONFIG_MFD_CROS_EC_I2C) += cros_ec_i2c.o obj-$(CONFIG_MFD_CROS_EC_SPI) += cros_ec_spi.o diff --git a/drivers/mfd/bcm590xx.c b/drivers/mfd/bcm590xx.c new file mode 100644 index 0000000..06f6387 --- /dev/null +++ b/drivers/mfd/bcm590xx.c @@ -0,0 +1,86 @@ +/* + * Broadcom BCM590xx PMU + * + * Copyright 2014 Linaro Limited + * Author: Matt Porter <mporter@linaro.org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include <linux/err.h> +#include <linux/i2c.h> +#include <linux/init.h> +#include <linux/mfd/bcm590xx.h> +#include <linux/mfd/core.h> +#include <linux/module.h> +#include <linux/moduleparam.h> +#include <linux/of.h> +#include <linux/of_device.h> +#include <linux/regmap.h> +#include <linux/slab.h> + +static const struct regmap_config bcm590xx_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .max_register = BCM590XX_MAX_REGISTER, + .cache_type = REGCACHE_RBTREE, +}; + +static int bcm590xx_i2c_probe(struct i2c_client *i2c, + const struct i2c_device_id *id) +{ + struct bcm590xx *bcm590xx; + int ret = 0; + + bcm590xx = devm_kzalloc(&i2c->dev, sizeof(*bcm590xx), GFP_KERNEL); + if (!bcm590xx) + return -ENOMEM; + + i2c_set_clientdata(i2c, bcm590xx); + bcm590xx->dev = &i2c->dev; + bcm590xx->i2c_client = i2c; + + bcm590xx->regmap = devm_regmap_init_i2c(i2c, &bcm590xx_regmap_config); + if (IS_ERR(bcm590xx->regmap)) { + ret = PTR_ERR(bcm590xx->regmap); + dev_err(&i2c->dev, "regmap initialization failed: %d\n", ret); + return ret; + } + + ret = of_platform_populate(i2c->dev.of_node, NULL, NULL, &i2c->dev); + if (ret < 0) + dev_err(&i2c->dev, "of_platform_populate() failed: %d\n", ret); + + return ret; +} + +static const struct of_device_id bcm590xx_of_match[] = { + { .compatible = "brcm,bcm59056" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, bcm590xx_of_match); + +static const struct i2c_device_id bcm590xx_i2c_id[] = { + { "bcm59056" }, + { } +}; +MODULE_DEVICE_TABLE(i2c, bcm590xx_i2c_id); + +static struct i2c_driver bcm590xx_i2c_driver = { + .driver = { + .name = "bcm590xx", + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(bcm590xx_of_match), + }, + .probe = bcm590xx_i2c_probe, + .id_table = bcm590xx_i2c_id, +}; +module_i2c_driver(bcm590xx_i2c_driver); + +MODULE_AUTHOR("Matt Porter <mporter@linaro.org>"); +MODULE_DESCRIPTION("BCM590xx multi-function driver"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:bcm590xx"); diff --git a/include/linux/mfd/bcm590xx.h b/include/linux/mfd/bcm590xx.h new file mode 100644 index 0000000..434df2d --- /dev/null +++ b/include/linux/mfd/bcm590xx.h @@ -0,0 +1,31 @@ +/* + * Broadcom BCM590xx PMU + * + * Copyright 2014 Linaro Limited + * Author: Matt Porter <mporter@linaro.org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +#ifndef __LINUX_MFD_BCM590XX_H +#define __LINUX_MFD_BCM590XX_H + +#include <linux/device.h> +#include <linux/i2c.h> +#include <linux/regmap.h> + +/* max register address */ +#define BCM590XX_MAX_REGISTER 0xe7 + +struct bcm590xx { + struct device *dev; + struct i2c_client *i2c_client; + struct regmap *regmap; + unsigned int id; +}; + +#endif /* __LINUX_MFD_BCM590XX_H */ -- 1.8.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v2 2/5] mfd: add bcm590xx pmu driver 2014-02-18 23:17 ` [PATCH v2 2/5] mfd: add bcm590xx pmu driver Matt Porter @ 2014-02-19 4:46 ` Mark Brown [not found] ` <20140219044605.GB2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Mark Brown @ 2014-02-19 4:46 UTC (permalink / raw) To: Matt Porter Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List [-- Attachment #1: Type: text/plain, Size: 281 bytes --] On Tue, Feb 18, 2014 at 06:17:09PM -0500, Matt Porter wrote: > +config MFD_BCM590XX > + bool "Broadcom BCM590xx PMUs" > + select MFD_CORE > + select REGMAP_I2C > + depends on I2C=y > + help > + Support for the BCM590xx PMUs from Broadcom > + Why does this need to be built in? [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20140219044605.GB2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>]
* Re: [PATCH v2 2/5] mfd: add bcm590xx pmu driver [not found] ` <20140219044605.GB2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> @ 2014-03-11 15:50 ` Matt Porter 0 siblings, 0 replies; 14+ messages in thread From: Matt Porter @ 2014-03-11 15:50 UTC (permalink / raw) To: Mark Brown Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List [-- Attachment #1: Type: text/plain, Size: 437 bytes --] On Wed, Feb 19, 2014 at 01:46:05PM +0900, Mark Brown wrote: > On Tue, Feb 18, 2014 at 06:17:09PM -0500, Matt Porter wrote: > > > +config MFD_BCM590XX > > + bool "Broadcom BCM590xx PMUs" > > + select MFD_CORE > > + select REGMAP_I2C > > + depends on I2C=y > > + help > > + Support for the BCM590xx PMUs from Broadcom > > + > > Why does this need to be built in? It doesn't. Just an oversight now fixed in v3. -Matt [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 3/5] regulator: add bcm590xx regulator driver 2014-02-18 23:17 [PATCH v2 0/5] BCM59056 PMU regulator support Matt Porter 2014-02-18 23:17 ` [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding Matt Porter 2014-02-18 23:17 ` [PATCH v2 2/5] mfd: add bcm590xx pmu driver Matt Porter @ 2014-02-18 23:17 ` Matt Porter [not found] ` <1392765432-9111-4-git-send-email-mporter-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-02-18 23:17 ` [PATCH v2 4/5] ARM: configs: bcm_defconfig: enable bcm590xx regulator support Matt Porter 2014-02-18 23:17 ` [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap Matt Porter 4 siblings, 1 reply; 14+ messages in thread From: Matt Porter @ 2014-02-18 23:17 UTC (permalink / raw) To: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Mark Brown, Christian Daudt Cc: Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List Add a regulator driver for the BCM590xx PMU voltage regulators. The driver supports LDOs and DCDCs in normal mode only. There is no support for low-power mode or power sequencing. Signed-off-by: Matt Porter <mporter@linaro.org> Reviewed-by: Tim Kryger <tim.kryger@linaro.org> Reviewed-by: Markus Mayer <markus.mayer@linaro.org> --- drivers/regulator/Kconfig | 8 + drivers/regulator/Makefile | 1 + drivers/regulator/bcm590xx-regulator.c | 419 +++++++++++++++++++++++++++++++++ 3 files changed, 428 insertions(+) create mode 100644 drivers/regulator/bcm590xx-regulator.c diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig index 6a79328..1169a42 100644 --- a/drivers/regulator/Kconfig +++ b/drivers/regulator/Kconfig @@ -139,6 +139,14 @@ config REGULATOR_AS3722 AS3722 PMIC. This will enable support for all the software controllable DCDC/LDO regulators. +config REGULATOR_BCM590XX + tristate "Broadcom BCM590xx PMU Regulators" + depends on MFD_BCM590XX + help + This driver provides support for the voltage regulators on the + BCM590xx PMUs. This will enable support for the software + controllable LDO/Switching regulators. + config REGULATOR_DA903X tristate "Dialog Semiconductor DA9030/DA9034 regulators" depends on PMIC_DA903X diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile index 979f9dd..e1ab514 100644 --- a/drivers/regulator/Makefile +++ b/drivers/regulator/Makefile @@ -20,6 +20,7 @@ obj-$(CONFIG_REGULATOR_ANATOP) += anatop-regulator.o obj-$(CONFIG_REGULATOR_ARIZONA) += arizona-micsupp.o arizona-ldo1.o obj-$(CONFIG_REGULATOR_AS3711) += as3711-regulator.o obj-$(CONFIG_REGULATOR_AS3722) += as3722-regulator.o +obj-$(CONFIG_REGULATOR_BCM590XX) += bcm590xx-regulator.o obj-$(CONFIG_REGULATOR_DA903X) += da903x.o obj-$(CONFIG_REGULATOR_DA9052) += da9052-regulator.o obj-$(CONFIG_REGULATOR_DA9055) += da9055-regulator.o diff --git a/drivers/regulator/bcm590xx-regulator.c b/drivers/regulator/bcm590xx-regulator.c new file mode 100644 index 0000000..58fcc3a --- /dev/null +++ b/drivers/regulator/bcm590xx-regulator.c @@ -0,0 +1,419 @@ +/* + * Broadcom BCM590xx regulator driver + * + * Copyright 2014 Linaro Limited + * Author: Matt Porter <mporter@linaro.org> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include <linux/err.h> +#include <linux/init.h> +#include <linux/kernel.h> +#include <linux/mfd/bcm590xx.h> +#include <linux/module.h> +#include <linux/of.h> +#include <linux/platform_device.h> +#include <linux/regulator/driver.h> +#include <linux/regulator/machine.h> +#include <linux/regulator/of_regulator.h> +#include <linux/slab.h> + +/* Register defs */ +#define BCM590XX_RFLDOPMCTRL1 0x60 +#define BCM590XX_IOSR1PMCTRL1 0x7a +#define BCM590XX_IOSR2PMCTRL1 0x7c +#define BCM590XX_CSRPMCTRL1 0x7e +#define BCM590XX_SDSR1PMCTRL1 0x82 +#define BCM590XX_SDSR2PMCTRL1 0x86 +#define BCM590XX_MSRPMCTRL1 0x8a +#define BCM590XX_VSRPMCTRL1 0x8e +#define BCM590XX_REG_ENABLE BIT(7) + +#define BCM590XX_RFLDOCTRL 0x96 +#define BCM590XX_CSRVOUT1 0xc0 +#define BCM590XX_LDO_VSEL_MASK GENMASK(5, 3) +#define BCM590XX_SR_VSEL_MASK GENMASK(5, 0) + +/* LDO regulator IDs */ +#define BCM590XX_REG_RFLDO 0 +#define BCM590XX_REG_CAMLDO1 1 +#define BCM590XX_REG_CAMLDO2 2 +#define BCM590XX_REG_SIMLDO1 3 +#define BCM590XX_REG_SIMLDO2 4 +#define BCM590XX_REG_SDLDO 5 +#define BCM590XX_REG_SDXLDO 6 +#define BCM590XX_REG_MMCLDO1 7 +#define BCM590XX_REG_MMCLDO2 8 +#define BCM590XX_REG_AUDLDO 9 +#define BCM590XX_REG_MICLDO 10 +#define BCM590XX_REG_USBLDO 11 +#define BCM590XX_REG_VIBLDO 12 + +/* DCDC regulator IDs */ +#define BCM590XX_REG_CSR 13 +#define BCM590XX_REG_IOSR1 14 +#define BCM590XX_REG_IOSR2 15 +#define BCM590XX_REG_MSR 16 +#define BCM590XX_REG_SDSR1 17 +#define BCM590XX_REG_SDSR2 18 +#define BCM590XX_REG_VSR 19 + +#define BCM590XX_NUM_REGS 20 + +#define BCM590XX_REG_IS_LDO(n) (n < BCM590XX_REG_CSR) + +struct bcm590xx_board { + struct regulator_init_data *bcm590xx_pmu_init_data[BCM590XX_NUM_REGS]; +}; + +/* LDO group A: supported voltages in microvolts */ +static const unsigned int ldo_a_table[] = { + 1200000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* LDO group C: supported voltages in microvolts */ +static const unsigned int ldo_c_table[] = { + 3100000, 1800000, 2500000, 2700000, 2800000, + 2900000, 3000000, 3300000, +}; + +/* DCDC group CSR: supported voltages in microvolts */ +static const struct regulator_linear_range dcdc_csr_ranges[] = { + REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), + REGULATOR_LINEAR_RANGE(1360000, 51, 55, 20000), + REGULATOR_LINEAR_RANGE(900000, 56, 63, 0), +}; + +/* DCDC group IOSR1: supported voltages in microvolts */ +static const struct regulator_linear_range dcdc_iosr1_ranges[] = { + REGULATOR_LINEAR_RANGE(860000, 2, 51, 10000), + REGULATOR_LINEAR_RANGE(1500000, 52, 52, 0), + REGULATOR_LINEAR_RANGE(1800000, 53, 53, 0), + REGULATOR_LINEAR_RANGE(900000, 54, 63, 0), +}; + +/* DCDC group SDSR1: supported voltages in microvolts */ +static const struct regulator_linear_range dcdc_sdsr1_ranges[] = { + REGULATOR_LINEAR_RANGE(860000, 2, 50, 10000), + REGULATOR_LINEAR_RANGE(1340000, 51, 51, 0), + REGULATOR_LINEAR_RANGE(900000, 52, 63, 0), +}; + +struct bcm590xx_info { + const char *name; + const char *vin_name; + u8 n_voltages; + const unsigned int *volt_table; + u8 n_linear_ranges; + const struct regulator_linear_range *linear_ranges; +}; + +#define BCM590XX_REG_TABLE(_name, _table) \ + { \ + .name = #_name, \ + .n_voltages = ARRAY_SIZE(_table), \ + .volt_table = _table, \ + } + +#define BCM590XX_REG_RANGES(_name, _ranges) \ + { \ + .name = #_name, \ + .n_linear_ranges = ARRAY_SIZE(_ranges), \ + .linear_ranges = _ranges, \ + } + +static struct bcm590xx_info bcm590xx_regs[] = { + BCM590XX_REG_TABLE(rfldo, ldo_a_table), + BCM590XX_REG_TABLE(camldo1, ldo_c_table), + BCM590XX_REG_TABLE(camldo2, ldo_c_table), + BCM590XX_REG_TABLE(simldo1, ldo_a_table), + BCM590XX_REG_TABLE(simldo2, ldo_a_table), + BCM590XX_REG_TABLE(sdldo, ldo_c_table), + BCM590XX_REG_TABLE(sdxldo, ldo_a_table), + BCM590XX_REG_TABLE(mmcldo1, ldo_a_table), + BCM590XX_REG_TABLE(mmcldo2, ldo_a_table), + BCM590XX_REG_TABLE(audldo, ldo_a_table), + BCM590XX_REG_TABLE(micldo, ldo_a_table), + BCM590XX_REG_TABLE(usbldo, ldo_a_table), + BCM590XX_REG_TABLE(vibldo, ldo_c_table), + BCM590XX_REG_RANGES(csr, dcdc_csr_ranges), + BCM590XX_REG_RANGES(iosr1, dcdc_iosr1_ranges), + BCM590XX_REG_RANGES(iosr2, dcdc_iosr1_ranges), + BCM590XX_REG_RANGES(msr, dcdc_iosr1_ranges), + BCM590XX_REG_RANGES(sdsr1, dcdc_sdsr1_ranges), + BCM590XX_REG_RANGES(sdsr2, dcdc_iosr1_ranges), + BCM590XX_REG_RANGES(vsr, dcdc_iosr1_ranges), +}; + +struct bcm590xx_reg { + struct regulator_desc *desc; + struct bcm590xx *mfd; + struct regulator_dev **rdev; + struct bcm590xx_info **info; +}; + +static int bcm590xx_get_vsel_register(int id) +{ + if (BCM590XX_REG_IS_LDO(id)) + return BCM590XX_RFLDOCTRL + id; + else + return BCM590XX_CSRVOUT1 + (id - BCM590XX_REG_CSR) * 3; +} + +static int bcm590xx_get_enable_register(int id) +{ + int reg = 0; + + if (BCM590XX_REG_IS_LDO(id)) + reg = BCM590XX_RFLDOPMCTRL1 + id * 2; + else + switch (id) { + case BCM590XX_REG_CSR: + reg = BCM590XX_CSRPMCTRL1; + break; + case BCM590XX_REG_IOSR1: + reg = BCM590XX_IOSR1PMCTRL1; + break; + case BCM590XX_REG_IOSR2: + reg = BCM590XX_IOSR2PMCTRL1; + break; + case BCM590XX_REG_MSR: + reg = BCM590XX_MSRPMCTRL1; + break; + case BCM590XX_REG_SDSR1: + reg = BCM590XX_SDSR1PMCTRL1; + break; + case BCM590XX_REG_SDSR2: + reg = BCM590XX_SDSR2PMCTRL1; + break; + }; + + return reg; +} + +static struct regulator_ops bcm590xx_ops_ldo = { + .is_enabled = regulator_is_enabled_regmap, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_voltage_sel = regulator_set_voltage_sel_regmap, + .list_voltage = regulator_list_voltage_table, + .map_voltage = regulator_map_voltage_iterate, +}; + +static struct regulator_ops bcm590xx_ops_dcdc = { + .is_enabled = regulator_is_enabled_regmap, + .enable = regulator_enable_regmap, + .disable = regulator_disable_regmap, + .get_voltage_sel = regulator_get_voltage_sel_regmap, + .set_voltage_sel = regulator_set_voltage_sel_regmap, + .list_voltage = regulator_list_voltage_linear_range, + .map_voltage = regulator_map_voltage_linear_range, +}; + +#define BCM590XX_MATCH(_name, _id) \ + { \ + .name = #_name, \ + .driver_data = (void *)&bcm590xx_regs[BCM590XX_REG_##_id], \ + } + +static struct of_regulator_match bcm590xx_matches[] = { + BCM590XX_MATCH(rfldo, RFLDO), + BCM590XX_MATCH(camldo1, CAMLDO1), + BCM590XX_MATCH(camldo2, CAMLDO2), + BCM590XX_MATCH(simldo1, SIMLDO1), + BCM590XX_MATCH(simldo2, SIMLDO2), + BCM590XX_MATCH(sdldo, SDLDO), + BCM590XX_MATCH(sdxldo, SDXLDO), + BCM590XX_MATCH(mmcldo1, MMCLDO1), + BCM590XX_MATCH(mmcldo2, MMCLDO2), + BCM590XX_MATCH(audldo, AUDLDO), + BCM590XX_MATCH(micldo, MICLDO), + BCM590XX_MATCH(usbldo, USBLDO), + BCM590XX_MATCH(vibldo, VIBLDO), + BCM590XX_MATCH(csr, CSR), + BCM590XX_MATCH(iosr1, IOSR1), + BCM590XX_MATCH(iosr2, IOSR2), + BCM590XX_MATCH(msr, MSR), + BCM590XX_MATCH(sdsr1, SDSR1), + BCM590XX_MATCH(sdsr2, SDSR2), + BCM590XX_MATCH(vsr, VSR), +}; + +static struct bcm590xx_board *bcm590xx_parse_dt_reg_data( + struct platform_device *pdev, + struct of_regulator_match **bcm590xx_reg_matches) +{ + struct bcm590xx_board *data; + struct device_node *np = pdev->dev.of_node; + struct device_node *regulators; + struct of_regulator_match *matches = bcm590xx_matches; + int count = ARRAY_SIZE(bcm590xx_matches); + int idx = 0; + int ret; + + if (!np) { + dev_err(&pdev->dev, "of node not found\n"); + return NULL; + } + + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); + if (!data) { + dev_err(&pdev->dev, "failed to allocate regulator board data\n"); + return NULL; + } + + np = of_node_get(np); + regulators = of_get_child_by_name(np, "regulators"); + if (!regulators) { + dev_warn(&pdev->dev, "regulator node not found\n"); + return NULL; + } + + ret = of_regulator_match(&pdev->dev, regulators, matches, count); + of_node_put(regulators); + if (ret < 0) { + dev_err(&pdev->dev, "Error parsing regulator init data: %d\n", + ret); + return NULL; + } + + *bcm590xx_reg_matches = matches; + + for (idx = 0; idx < count; idx++) { + if (!matches[idx].init_data || !matches[idx].of_node) + continue; + + data->bcm590xx_pmu_init_data[idx] = matches[idx].init_data; + } + + return data; +} + +static int bcm590xx_probe(struct platform_device *pdev) +{ + struct bcm590xx *bcm590xx = dev_get_drvdata(pdev->dev.parent); + struct bcm590xx_board *pmu_data = NULL; + struct bcm590xx_reg *pmu; + struct regulator_config config = { }; + struct bcm590xx_info *info; + struct regulator_init_data *reg_data; + struct regulator_dev *rdev; + struct of_regulator_match *bcm590xx_reg_matches = NULL; + int i; + + pmu_data = bcm590xx_parse_dt_reg_data(pdev, + &bcm590xx_reg_matches); + + pmu = devm_kzalloc(&pdev->dev, sizeof(*pmu), GFP_KERNEL); + if (!pmu) { + dev_err(&pdev->dev, "Memory allocation failed for pmu\n"); + return -ENOMEM; + } + + pmu->mfd = bcm590xx; + + platform_set_drvdata(pdev, pmu); + + pmu->desc = devm_kzalloc(&pdev->dev, BCM590XX_NUM_REGS * + sizeof(struct regulator_desc), GFP_KERNEL); + if (!pmu->desc) { + dev_err(&pdev->dev, "Memory alloc fails for desc\n"); + return -ENOMEM; + } + + pmu->info = devm_kzalloc(&pdev->dev, BCM590XX_NUM_REGS * + sizeof(struct bcm590xx_info *), GFP_KERNEL); + if (!pmu->info) { + dev_err(&pdev->dev, "Memory alloc fails for info\n"); + return -ENOMEM; + } + + pmu->rdev = devm_kzalloc(&pdev->dev, BCM590XX_NUM_REGS * + sizeof(struct regulator_dev *), GFP_KERNEL); + if (!pmu->rdev) { + dev_err(&pdev->dev, "Memory alloc fails for rdev\n"); + return -ENOMEM; + } + + info = bcm590xx_regs; + + for (i = 0; i < BCM590XX_NUM_REGS; i++, info++) { + if (pmu_data) + reg_data = pmu_data->bcm590xx_pmu_init_data[i]; + else + reg_data = NULL; + + /* Register the regulators */ + pmu->info[i] = info; + + pmu->desc[i].name = info->name; + pmu->desc[i].supply_name = info->vin_name; + pmu->desc[i].id = i; + pmu->desc[i].volt_table = info->volt_table; + pmu->desc[i].n_voltages = info->n_voltages; + pmu->desc[i].linear_ranges = info->linear_ranges; + pmu->desc[i].n_linear_ranges = info->n_linear_ranges; + + if (BCM590XX_REG_IS_LDO(i)) { + pmu->desc[i].ops = &bcm590xx_ops_ldo; + pmu->desc[i].vsel_mask = BCM590XX_LDO_VSEL_MASK; + } else { + pmu->desc[i].ops = &bcm590xx_ops_dcdc; + pmu->desc[i].vsel_mask = BCM590XX_SR_VSEL_MASK; + } + + pmu->desc[i].vsel_reg = bcm590xx_get_vsel_register(i); + pmu->desc[i].enable_is_inverted = true; + pmu->desc[i].enable_mask = BCM590XX_REG_ENABLE; + pmu->desc[i].enable_reg = bcm590xx_get_enable_register(i); + pmu->desc[i].type = REGULATOR_VOLTAGE; + pmu->desc[i].owner = THIS_MODULE; + + config.dev = bcm590xx->dev; + config.init_data = reg_data; + config.driver_data = pmu; + config.regmap = bcm590xx->regmap; + + if (bcm590xx_reg_matches) + config.of_node = bcm590xx_reg_matches[i].of_node; + + rdev = devm_regulator_register(&pdev->dev, &pmu->desc[i], + &config); + if (IS_ERR(rdev)) { + dev_err(bcm590xx->dev, + "failed to register %s regulator\n", + pdev->name); + return PTR_ERR(rdev); + } + + pmu->rdev[i] = rdev; + } + + return 0; +} + +static struct of_device_id bcm590xx_of_match[] = { + { .compatible = "brcm,bcm59056-regs", }, + { } +}; + +static struct platform_driver bcm590xx_regulator_driver = { + .driver = { + .name = "bcm590xx-regs", + .of_match_table = bcm590xx_of_match, + .owner = THIS_MODULE, + }, + .probe = bcm590xx_probe, +}; +module_platform_driver(bcm590xx_regulator_driver); + +MODULE_AUTHOR("Matt Porter <mporter@linaro.org>"); +MODULE_DESCRIPTION("BCM590xx voltage regulator driver"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:bcm590xx-regulator"); -- 1.8.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
[parent not found: <1392765432-9111-4-git-send-email-mporter-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>]
* Re: [PATCH v2 3/5] regulator: add bcm590xx regulator driver [not found] ` <1392765432-9111-4-git-send-email-mporter-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> @ 2014-02-19 4:52 ` Mark Brown 2014-03-11 15:47 ` Matt Porter 0 siblings, 1 reply; 14+ messages in thread From: Mark Brown @ 2014-02-19 4:52 UTC (permalink / raw) To: Matt Porter Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List [-- Attachment #1: Type: text/plain, Size: 837 bytes --] On Tue, Feb 18, 2014 at 06:17:10PM -0500, Matt Porter wrote: > +static struct of_device_id bcm590xx_of_match[] = { > + { .compatible = "brcm,bcm59056-regs", }, > + { } > +}; This looks pretty much OK however I am in general suspicious of MFDs that have subdevices like this in the DT - it doesn't seem like this is a reusable device which can appear anywhere else so you're pretty much just representing the way that Linux splits things up here rather than a reusable IP that can reasonably have a separate binding. If you had a binding which did something like enumerate the individual IP blocks as individual devices that'd be more interesting, I could see for example that a different PMIC might have a different set of register compatible regulator IPs laid out. It looks like that might be doable, but it's in no way essential. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v2 3/5] regulator: add bcm590xx regulator driver 2014-02-19 4:52 ` Mark Brown @ 2014-03-11 15:47 ` Matt Porter 0 siblings, 0 replies; 14+ messages in thread From: Matt Porter @ 2014-03-11 15:47 UTC (permalink / raw) To: Mark Brown Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List [-- Attachment #1: Type: text/plain, Size: 1107 bytes --] On Wed, Feb 19, 2014 at 01:52:32PM +0900, Mark Brown wrote: > On Tue, Feb 18, 2014 at 06:17:10PM -0500, Matt Porter wrote: > > > +static struct of_device_id bcm590xx_of_match[] = { > > + { .compatible = "brcm,bcm59056-regs", }, > > + { } > > +}; > > This looks pretty much OK however I am in general suspicious of MFDs > that have subdevices like this in the DT - it doesn't seem like this is > a reusable device which can appear anywhere else so you're pretty much > just representing the way that Linux splits things up here rather than a > reusable IP that can reasonably have a separate binding. > > If you had a binding which did something like enumerate the individual > IP blocks as individual devices that'd be more interesting, I could see > for example that a different PMIC might have a different set of register > compatible regulator IPs laid out. It looks like that might be doable, > but it's in no way essential. Ok I dropped this for v3 in favor of using mfd_add_device() and having the regulator driver reference the of_node from the parent device. -Matt [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v2 4/5] ARM: configs: bcm_defconfig: enable bcm590xx regulator support 2014-02-18 23:17 [PATCH v2 0/5] BCM59056 PMU regulator support Matt Porter ` (2 preceding siblings ...) 2014-02-18 23:17 ` [PATCH v2 3/5] regulator: add bcm590xx regulator driver Matt Porter @ 2014-02-18 23:17 ` Matt Porter 2014-02-18 23:17 ` [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap Matt Porter 4 siblings, 0 replies; 14+ messages in thread From: Matt Porter @ 2014-02-18 23:17 UTC (permalink / raw) To: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Mark Brown, Christian Daudt Cc: Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List, Tim Kryger Enable BCM590xx MFD and regulator drivers to manage voltage regulators on BCM281xx platforms. Signed-off-by: Tim Kryger <tim.kryger@linaro.org> Signed-off-by: Matt Porter <mporter@linaro.org> Reviewed-by: Markus Mayer <markus.mayer@linaro.org> --- arch/arm/configs/bcm_defconfig | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/arm/configs/bcm_defconfig b/arch/arm/configs/bcm_defconfig index 2519d6d..0100464 100644 --- a/arch/arm/configs/bcm_defconfig +++ b/arch/arm/configs/bcm_defconfig @@ -79,6 +79,13 @@ CONFIG_HW_RANDOM=y CONFIG_I2C=y CONFIG_I2C_CHARDEV=y # CONFIG_HWMON is not set +CONFIG_MFD_BCM590XX=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_VIRTUAL_CONSUMER=y +CONFIG_REGULATOR_USERSPACE_CONSUMER=y +CONFIG_REGULATOR_BCM590XX=y + CONFIG_VIDEO_OUTPUT_CONTROL=y CONFIG_FB=y CONFIG_BACKLIGHT_LCD_SUPPORT=y -- 1.8.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap 2014-02-18 23:17 [PATCH v2 0/5] BCM59056 PMU regulator support Matt Porter ` (3 preceding siblings ...) 2014-02-18 23:17 ` [PATCH v2 4/5] ARM: configs: bcm_defconfig: enable bcm590xx regulator support Matt Porter @ 2014-02-18 23:17 ` Matt Porter 2014-02-19 4:44 ` Mark Brown 4 siblings, 1 reply; 14+ messages in thread From: Matt Porter @ 2014-02-18 23:17 UTC (permalink / raw) To: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Mark Brown, Christian Daudt Cc: Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List, Tim Kryger Add a dtsi to support the BCM590xx PMUs used by the BCM281xx family of SoCs. Enable regulators for use with the dwc2 and sdhci on bcm28155-ap. Signed-off-by: Tim Kryger <tim.kryger@linaro.org> Signed-off-by: Matt Porter <mporter@linaro.org> Reviewed-by: Markus Mayer <markus.mayer@linaro.org> --- arch/arm/boot/dts/bcm28155-ap.dts | 43 +++++++++- arch/arm/boot/dts/bcm59056.dtsi | 162 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/bcm59056.dtsi diff --git a/arch/arm/boot/dts/bcm28155-ap.dts b/arch/arm/boot/dts/bcm28155-ap.dts index 5ff2382..28fe731 100644 --- a/arch/arm/boot/dts/bcm28155-ap.dts +++ b/arch/arm/boot/dts/bcm28155-ap.dts @@ -46,7 +46,11 @@ i2c@3500d000 { status="okay"; - clock-frequency = <400000>; + clock-frequency = <100000>; + + pmu: pmu@8 { + reg = <0x08>; + }; }; sdio1: sdio@3f180000 { @@ -57,16 +61,22 @@ sdio2: sdio@3f190000 { non-removable; max-frequency = <48000000>; + vmmc-supply = <&camldo1_reg>; + vqmmc-supply = <&iosr1_reg>; status = "okay"; }; sdio4: sdio@3f1b0000 { max-frequency = <48000000>; cd-gpios = <&gpio 14 GPIO_ACTIVE_LOW>; + vmmc-supply = <&sdldo_reg>; + vqmmc-supply = <&sdxldo_reg>; status = "okay"; }; usbotg: usb@3f120000 { + vusb_d-supply = <&usbldo_reg>; + vusb_a-supply = <&iosr1_reg>; status = "okay"; }; @@ -74,3 +84,34 @@ status = "okay"; }; }; + +#include "bcm59056.dtsi" + +&pmu { + interrupts = <GIC_SPI 215 IRQ_TYPE_LEVEL_HIGH>; + regs { + regulators { + camldo1_reg: regulator@1 { + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + sdldo_reg: regulator@5 { + regulator-min-microvolt = <3000000>; + regulator-max-microvolt = <3000000>; + }; + + usbldo_reg: regulator@11 { + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + regulator-always-on; + }; + + iosr1_reg: regulator@14 { + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + regulator-always-on; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/bcm59056.dtsi b/arch/arm/boot/dts/bcm59056.dtsi new file mode 100644 index 0000000..b04940b --- /dev/null +++ b/arch/arm/boot/dts/bcm59056.dtsi @@ -0,0 +1,162 @@ +/* +* Copyright 2014 Linaro Limited +* Author: Matt Porter <mporter@linaro.org> +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of the GNU General Public License as published by the +* Free Software Foundation; either version 2 of the License, or (at your +* option) any later version. +*/ + +&pmu { + compatible = "brcm,bcm59056"; + + regs { + compatible = "brcm,bcm59056-regs"; + + regulators { + #address-cells = <1>; + #size-cells = <0>; + + rfldo_reg: regulator@0 { + reg = <0>; + regulator-compatible = "rfldo"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + camldo1_reg: regulator@1 { + reg = <1>; + regulator-compatible = "camldo1"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + + camldo2_reg: regulator@2 { + reg = <2>; + regulator-compatible = "camldo2"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + + simldo1_reg: regulator@3 { + reg = <3>; + regulator-compatible = "simldo1"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + simldo2_reg: regulator@4 { + reg = <4>; + regulator-compatible = "simldo2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + sdldo_reg: regulator@5 { + reg = <5>; + regulator-compatible = "sdldo"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + + sdxldo_reg: regulator@6 { + reg = <6>; + regulator-compatible = "sdxldo"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + mmcldo1_reg: regulator@7 { + reg = <7>; + regulator-compatible = "mmcldo1"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + mmcldo2_reg: regulator@8 { + reg = <8>; + regulator-compatible = "mmcldo2"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + audldo_reg: regulator@9 { + reg = <9>; + regulator-compatible = "audldo"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + micldo_reg: regulator@10 { + reg = <10>; + regulator-compatible = "micldo"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + usbldo_reg: regulator@11 { + reg = <11>; + regulator-compatible = "usbldo"; + regulator-min-microvolt = <1200000>; + regulator-max-microvolt = <3300000>; + }; + + vibldo_reg: regulator@12 { + reg = <12>; + regulator-compatible = "vibldo"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <3300000>; + }; + + csr_reg: regulator@13 { + reg = <13>; + regulator-compatible = "csr"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1440000>; + }; + + iosr1_reg: regulator@14 { + reg = <14>; + regulator-compatible = "iosr1"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1800000>; + }; + + iosr2_reg: regulator@15 { + reg = <15>; + regulator-compatible = "iosr2"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1800000>; + }; + + msr_reg: regulator@16 { + reg = <16>; + regulator-compatible = "msr"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1800000>; + }; + + sdsr1_reg: regulator@17 { + reg = <17>; + regulator-compatible = "sdsr1"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1340000>; + }; + + sdsr2_reg: regulator@18 { + reg = <18>; + regulator-compatible = "sdsr2"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1800000>; + }; + + vsr_reg: regulator@19 { + reg = <19>; + regulator-compatible = "vsr"; + regulator-min-microvolt = <860000>; + regulator-max-microvolt = <1800000>; + }; + }; + }; +}; -- 1.8.4 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap 2014-02-18 23:17 ` [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap Matt Porter @ 2014-02-19 4:44 ` Mark Brown [not found] ` <20140219044458.GA2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> 0 siblings, 1 reply; 14+ messages in thread From: Mark Brown @ 2014-02-19 4:44 UTC (permalink / raw) To: Matt Porter Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List, Tim Kryger [-- Attachment #1: Type: text/plain, Size: 526 bytes --] On Tue, Feb 18, 2014 at 06:17:12PM -0500, Matt Porter wrote: > + csr_reg: regulator@13 { > + reg = <13>; > + regulator-compatible = "csr"; > + regulator-min-microvolt = <860000>; > + regulator-max-microvolt = <1440000>; > + }; You should not be setting voltage ranges like this in a .dtsi - you've no idea if these voltage ranges are in fact valid for any given board so they can't be set safely. In general I would not expect to see any configuration at all for regulators in an include file for the chip. [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 836 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
[parent not found: <20140219044458.GA2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>]
* Re: [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap [not found] ` <20140219044458.GA2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> @ 2014-03-11 15:50 ` Matt Porter 0 siblings, 0 replies; 14+ messages in thread From: Matt Porter @ 2014-03-11 15:50 UTC (permalink / raw) To: Mark Brown Cc: Rob Herring, Pawel Moll, Mark Rutland, Ian Campbell, Kumar Gala, Samuel Ortiz, Lee Jones, Liam Girdwood, Christian Daudt, Devicetree List, Linux ARM Kernel List, Linux Kernel Mailing List, Tim Kryger [-- Attachment #1: Type: text/plain, Size: 726 bytes --] On Wed, Feb 19, 2014 at 01:44:58PM +0900, Mark Brown wrote: > On Tue, Feb 18, 2014 at 06:17:12PM -0500, Matt Porter wrote: > > > + csr_reg: regulator@13 { > > + reg = <13>; > > + regulator-compatible = "csr"; > > + regulator-min-microvolt = <860000>; > > + regulator-max-microvolt = <1440000>; > > + }; > > You should not be setting voltage ranges like this in a .dtsi - you've > no idea if these voltage ranges are in fact valid for any given board so > they can't be set safely. In general I would not expect to see any > configuration at all for regulators in an include file for the chip. Agreed. I moved all constraints where they belong in the board-specific dts. Thanks, Matt [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 819 bytes --] ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2014-03-11 15:50 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2014-02-18 23:17 [PATCH v2 0/5] BCM59056 PMU regulator support Matt Porter 2014-02-18 23:17 ` [PATCH v2 1/5] mfd: add bcm590xx pmu DT binding Matt Porter 2014-02-19 4:47 ` Mark Brown 2014-03-11 15:49 ` Matt Porter 2014-02-18 23:17 ` [PATCH v2 2/5] mfd: add bcm590xx pmu driver Matt Porter 2014-02-19 4:46 ` Mark Brown [not found] ` <20140219044605.GB2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> 2014-03-11 15:50 ` Matt Porter 2014-02-18 23:17 ` [PATCH v2 3/5] regulator: add bcm590xx regulator driver Matt Porter [not found] ` <1392765432-9111-4-git-send-email-mporter-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-02-19 4:52 ` Mark Brown 2014-03-11 15:47 ` Matt Porter 2014-02-18 23:17 ` [PATCH v2 4/5] ARM: configs: bcm_defconfig: enable bcm590xx regulator support Matt Porter 2014-02-18 23:17 ` [PATCH v2 5/5] ARM: dts: add bcm590xx pmu support and enable for bcm28155-ap Matt Porter 2014-02-19 4:44 ` Mark Brown [not found] ` <20140219044458.GA2669-GFdadSzt00ze9xe1eoZjHA@public.gmane.org> 2014-03-11 15:50 ` Matt Porter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).