On Fri, Jul 02, 2021 at 09:37:21AM +0200, Mauro Carvalho Chehab wrote: > This driver is ready for mainstream. So, move it out of staging. > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > --- > .../mfd/hisilicon,hi6421-spmi-pmic.yaml | 134 ++++++++++++++++++ > MAINTAINERS | 7 + > drivers/mfd/Kconfig | 16 +++ > drivers/mfd/Makefile | 1 + > drivers/mfd/hi6421-spmi-pmic.c | 66 +++++++++ > drivers/staging/Kconfig | 2 - > drivers/staging/Makefile | 1 - > drivers/staging/hikey9xx/Kconfig | 19 --- > drivers/staging/hikey9xx/Makefile | 3 - > drivers/staging/hikey9xx/TODO | 5 - > drivers/staging/hikey9xx/hi6421-spmi-pmic.c | 66 --------- > .../hikey9xx/hisilicon,hi6421-spmi-pmic.yaml | 134 ------------------ > 12 files changed, 224 insertions(+), 230 deletions(-) > create mode 100644 Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml > create mode 100644 drivers/mfd/hi6421-spmi-pmic.c > delete mode 100644 drivers/staging/hikey9xx/Kconfig > delete mode 100644 drivers/staging/hikey9xx/Makefile > delete mode 100644 drivers/staging/hikey9xx/TODO > delete mode 100644 drivers/staging/hikey9xx/hi6421-spmi-pmic.c > delete mode 100644 drivers/staging/hikey9xx/hisilicon,hi6421-spmi-pmic.yaml > > diff --git a/Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml b/Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml > new file mode 100644 > index 000000000000..8e355cddd437 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml > @@ -0,0 +1,134 @@ > +# SPDX-License-Identifier: GPL-2.0 > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/mfd/hisilicon,hi6421-spmi-pmic.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: HiSilicon 6421v600 SPMI PMIC > + > +maintainers: > + - Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > + > +description: | > + HiSilicon 6421v600 should be connected inside a MIPI System Power Management > + (SPMI) bus. It provides interrupts and power supply. > + > + The GPIO and interrupt settings are represented as part of the top-level PMIC > + node. > + > + The SPMI controller part is provided by > + Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml > + > +properties: > + $nodename: > + pattern: "pmic@[0-9a-f]" > + > + compatible: > + const: hisilicon,hi6421v600-spmi Doesn't match the example. > + > + reg: > + maxItems: 1 > + > + '#interrupt-cells': > + const: 2 > + > + interrupt-controller: true > + > + gpios: > + maxItems: 1 > + description: GPIO used for IRQs Use 'interrupts' instead if this is an interrupt. > + > + regulators: > + type: object > + > + properties: > + '#address-cells': > + const: 1 > + > + '#size-cells': > + const: 0 > + > + patternProperties: > + '^ldo[0-9]+@[0-9a-f]$': > + type: object > + > + $ref: "/schemas/regulator/regulator.yaml#" > + > +required: > + - compatible > + - reg > + - regulators > + > +additionalProperties: false > + > +examples: > + - | > + /* pmic properties */ > + > + pmic: pmic@0 { > + compatible = "hisilicon,hi6421-spmi"; > + reg = <0 0>; > + > + #interrupt-cells = <2>; > + interrupt-controller; > + gpios = <&gpio28 0 0>; > + > + regulators { > + #address-cells = <1>; > + #size-cells = <0>; > + > + ldo3: LDO3 { > + regulator-name = "ldo3"; > + regulator-min-microvolt = <1500000>; > + regulator-max-microvolt = <2000000>; > + regulator-boot-on; > + }; > + > + ldo4: LDO4 { > + regulator-name = "ldo4"; > + regulator-min-microvolt = <1725000>; > + regulator-max-microvolt = <1900000>; > + regulator-boot-on; > + }; > + > + ldo9: LDO9 { > + regulator-name = "ldo9"; > + regulator-min-microvolt = <1750000>; > + regulator-max-microvolt = <3300000>; > + regulator-boot-on; > + }; > + > + ldo15: LDO15 { > + regulator-name = "ldo15"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3000000>; > + regulator-always-on; > + }; > + > + ldo16: LDO16 { > + regulator-name = "ldo16"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <3000000>; > + regulator-boot-on; > + }; > + > + ldo17: LDO17 { > + regulator-name = "ldo17"; > + regulator-min-microvolt = <2500000>; > + regulator-max-microvolt = <3300000>; > + }; > + > + ldo33: LDO33 { > + regulator-name = "ldo33"; > + regulator-min-microvolt = <2500000>; > + regulator-max-microvolt = <3300000>; > + regulator-boot-on; > + }; > + > + ldo34: LDO34 { > + regulator-name = "ldo34"; > + regulator-min-microvolt = <2600000>; > + regulator-max-microvolt = <3300000>; > + }; > + }; > + }; > diff --git a/MAINTAINERS b/MAINTAINERS > index 31a8cc819c0d..61bdd887d72f 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -8311,6 +8311,13 @@ S: Maintained > F: Documentation/devicetree/bindings/spmi/hisilicon,hisi-spmi-controller.yaml > F: drivers/spmi/hisi-spmi-controller.c > > +HISILICON SPMI PMIC DRIVER FOR HIKEY 6421v600 > +M: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > +L: linux-kernel@xxxxxxxxxxxxxxx > +S: Maintained > +F: Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml > +F: drivers/mfd/hi6421-spmi-pmic.c > + > HISILICON STAGING DRIVERS FOR HIKEY 960/970 > M: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > S: Maintained > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig > index 5c7f2b100191..99b8da2548b5 100644 > --- a/drivers/mfd/Kconfig > +++ b/drivers/mfd/Kconfig > @@ -509,6 +509,22 @@ config MFD_HI6421_PMIC > menus in order to enable them. > We communicate with the Hi6421 via memory-mapped I/O. > > +config MFD_HI6421_SPMI > + tristate "HiSilicon Hi6421v600 SPMI PMU/Codec IC" > + depends on OF > + depends on SPMI > + select MFD_CORE > + select REGMAP_SPMI > + help > + Add support for HiSilicon Hi6421v600 SPMI PMIC. Hi6421 includes > + multi-functions, such as regulators, RTC, codec, Coulomb counter, > + etc. > + > + This driver includes core APIs _only_. You have to select > + individual components like voltage regulators under corresponding > + menus in order to enable them. > + We communicate with the Hi6421v600 via a SPMI bus. > + > config MFD_HI655X_PMIC > tristate "HiSilicon Hi655X series PMU/Codec IC" > depends on ARCH_HISI || COMPILE_TEST > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile > index 4f6d2b8a5f76..e87230fc61ac 100644 > --- a/drivers/mfd/Makefile > +++ b/drivers/mfd/Makefile > @@ -232,6 +232,7 @@ obj-$(CONFIG_MFD_IPAQ_MICRO) += ipaq-micro.o > obj-$(CONFIG_MFD_IQS62X) += iqs62x.o > obj-$(CONFIG_MFD_MENF21BMC) += menf21bmc.o > obj-$(CONFIG_MFD_HI6421_PMIC) += hi6421-pmic-core.o > +obj-$(CONFIG_MFD_HI6421_SPMI) += hi6421-spmi-pmic.o > obj-$(CONFIG_MFD_HI655X_PMIC) += hi655x-pmic.o > obj-$(CONFIG_MFD_DLN2) += dln2.o > obj-$(CONFIG_MFD_RT5033) += rt5033.o > diff --git a/drivers/mfd/hi6421-spmi-pmic.c b/drivers/mfd/hi6421-spmi-pmic.c > new file mode 100644 > index 000000000000..c9c0c3d7011f > --- /dev/null > +++ b/drivers/mfd/hi6421-spmi-pmic.c > @@ -0,0 +1,66 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Device driver for regulators in HISI PMIC IC > + * > + * Copyright (c) 2013 Linaro Ltd. > + * Copyright (c) 2011 Hisilicon. > + * Copyright (c) 2020-2021 Huawei Technologies Co., Ltd. > + */ > + > +#include <linux/mfd/core.h> > +#include <linux/module.h> > +#include <linux/platform_device.h> > +#include <linux/regmap.h> > +#include <linux/slab.h> > +#include <linux/spmi.h> > + > +static const struct mfd_cell hi6421v600_devs[] = { > + { .name = "hi6421v600-irq", }, > + { .name = "hi6421v600-regulator", }, > +}; > + > +static const struct regmap_config regmap_config = { > + .reg_bits = 16, > + .val_bits = BITS_PER_BYTE, > + .max_register = 0xffff, > + .fast_io = true > +}; > + > +static int hi6421_spmi_pmic_probe(struct spmi_device *sdev) > +{ > + struct device *dev = &sdev->dev; > + struct regmap *regmap; > + int ret; > + > + regmap = devm_regmap_init_spmi_ext(sdev, ®map_config); > + if (IS_ERR(regmap)) > + return PTR_ERR(regmap); > + > + dev_set_drvdata(&sdev->dev, regmap); > + > + ret = devm_mfd_add_devices(&sdev->dev, PLATFORM_DEVID_NONE, > + hi6421v600_devs, ARRAY_SIZE(hi6421v600_devs), > + NULL, 0, NULL); > + if (ret < 0) > + dev_err(dev, "Failed to add child devices: %d\n", ret); > + > + return ret; > +} > + > +static const struct of_device_id pmic_spmi_id_table[] = { > + { .compatible = "hisilicon,hi6421-spmi" }, > + { } > +}; > +MODULE_DEVICE_TABLE(of, pmic_spmi_id_table); > + > +static struct spmi_driver hi6421_spmi_pmic_driver = { > + .driver = { > + .name = "hi6421-spmi-pmic", > + .of_match_table = pmic_spmi_id_table, > + }, > + .probe = hi6421_spmi_pmic_probe, > +}; > +module_spmi_driver(hi6421_spmi_pmic_driver); > + > +MODULE_DESCRIPTION("HiSilicon Hi6421v600 SPMI PMIC driver"); > +MODULE_LICENSE("GPL v2"); > diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig > index b7ae5bdc4eb5..5b4267d3ed6b 100644 > --- a/drivers/staging/Kconfig > +++ b/drivers/staging/Kconfig > @@ -104,6 +104,4 @@ source "drivers/staging/qlge/Kconfig" > > source "drivers/staging/wfx/Kconfig" > > -source "drivers/staging/hikey9xx/Kconfig" > - > endif # STAGING > diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile > index 075c979bfe7c..7179cdcaafe7 100644 > --- a/drivers/staging/Makefile > +++ b/drivers/staging/Makefile > @@ -42,4 +42,3 @@ obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/ > obj-$(CONFIG_KPC2000) += kpc2000/ > obj-$(CONFIG_QLGE) += qlge/ > obj-$(CONFIG_WFX) += wfx/ > -obj-y += hikey9xx/ > diff --git a/drivers/staging/hikey9xx/Kconfig b/drivers/staging/hikey9xx/Kconfig > deleted file mode 100644 > index 9f53df9068fe..000000000000 > --- a/drivers/staging/hikey9xx/Kconfig > +++ /dev/null > @@ -1,19 +0,0 @@ > -# SPDX-License-Identifier: GPL-2.0 > - > -# to be placed at drivers/mfd > -config MFD_HI6421_SPMI > - tristate "HiSilicon Hi6421v600 SPMI PMU/Codec IC" > - depends on HAS_IOMEM > - depends on OF > - depends on SPMI > - select MFD_CORE > - select REGMAP_SPMI > - help > - Add support for HiSilicon Hi6421v600 SPMI PMIC. Hi6421 includes > - multi-functions, such as regulators, RTC, codec, Coulomb counter, > - etc. > - > - This driver includes core APIs _only_. You have to select > - individual components like voltage regulators under corresponding > - menus in order to enable them. > - We communicate with the Hi6421v600 via a SPMI bus. > diff --git a/drivers/staging/hikey9xx/Makefile b/drivers/staging/hikey9xx/Makefile > deleted file mode 100644 > index e3108d7dd849..000000000000 > --- a/drivers/staging/hikey9xx/Makefile > +++ /dev/null > @@ -1,3 +0,0 @@ > -# SPDX-License-Identifier: GPL-2.0 > - > -obj-$(CONFIG_MFD_HI6421_SPMI) += hi6421-spmi-pmic.o > diff --git a/drivers/staging/hikey9xx/TODO b/drivers/staging/hikey9xx/TODO > deleted file mode 100644 > index 65e7996a3066..000000000000 > --- a/drivers/staging/hikey9xx/TODO > +++ /dev/null > @@ -1,5 +0,0 @@ > -ToDo list: > - > -- Port other drivers needed by Hikey 960/970; > -- Test drivers on Hikey 960; > -- Validate device tree bindings. > diff --git a/drivers/staging/hikey9xx/hi6421-spmi-pmic.c b/drivers/staging/hikey9xx/hi6421-spmi-pmic.c > deleted file mode 100644 > index c9c0c3d7011f..000000000000 > --- a/drivers/staging/hikey9xx/hi6421-spmi-pmic.c > +++ /dev/null > @@ -1,66 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0 > -/* > - * Device driver for regulators in HISI PMIC IC > - * > - * Copyright (c) 2013 Linaro Ltd. > - * Copyright (c) 2011 Hisilicon. > - * Copyright (c) 2020-2021 Huawei Technologies Co., Ltd. > - */ > - > -#include <linux/mfd/core.h> > -#include <linux/module.h> > -#include <linux/platform_device.h> > -#include <linux/regmap.h> > -#include <linux/slab.h> > -#include <linux/spmi.h> > - > -static const struct mfd_cell hi6421v600_devs[] = { > - { .name = "hi6421v600-irq", }, > - { .name = "hi6421v600-regulator", }, > -}; > - > -static const struct regmap_config regmap_config = { > - .reg_bits = 16, > - .val_bits = BITS_PER_BYTE, > - .max_register = 0xffff, > - .fast_io = true > -}; > - > -static int hi6421_spmi_pmic_probe(struct spmi_device *sdev) > -{ > - struct device *dev = &sdev->dev; > - struct regmap *regmap; > - int ret; > - > - regmap = devm_regmap_init_spmi_ext(sdev, ®map_config); > - if (IS_ERR(regmap)) > - return PTR_ERR(regmap); > - > - dev_set_drvdata(&sdev->dev, regmap); > - > - ret = devm_mfd_add_devices(&sdev->dev, PLATFORM_DEVID_NONE, > - hi6421v600_devs, ARRAY_SIZE(hi6421v600_devs), > - NULL, 0, NULL); > - if (ret < 0) > - dev_err(dev, "Failed to add child devices: %d\n", ret); > - > - return ret; > -} > - > -static const struct of_device_id pmic_spmi_id_table[] = { > - { .compatible = "hisilicon,hi6421-spmi" }, > - { } > -}; > -MODULE_DEVICE_TABLE(of, pmic_spmi_id_table); > - > -static struct spmi_driver hi6421_spmi_pmic_driver = { > - .driver = { > - .name = "hi6421-spmi-pmic", > - .of_match_table = pmic_spmi_id_table, > - }, > - .probe = hi6421_spmi_pmic_probe, > -}; > -module_spmi_driver(hi6421_spmi_pmic_driver); > - > -MODULE_DESCRIPTION("HiSilicon Hi6421v600 SPMI PMIC driver"); > -MODULE_LICENSE("GPL v2"); > diff --git a/drivers/staging/hikey9xx/hisilicon,hi6421-spmi-pmic.yaml b/drivers/staging/hikey9xx/hisilicon,hi6421-spmi-pmic.yaml > deleted file mode 100644 > index 8e355cddd437..000000000000 > --- a/drivers/staging/hikey9xx/hisilicon,hi6421-spmi-pmic.yaml > +++ /dev/null > @@ -1,134 +0,0 @@ > -# SPDX-License-Identifier: GPL-2.0 > -%YAML 1.2 > ---- > -$id: http://devicetree.org/schemas/mfd/hisilicon,hi6421-spmi-pmic.yaml# > -$schema: http://devicetree.org/meta-schemas/core.yaml# > - > -title: HiSilicon 6421v600 SPMI PMIC > - > -maintainers: > - - Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > - > -description: | > - HiSilicon 6421v600 should be connected inside a MIPI System Power Management > - (SPMI) bus. It provides interrupts and power supply. > - > - The GPIO and interrupt settings are represented as part of the top-level PMIC > - node. > - > - The SPMI controller part is provided by > - Documentation/devicetree/bindings/mfd/hisilicon,hi6421-spmi-pmic.yaml > - > -properties: > - $nodename: > - pattern: "pmic@[0-9a-f]" > - > - compatible: > - const: hisilicon,hi6421v600-spmi > - > - reg: > - maxItems: 1 > - > - '#interrupt-cells': > - const: 2 > - > - interrupt-controller: true > - > - gpios: > - maxItems: 1 > - description: GPIO used for IRQs > - > - regulators: > - type: object > - > - properties: > - '#address-cells': > - const: 1 > - > - '#size-cells': > - const: 0 > - > - patternProperties: > - '^ldo[0-9]+@[0-9a-f]$': > - type: object > - > - $ref: "/schemas/regulator/regulator.yaml#" > - > -required: > - - compatible > - - reg > - - regulators > - > -additionalProperties: false > - > -examples: > - - | > - /* pmic properties */ > - > - pmic: pmic@0 { > - compatible = "hisilicon,hi6421-spmi"; > - reg = <0 0>; > - > - #interrupt-cells = <2>; > - interrupt-controller; > - gpios = <&gpio28 0 0>; > - > - regulators { > - #address-cells = <1>; > - #size-cells = <0>; > - > - ldo3: LDO3 { > - regulator-name = "ldo3"; > - regulator-min-microvolt = <1500000>; > - regulator-max-microvolt = <2000000>; > - regulator-boot-on; > - }; > - > - ldo4: LDO4 { > - regulator-name = "ldo4"; > - regulator-min-microvolt = <1725000>; > - regulator-max-microvolt = <1900000>; > - regulator-boot-on; > - }; > - > - ldo9: LDO9 { > - regulator-name = "ldo9"; > - regulator-min-microvolt = <1750000>; > - regulator-max-microvolt = <3300000>; > - regulator-boot-on; > - }; > - > - ldo15: LDO15 { > - regulator-name = "ldo15"; > - regulator-min-microvolt = <1800000>; > - regulator-max-microvolt = <3000000>; > - regulator-always-on; > - }; > - > - ldo16: LDO16 { > - regulator-name = "ldo16"; > - regulator-min-microvolt = <1800000>; > - regulator-max-microvolt = <3000000>; > - regulator-boot-on; > - }; > - > - ldo17: LDO17 { > - regulator-name = "ldo17"; > - regulator-min-microvolt = <2500000>; > - regulator-max-microvolt = <3300000>; > - }; > - > - ldo33: LDO33 { > - regulator-name = "ldo33"; > - regulator-min-microvolt = <2500000>; > - regulator-max-microvolt = <3300000>; > - regulator-boot-on; > - }; > - > - ldo34: LDO34 { > - regulator-name = "ldo34"; > - regulator-min-microvolt = <2600000>; > - regulator-max-microvolt = <3300000>; > - }; > - }; > - }; > -- > 2.31.1 > >