devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Add PMICs support for UMS9621 SoC
@ 2023-08-22  7:51 Jiansheng Wu
  2023-08-22  7:51 ` [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml Jiansheng Wu
  2023-08-22  7:51 ` [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC Jiansheng Wu
  0 siblings, 2 replies; 8+ messages in thread
From: Jiansheng Wu @ 2023-08-22  7:51 UTC (permalink / raw)
  To: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: devicetree, linux-kernel, yongzhi.chen, xiaoqing.wu, jinfeng.lin1,
	jianshengwu16

Patch 1, bindings: Convert sprd spi bindings to yaml and add UMP962x PMICs.
Patch 2, mfd: Add PMICs support for UMS9621 SoC.

Jiansheng Wu (2):
  dt-bindings: spi: Convert sprd spi bindings to yaml
  mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC

 .../bindings/mfd/sprd,sc27xx-pmic.txt         |  40 -------
 .../bindings/mfd/sprd,sc27xx-pmic.yaml        |  84 ++++++++++++++
 drivers/mfd/sprd-sc27xx-spi.c                 | 104 +++++++++++++-----
 3 files changed, 161 insertions(+), 67 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
 create mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml

-- 
2.17.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml
  2023-08-22  7:51 [PATCH 0/2] Add PMICs support for UMS9621 SoC Jiansheng Wu
@ 2023-08-22  7:51 ` Jiansheng Wu
  2023-08-22  8:14   ` Krzysztof Kozlowski
  2023-08-22  8:34   ` Rob Herring
  2023-08-22  7:51 ` [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC Jiansheng Wu
  1 sibling, 2 replies; 8+ messages in thread
From: Jiansheng Wu @ 2023-08-22  7:51 UTC (permalink / raw)
  To: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: devicetree, linux-kernel, yongzhi.chen, xiaoqing.wu, jinfeng.lin1,
	jianshengwu16

Convert sprd,sc27xx-pmic.txt to yaml, and add UMP962x series PMICs.

Signed-off-by: Jiansheng Wu <jiansheng.wu@unisoc.com>
---
 .../bindings/mfd/sprd,sc27xx-pmic.txt         | 40 ---------
 .../bindings/mfd/sprd,sc27xx-pmic.yaml        | 84 +++++++++++++++++++
 2 files changed, 84 insertions(+), 40 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
 create mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml

diff --git a/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt b/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
deleted file mode 100644
index 21b9a897fca5..000000000000
--- a/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
+++ /dev/null
@@ -1,40 +0,0 @@
-Spreadtrum SC27xx Power Management Integrated Circuit (PMIC)
-
-The Spreadtrum SC27xx series PMICs contain SC2720, SC2721, SC2723, SC2730
-and SC2731. The Spreadtrum PMIC belonging to SC27xx series integrates all
-mobile handset power management, audio codec, battery management and user
-interface support function in a single chip. It has 6 major functional
-blocks:
-- DCDCs to support CPU, memory.
-- LDOs to support both internal and external requirement.
-- Battery management system, such as charger, fuel gauge.
-- Audio codec.
-- User interface function, such as indicator, flash LED and so on.
-- IC level interface, such as power on/off control, RTC and typec and so on.
-
-Required properties:
-- compatible: Should be one of the following:
-	"sprd,sc2720"
-	"sprd,sc2721"
-	"sprd,sc2723"
-	"sprd,sc2730"
-	"sprd,sc2731"
-- reg: The address of the device chip select, should be 0.
-- spi-max-frequency: Typically set to 26000000.
-- interrupts: The interrupt line the device is connected to.
-- interrupt-controller: Marks the device node as an interrupt controller.
-- #interrupt-cells: The number of cells to describe an PMIC IRQ, must be 2.
-- #address-cells: Child device offset number of cells, must be 1.
-- #size-cells: Child device size number of cells, must be 0.
-
-Example:
-pmic@0 {
-	compatible = "sprd,sc2731";
-	reg = <0>;
-	spi-max-frequency = <26000000>;
-	interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
-	interrupt-controller;
-	#interrupt-cells = <2>;
-	#address-cells = <1>;
-	#size-cells = <0>;
-};
diff --git a/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml b/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml
new file mode 100644
index 000000000000..590970a17143
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml
@@ -0,0 +1,84 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: |
+  Spreadtrum SC27xx and UMP96xx Power Management Integrated Circuit (PMIC)
+
+maintainers:
+  - Orson Zhai <orsonzhai@gmail.com>
+  - Baolin Wang <baolin.wang7@gmail.com>
+  - Chunyan Zhang <zhang.lyra@gmail.com>
+
+description: |
+  The Spreadtrum SC27xx series PMICs contain SC2720, SC2721, SC2723, SC2730, SC2731
+  and UMP96xx series PMICs contain ump9620, ump962 and ump9622. The Spreadtrum PMIC
+  belonging to SC27xx series and ump962x series integrates all mobile handset power
+  management, audio codec, battery management and user interface support function in
+  a single chip. It has 6 major functional.
+
+blocks:
+  - DCDCs to support CPU, memory.
+  - LDOs to support both internal and external requirement.
+  - Battery management system, such as charger, fuel gauge.
+  - Audio codec.
+  - User interface function, such as indicator, flash LED and so on.
+  - IC level interface, such as power on/off control, RTC and typec and so on.
+
+allOf:
+  - $ref: /schemas/spi/sprd,spi-adi.yaml#
+
+properties:
+  compatible:
+    enum:
+      - sprd,sc2720
+      - sprd,sc2721
+      - sprd,sc2723
+      - sprd,sc2730
+      - sprd,sc2731
+      - sprd,ump9620
+      - sprd,ump9621
+      - sprd,ump9622
+
+  reg:
+    maxItems: 7
+    description: The address of the device chip select
+
+  spi-max-frequency:
+    default: 26000000
+
+  interrupts: true
+
+  interrupt-controller:
+    description: Marks the device node as an interrupt controller.
+
+  interrupt-cells:
+    const: 2
+    description: The number of cells to describe an PMIC IRQ, must be 2.
+
+required:
+  - compatible
+  - reg
+  - spi-max-frequency
+  - '#address-cells' # Child device offset number of cells, must be 1.
+  - '#size-cells' # Child device size number of cells, must be 0.
+
+unevaluatedProperties: false
+
+Example:
+  - |
+    adi_bus {
+        pmic@0 {
+            compatible = "sprd,sc2731";
+            reg = <0>;
+            spi-max-frequency = <26000000>;
+            interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
+            interrupt-controller;
+            #interrupt-cells = <2>;
+            #address-cells = <1>;
+            #size-cells = <0>;
+        };
+    };
+...
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC
  2023-08-22  7:51 [PATCH 0/2] Add PMICs support for UMS9621 SoC Jiansheng Wu
  2023-08-22  7:51 ` [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml Jiansheng Wu
@ 2023-08-22  7:51 ` Jiansheng Wu
  2023-08-22  8:18   ` Krzysztof Kozlowski
                     ` (2 more replies)
  1 sibling, 3 replies; 8+ messages in thread
From: Jiansheng Wu @ 2023-08-22  7:51 UTC (permalink / raw)
  To: Lee Jones, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: devicetree, linux-kernel, yongzhi.chen, xiaoqing.wu, jinfeng.lin1,
	jianshengwu16

There are three PMICs (UMP9620/21/22) on Unisoc's UMS9621 chip.
UMP9620 is a master PMIC, the others are slave ones. Slave PMICs
don't have irq functions, which is different from master device,
such as SC27xx series and UMP9620, etc.

Signed-off-by: Jiansheng Wu <jiansheng.wu@unisoc.com>
---
 drivers/mfd/sprd-sc27xx-spi.c | 104 +++++++++++++++++++++++++---------
 1 file changed, 77 insertions(+), 27 deletions(-)

diff --git a/drivers/mfd/sprd-sc27xx-spi.c b/drivers/mfd/sprd-sc27xx-spi.c
index d21f32cc784d..aa91301568a9 100644
--- a/drivers/mfd/sprd-sc27xx-spi.c
+++ b/drivers/mfd/sprd-sc27xx-spi.c
@@ -24,6 +24,10 @@
 #define SPRD_SC2731_IRQ_BASE		0x140
 #define SPRD_SC2731_IRQ_NUMS		16
 #define SPRD_SC2731_CHG_DET		0xedc
+#define SPRD_UMP9620_IRQ_BASE           0x80
+#define SPRD_UMP9620_IRQ_NUMS           11
+#define SPRD_UMP9621_SLAVE_ID           0x8000
+#define SPRD_UMP9622_SLAVE_ID           0xc000
 
 /* PMIC charger detection definition */
 #define SPRD_PMIC_CHG_DET_DELAY_US	200000
@@ -45,6 +49,7 @@ struct sprd_pmic {
 };
 
 struct sprd_pmic_data {
+	u32 slave_id;
 	u32 irq_base;
 	u32 num_irqs;
 	u32 charger_det;
@@ -67,6 +72,19 @@ static const struct sprd_pmic_data sc2731_data = {
 	.charger_det = SPRD_SC2731_CHG_DET,
 };
 
+static const struct sprd_pmic_data ump9620_data = {
+	.irq_base = SPRD_UMP9620_IRQ_BASE,
+	.num_irqs = SPRD_UMP9620_IRQ_NUMS,
+};
+
+static const struct sprd_pmic_data ump9621_data = {
+	.slave_id = SPRD_UMP9621_SLAVE_ID,
+};
+
+static const struct sprd_pmic_data ump9622_data = {
+	.slave_id = SPRD_UMP9622_SLAVE_ID,
+};
+
 enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev)
 {
 	struct spi_device *spi = to_spi_device(dev);
@@ -108,8 +126,27 @@ static int sprd_pmic_spi_write(void *context, const void *data, size_t count)
 {
 	struct device *dev = context;
 	struct spi_device *spi = to_spi_device(dev);
+	const struct sprd_pmic_data *pdata;
+	int ret;
+	u32 *pmdata;
+
+	if (!pdata->slave_id) {
+		ret = spi_write(spi, data, count);
+	} else {
+		pdata = ((struct sprd_pmic *)spi_get_drvdata(spi))->pdata;
+
+		pmdata = kzalloc(count, GFP_KERNEL);
+		if (!pmdata)
+			return -ENOMEM;
+		memcpy(pmdata, data, count);
+		*pmdata += pdata->slave_id;
+		ret = spi_write(spi, (const void *)pmdata, count);
+		kfree(pmdata);
+	}
+	if (ret)
+		pr_err("pmic mfd write failed!\n");
 
-	return spi_write(spi, data, count);
+	return ret;
 }
 
 static int sprd_pmic_spi_read(void *context,
@@ -118,6 +155,7 @@ static int sprd_pmic_spi_read(void *context,
 {
 	struct device *dev = context;
 	struct spi_device *spi = to_spi_device(dev);
+	const struct sprd_pmic_data *pdata;
 	u32 rx_buf[2] = { 0 };
 	int ret;
 
@@ -125,11 +163,16 @@ static int sprd_pmic_spi_read(void *context,
 	if (reg_size != sizeof(u32) || val_size != sizeof(u32))
 		return -EINVAL;
 
+	pdata = ((struct sprd_pmic *)spi_get_drvdata(spi))->pdata;
 	/* Copy address to read from into first element of SPI buffer. */
 	memcpy(rx_buf, reg, sizeof(u32));
+	if (!pdata->slave_id)
+		rx_buf[0] += pdata->slave_id;
 	ret = spi_read(spi, rx_buf, 1);
-	if (ret < 0)
+	if (ret < 0) {
+		pr_err("pmic mfd read failed!\n");
 		return ret;
+	}
 
 	memcpy(val, rx_buf, val_size);
 	return 0;
@@ -175,33 +218,34 @@ static int sprd_pmic_probe(struct spi_device *spi)
 
 	spi_set_drvdata(spi, ddata);
 	ddata->dev = &spi->dev;
-	ddata->irq = spi->irq;
 	ddata->pdata = pdata;
 
-	ddata->irq_chip.name = dev_name(&spi->dev);
-	ddata->irq_chip.status_base =
-		pdata->irq_base + SPRD_PMIC_INT_MASK_STATUS;
-	ddata->irq_chip.unmask_base = pdata->irq_base + SPRD_PMIC_INT_EN;
-	ddata->irq_chip.ack_base = 0;
-	ddata->irq_chip.num_regs = 1;
-	ddata->irq_chip.num_irqs = pdata->num_irqs;
-
-	ddata->irqs = devm_kcalloc(&spi->dev,
-				   pdata->num_irqs, sizeof(struct regmap_irq),
-				   GFP_KERNEL);
-	if (!ddata->irqs)
-		return -ENOMEM;
-
-	ddata->irq_chip.irqs = ddata->irqs;
-	for (i = 0; i < pdata->num_irqs; i++)
-		ddata->irqs[i].mask = BIT(i);
-
-	ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq,
-				       IRQF_ONESHOT, 0,
-				       &ddata->irq_chip, &ddata->irq_data);
-	if (ret) {
-		dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret);
-		return ret;
+	if (spi->irq) {
+		ddata->irq = spi->irq;
+		ddata->irq_chip.name = dev_name(&spi->dev);
+		ddata->irq_chip.status_base = pdata->irq_base + SPRD_PMIC_INT_MASK_STATUS;
+		ddata->irq_chip.unmask_base = pdata->irq_base + SPRD_PMIC_INT_EN;
+		ddata->irq_chip.ack_base = 0;
+		ddata->irq_chip.num_regs = 1;
+		ddata->irq_chip.num_irqs = pdata->num_irqs;
+
+		ddata->irqs = devm_kcalloc(&spi->dev,
+					   pdata->num_irqs, sizeof(struct regmap_irq),
+					   GFP_KERNEL);
+		if (!ddata->irqs)
+			return -ENOMEM;
+
+		ddata->irq_chip.irqs = ddata->irqs;
+		for (i = 0; i < pdata->num_irqs; i++)
+			ddata->irqs[i].mask = BIT(i);
+
+		ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq,
+					       IRQF_ONESHOT, 0,
+					       &ddata->irq_chip, &ddata->irq_data);
+		if (ret) {
+			dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret);
+			return ret;
+		}
 	}
 
 	ret = devm_of_platform_populate(&spi->dev);
@@ -240,6 +284,9 @@ static DEFINE_SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops,
 static const struct of_device_id sprd_pmic_match[] = {
 	{ .compatible = "sprd,sc2730", .data = &sc2730_data },
 	{ .compatible = "sprd,sc2731", .data = &sc2731_data },
+	{ .compatible = "sprd,ump9620", .data = &ump9620_data },
+	{ .compatible = "sprd,ump9621", .data = &ump9621_data },
+	{ .compatible = "sprd,ump9622", .data = &ump9622_data },
 	{},
 };
 MODULE_DEVICE_TABLE(of, sprd_pmic_match);
@@ -247,6 +294,9 @@ MODULE_DEVICE_TABLE(of, sprd_pmic_match);
 static const struct spi_device_id sprd_pmic_spi_ids[] = {
 	{ .name = "sc2730", .driver_data = (unsigned long)&sc2730_data },
 	{ .name = "sc2731", .driver_data = (unsigned long)&sc2731_data },
+	{ .name = "ump9620", .driver_data = (unsigned long)&ump9620_data },
+	{ .name = "ump9621", .driver_data = (unsigned long)&ump9621_data },
+	{ .name = "ump9622", .driver_data = (unsigned long)&ump9622_data },
 	{},
 };
 MODULE_DEVICE_TABLE(spi, sprd_pmic_spi_ids);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml
  2023-08-22  7:51 ` [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml Jiansheng Wu
@ 2023-08-22  8:14   ` Krzysztof Kozlowski
  2023-08-22  8:34   ` Rob Herring
  1 sibling, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2023-08-22  8:14 UTC (permalink / raw)
  To: Jiansheng Wu, Lee Jones, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: devicetree, linux-kernel, yongzhi.chen, xiaoqing.wu, jinfeng.lin1,
	jianshengwu16

On 22/08/2023 09:51, Jiansheng Wu wrote:
> Convert sprd,sc27xx-pmic.txt to yaml, and add UMP962x series PMICs.
> 
> Signed-off-by: Jiansheng Wu <jiansheng.wu@unisoc.com>

Subject is bogus. This is not SPI.

> ---
>  .../bindings/mfd/sprd,sc27xx-pmic.txt         | 40 ---------
>  .../bindings/mfd/sprd,sc27xx-pmic.yaml        | 84 +++++++++++++++++++
>  2 files changed, 84 insertions(+), 40 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
>  create mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml
> 
> diff --git a/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt b/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
> deleted file mode 100644
> index 21b9a897fca5..000000000000
> --- a/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -Spreadtrum SC27xx Power Management Integrated Circuit (PMIC)
> -
> -The Spreadtrum SC27xx series PMICs contain SC2720, SC2721, SC2723, SC2730
> -and SC2731. The Spreadtrum PMIC belonging to SC27xx series integrates all
> -mobile handset power management, audio codec, battery management and user
> -interface support function in a single chip. It has 6 major functional
> -blocks:
> -- DCDCs to support CPU, memory.
> -- LDOs to support both internal and external requirement.
> -- Battery management system, such as charger, fuel gauge.
> -- Audio codec.
> -- User interface function, such as indicator, flash LED and so on.
> -- IC level interface, such as power on/off control, RTC and typec and so on.
> -
> -Required properties:
> -- compatible: Should be one of the following:
> -	"sprd,sc2720"
> -	"sprd,sc2721"
> -	"sprd,sc2723"
> -	"sprd,sc2730"
> -	"sprd,sc2731"
> -- reg: The address of the device chip select, should be 0.
> -- spi-max-frequency: Typically set to 26000000.
> -- interrupts: The interrupt line the device is connected to.
> -- interrupt-controller: Marks the device node as an interrupt controller.
> -- #interrupt-cells: The number of cells to describe an PMIC IRQ, must be 2.
> -- #address-cells: Child device offset number of cells, must be 1.
> -- #size-cells: Child device size number of cells, must be 0.
> -
> -Example:
> -pmic@0 {
> -	compatible = "sprd,sc2731";
> -	reg = <0>;
> -	spi-max-frequency = <26000000>;
> -	interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
> -	interrupt-controller;
> -	#interrupt-cells = <2>;
> -	#address-cells = <1>;
> -	#size-cells = <0>;
> -};
> diff --git a/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml b/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml
> new file mode 100644
> index 000000000000..590970a17143
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml
> @@ -0,0 +1,84 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: |
> +  Spreadtrum SC27xx and UMP96xx Power Management Integrated Circuit (PMIC)
> +
> +maintainers:
> +  - Orson Zhai <orsonzhai@gmail.com>
> +  - Baolin Wang <baolin.wang7@gmail.com>
> +  - Chunyan Zhang <zhang.lyra@gmail.com>
> +
> +description: |
> +  The Spreadtrum SC27xx series PMICs contain SC2720, SC2721, SC2723, SC2730, SC2731
> +  and UMP96xx series PMICs contain ump9620, ump962 and ump9622. The Spreadtrum PMIC
> +  belonging to SC27xx series and ump962x series integrates all mobile handset power
> +  management, audio codec, battery management and user interface support function in
> +  a single chip. It has 6 major functional.
> +
> +blocks:

Please don't use confusing YAML syntax.

> +  - DCDCs to support CPU, memory.
> +  - LDOs to support both internal and external requirement.
> +  - Battery management system, such as charger, fuel gauge.
> +  - Audio codec.
> +  - User interface function, such as indicator, flash LED and so on.
> +  - IC level interface, such as power on/off control, RTC and typec and so on.
> +
> +allOf:
> +  - $ref: /schemas/spi/sprd,spi-adi.yaml#

This is confusing. How is this device a SPI controller? You have
entirely different compatibles, so no, it's wrong. Missing ref to
spi-peripheral properties. See other bindings.

> +
> +properties:
> +  compatible:
> +    enum:
> +      - sprd,sc2720
> +      - sprd,sc2721
> +      - sprd,sc2723
> +      - sprd,sc2730
> +      - sprd,sc2731
> +      - sprd,ump9620
> +      - sprd,ump9621
> +      - sprd,ump9622

This does not match your previous bindings and nothing is explained in
commit msg.

> +
> +  reg:
> +    maxItems: 7
> +    description: The address of the device chip select

7 items? No way.

> +
> +  spi-max-frequency:
> +    default: 26000000
> +
> +  interrupts: true

You need constraints.

> +
> +  interrupt-controller:
> +    description: Marks the device node as an interrupt controller.

Drop description. ": true" instead

> +
> +  interrupt-cells:
> +    const: 2
> +    description: The number of cells to describe an PMIC IRQ, must be 2.

You did not test it.

> +
> +required:
> +  - compatible
> +  - reg
> +  - spi-max-frequency
> +  - '#address-cells' # Child device offset number of cells, must be 1.

??

> +  - '#size-cells' # Child device size number of cells, must be 0.

?? No way. You do not have any children. Drop bogus properties and
explain it in commit msg.

> +
> +unevaluatedProperties: false
> +
> +Example:
> +  - |
> +    adi_bus {

No underscores in node names, generic node names, whatever this supposed
to be. I guess spi...

> +        pmic@0 {
> +            compatible = "sprd,sc2731";
> +            reg = <0>;
> +            spi-max-frequency = <26000000>;
> +            interrupts = <GIC_SPI 31 IRQ_TYPE_LEVEL_HIGH>;
> +            interrupt-controller;
> +            #interrupt-cells = <2>;

Test your bindings...

> +...

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC
  2023-08-22  7:51 ` [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC Jiansheng Wu
@ 2023-08-22  8:18   ` Krzysztof Kozlowski
  2023-08-22 18:51   ` kernel test robot
  2023-08-22 21:54   ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: Krzysztof Kozlowski @ 2023-08-22  8:18 UTC (permalink / raw)
  To: Jiansheng Wu, Lee Jones, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: devicetree, linux-kernel, yongzhi.chen, xiaoqing.wu, jinfeng.lin1,
	jianshengwu16

On 22/08/2023 09:51, Jiansheng Wu wrote:
> There are three PMICs (UMP9620/21/22) on Unisoc's UMS9621 chip.
> UMP9620 is a master PMIC, the others are slave ones. Slave PMICs
> don't have irq functions, which is different from master device,
> such as SC27xx series and UMP9620, etc.
> 
> Signed-off-by: Jiansheng Wu <jiansheng.wu@unisoc.com>
> ---
>  drivers/mfd/sprd-sc27xx-spi.c | 104 +++++++++++++++++++++++++---------
>  1 file changed, 77 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/mfd/sprd-sc27xx-spi.c b/drivers/mfd/sprd-sc27xx-spi.c
> index d21f32cc784d..aa91301568a9 100644
> --- a/drivers/mfd/sprd-sc27xx-spi.c
> +++ b/drivers/mfd/sprd-sc27xx-spi.c
> @@ -24,6 +24,10 @@
>  #define SPRD_SC2731_IRQ_BASE		0x140
>  #define SPRD_SC2731_IRQ_NUMS		16
>  #define SPRD_SC2731_CHG_DET		0xedc
> +#define SPRD_UMP9620_IRQ_BASE           0x80
> +#define SPRD_UMP9620_IRQ_NUMS           11
> +#define SPRD_UMP9621_SLAVE_ID           0x8000
> +#define SPRD_UMP9622_SLAVE_ID           0xc000
>  
>  /* PMIC charger detection definition */
>  #define SPRD_PMIC_CHG_DET_DELAY_US	200000
> @@ -45,6 +49,7 @@ struct sprd_pmic {
>  };
>  
>  struct sprd_pmic_data {
> +	u32 slave_id;

See coding style about such wording. You know, it is not 2010 anymore...

>  	u32 irq_base;
>  	u32 num_irqs;
>  	u32 charger_det;
> @@ -67,6 +72,19 @@ static const struct sprd_pmic_data sc2731_data = {
>  	.charger_det = SPRD_SC2731_CHG_DET,
>  };
>  
> +static const struct sprd_pmic_data ump9620_data = {
> +	.irq_base = SPRD_UMP9620_IRQ_BASE,
> +	.num_irqs = SPRD_UMP9620_IRQ_NUMS,
> +};
> +
> +static const struct sprd_pmic_data ump9621_data = {
> +	.slave_id = SPRD_UMP9621_SLAVE_ID,
> +};
> +
> +static const struct sprd_pmic_data ump9622_data = {
> +	.slave_id = SPRD_UMP9622_SLAVE_ID,
> +};
> +
>  enum usb_charger_type sprd_pmic_detect_charger_type(struct device *dev)
>  {
>  	struct spi_device *spi = to_spi_device(dev);
> @@ -108,8 +126,27 @@ static int sprd_pmic_spi_write(void *context, const void *data, size_t count)
>  {
>  	struct device *dev = context;
>  	struct spi_device *spi = to_spi_device(dev);
> +	const struct sprd_pmic_data *pdata;
> +	int ret;
> +	u32 *pmdata;
> +
> +	if (!pdata->slave_id) {
> +		ret = spi_write(spi, data, count);
> +	} else {
> +		pdata = ((struct sprd_pmic *)spi_get_drvdata(spi))->pdata;
> +
> +		pmdata = kzalloc(count, GFP_KERNEL);
> +		if (!pmdata)
> +			return -ENOMEM;
> +		memcpy(pmdata, data, count);
> +		*pmdata += pdata->slave_id;
> +		ret = spi_write(spi, (const void *)pmdata, count);
> +		kfree(pmdata);
> +	}
> +	if (ret)
> +		pr_err("pmic mfd write failed!\n");
>  
> -	return spi_write(spi, data, count);
> +	return ret;
>  }
>  
>  static int sprd_pmic_spi_read(void *context,
> @@ -118,6 +155,7 @@ static int sprd_pmic_spi_read(void *context,
>  {
>  	struct device *dev = context;
>  	struct spi_device *spi = to_spi_device(dev);
> +	const struct sprd_pmic_data *pdata;
>  	u32 rx_buf[2] = { 0 };
>  	int ret;
>  
> @@ -125,11 +163,16 @@ static int sprd_pmic_spi_read(void *context,
>  	if (reg_size != sizeof(u32) || val_size != sizeof(u32))
>  		return -EINVAL;
>  
> +	pdata = ((struct sprd_pmic *)spi_get_drvdata(spi))->pdata;
>  	/* Copy address to read from into first element of SPI buffer. */
>  	memcpy(rx_buf, reg, sizeof(u32));
> +	if (!pdata->slave_id)
> +		rx_buf[0] += pdata->slave_id;
>  	ret = spi_read(spi, rx_buf, 1);
> -	if (ret < 0)
> +	if (ret < 0) {
> +		pr_err("pmic mfd read failed!\n");

Eh... drivers do not use pr_ but dev_. Which you can easily see within
this driver, so before posting changes please look at the driver and its
style, then learn from it and use similar coding convention.

>  		return ret;
> +	}
>  
>  	memcpy(val, rx_buf, val_size);
>  	return 0;

...


>  
>  	ret = devm_of_platform_populate(&spi->dev);
> @@ -240,6 +284,9 @@ static DEFINE_SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops,
>  static const struct of_device_id sprd_pmic_match[] = {
>  	{ .compatible = "sprd,sc2730", .data = &sc2730_data },
>  	{ .compatible = "sprd,sc2731", .data = &sc2731_data },
> +	{ .compatible = "sprd,ump9620", .data = &ump9620_data },
> +	{ .compatible = "sprd,ump9621", .data = &ump9621_data },
> +	{ .compatible = "sprd,ump9622", .data = &ump9622_data },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(of, sprd_pmic_match);
> @@ -247,6 +294,9 @@ MODULE_DEVICE_TABLE(of, sprd_pmic_match);
>  static const struct spi_device_id sprd_pmic_spi_ids[] = {
>  	{ .name = "sc2730", .driver_data = (unsigned long)&sc2730_data },
>  	{ .name = "sc2731", .driver_data = (unsigned long)&sc2731_data },
> +	{ .name = "ump9620", .driver_data = (unsigned long)&ump9620_data },
> +	{ .name = "ump9621", .driver_data = (unsigned long)&ump9621_data },
> +	{ .name = "ump9622", .driver_data = (unsigned long)&ump9622_data },

So here you sneaked new compatibles... Sorry, adding new compatibles is
not the same as converting old ones. Entirely separate patch.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml
  2023-08-22  7:51 ` [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml Jiansheng Wu
  2023-08-22  8:14   ` Krzysztof Kozlowski
@ 2023-08-22  8:34   ` Rob Herring
  1 sibling, 0 replies; 8+ messages in thread
From: Rob Herring @ 2023-08-22  8:34 UTC (permalink / raw)
  To: Jiansheng Wu
  Cc: jianshengwu16, devicetree, Conor Dooley, Rob Herring, Lee Jones,
	Orson Zhai, Krzysztof Kozlowski, yongzhi.chen, xiaoqing.wu,
	Baolin Wang, linux-kernel, jinfeng.lin1, Chunyan Zhang


On Tue, 22 Aug 2023 15:51:12 +0800, Jiansheng Wu wrote:
> Convert sprd,sc27xx-pmic.txt to yaml, and add UMP962x series PMICs.
> 
> Signed-off-by: Jiansheng Wu <jiansheng.wu@unisoc.com>
> ---
>  .../bindings/mfd/sprd,sc27xx-pmic.txt         | 40 ---------
>  .../bindings/mfd/sprd,sc27xx-pmic.yaml        | 84 +++++++++++++++++++
>  2 files changed, 84 insertions(+), 40 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.txt
>  create mode 100644 Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml: 'blocks' is not one of ['$id', '$schema', 'title', 'description', 'examples', 'required', 'allOf', 'anyOf', 'oneOf', 'definitions', '$defs', 'additionalProperties', 'dependencies', 'dependentRequired', 'dependentSchemas', 'patternProperties', 'properties', 'not', 'if', 'then', 'else', 'unevaluatedProperties', 'deprecated', 'maintainers', 'select', '$ref']
	from schema $id: http://devicetree.org/meta-schemas/base.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/mfd/sprd,sc27xx-pmic.yaml: 'Example' is not one of ['$id', '$schema', 'title', 'description', 'examples', 'required', 'allOf', 'anyOf', 'oneOf', 'definitions', '$defs', 'additionalProperties', 'dependencies', 'dependentRequired', 'dependentSchemas', 'patternProperties', 'properties', 'not', 'if', 'then', 'else', 'unevaluatedProperties', 'deprecated', 'maintainers', 'select', '$ref']
	from schema $id: http://devicetree.org/meta-schemas/base.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/input/sprd,sc27xx-vibrator.example.dtb: pmic@0: $nodename:0: 'pmic@0' does not match '^spi(@.*|-([0-9]|[1-9][0-9]+))?$'
	from schema $id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/input/sprd,sc27xx-vibrator.example.dtb: pmic@0: vibrator@eb4:reg:0:0: 3764 is greater than the maximum of 256
	from schema $id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/input/sprd,sc27xx-vibrator.example.dtb: pmic@0: compatible:0: 'sprd,sc2731' is not one of ['sprd,sc9860-adi', 'sprd,sc9863-adi', 'sprd,ums512-adi']
	from schema $id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/input/sprd,sc27xx-vibrator.example.dtb: pmic@0: Unevaluated properties are not allowed ('#address-cells', '#interrupt-cells', '#size-cells', 'compatible', 'interrupt-controller', 'interrupts', 'spi-max-frequency', 'vibrator@eb4' were unexpected)
	from schema $id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/input/sprd,sc27xx-vibrator.example.dtb: pmic@0: reg: [[0, 0]] is too short
	from schema $id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/input/sprd,sc27xx-vibrator.example.dtb: pmic@0: Unevaluated properties are not allowed ('#address-cells', '#interrupt-cells', '#size-cells', 'reg', 'vibrator@eb4' were unexpected)
	from schema $id: http://devicetree.org/schemas/mfd/sprd,sc27xx-pmic.yaml#

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20230822075113.25506-2-jiansheng.wu@unisoc.com

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC
  2023-08-22  7:51 ` [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC Jiansheng Wu
  2023-08-22  8:18   ` Krzysztof Kozlowski
@ 2023-08-22 18:51   ` kernel test robot
  2023-08-22 21:54   ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2023-08-22 18:51 UTC (permalink / raw)
  To: Jiansheng Wu, Lee Jones, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: oe-kbuild-all, devicetree, linux-kernel, yongzhi.chen,
	xiaoqing.wu, jinfeng.lin1, jianshengwu16

Hi Jiansheng,

kernel test robot noticed the following build warnings:

[auto build test WARNING on lee-mfd/for-mfd-next]
[also build test WARNING on robh/for-next lee-leds/for-leds-next lee-mfd/for-mfd-fixes linus/master v6.5-rc7 next-20230822]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Jiansheng-Wu/dt-bindings-spi-Convert-sprd-spi-bindings-to-yaml/20230822-155400
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
patch link:    https://lore.kernel.org/r/20230822075113.25506-3-jiansheng.wu%40unisoc.com
patch subject: [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC
config: i386-buildonly-randconfig-004-20230822 (https://download.01.org/0day-ci/archive/20230823/202308230247.XxIH8PLy-lkp@intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230247.XxIH8PLy-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230247.XxIH8PLy-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/mfd/sprd-sc27xx-spi.c: In function 'sprd_pmic_spi_write':
>> drivers/mfd/sprd-sc27xx-spi.c:133:12: warning: 'pdata' is used uninitialized in this function [-Wuninitialized]
     133 |  if (!pdata->slave_id) {
         |       ~~~~~^~~~~~~~~~


vim +/pdata +133 drivers/mfd/sprd-sc27xx-spi.c

   124	
   125	static int sprd_pmic_spi_write(void *context, const void *data, size_t count)
   126	{
   127		struct device *dev = context;
   128		struct spi_device *spi = to_spi_device(dev);
   129		const struct sprd_pmic_data *pdata;
   130		int ret;
   131		u32 *pmdata;
   132	
 > 133		if (!pdata->slave_id) {
   134			ret = spi_write(spi, data, count);
   135		} else {
   136			pdata = ((struct sprd_pmic *)spi_get_drvdata(spi))->pdata;
   137	
   138			pmdata = kzalloc(count, GFP_KERNEL);
   139			if (!pmdata)
   140				return -ENOMEM;
   141			memcpy(pmdata, data, count);
   142			*pmdata += pdata->slave_id;
   143			ret = spi_write(spi, (const void *)pmdata, count);
   144			kfree(pmdata);
   145		}
   146		if (ret)
   147			pr_err("pmic mfd write failed!\n");
   148	
   149		return ret;
   150	}
   151	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC
  2023-08-22  7:51 ` [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC Jiansheng Wu
  2023-08-22  8:18   ` Krzysztof Kozlowski
  2023-08-22 18:51   ` kernel test robot
@ 2023-08-22 21:54   ` kernel test robot
  2 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2023-08-22 21:54 UTC (permalink / raw)
  To: Jiansheng Wu, Lee Jones, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Orson Zhai, Baolin Wang, Chunyan Zhang
  Cc: oe-kbuild-all, devicetree, linux-kernel, yongzhi.chen,
	xiaoqing.wu, jinfeng.lin1, jianshengwu16

Hi Jiansheng,

kernel test robot noticed the following build warnings:

[auto build test WARNING on lee-mfd/for-mfd-next]
[also build test WARNING on robh/for-next lee-leds/for-leds-next lee-mfd/for-mfd-fixes linus/master v6.5-rc7 next-20230822]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Jiansheng-Wu/dt-bindings-spi-Convert-sprd-spi-bindings-to-yaml/20230822-155400
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
patch link:    https://lore.kernel.org/r/20230822075113.25506-3-jiansheng.wu%40unisoc.com
patch subject: [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC
config: nios2-allmodconfig (https://download.01.org/0day-ci/archive/20230823/202308230504.UYqC6CLk-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230504.UYqC6CLk-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230504.UYqC6CLk-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/mfd/sprd-sc27xx-spi.c: In function 'sprd_pmic_spi_write':
>> drivers/mfd/sprd-sc27xx-spi.c:133:19: warning: 'pdata' is used uninitialized [-Wuninitialized]
     133 |         if (!pdata->slave_id) {
         |              ~~~~~^~~~~~~~~~
   drivers/mfd/sprd-sc27xx-spi.c:129:38: note: 'pdata' was declared here
     129 |         const struct sprd_pmic_data *pdata;
         |                                      ^~~~~


vim +/pdata +133 drivers/mfd/sprd-sc27xx-spi.c

   124	
   125	static int sprd_pmic_spi_write(void *context, const void *data, size_t count)
   126	{
   127		struct device *dev = context;
   128		struct spi_device *spi = to_spi_device(dev);
   129		const struct sprd_pmic_data *pdata;
   130		int ret;
   131		u32 *pmdata;
   132	
 > 133		if (!pdata->slave_id) {
   134			ret = spi_write(spi, data, count);
   135		} else {
   136			pdata = ((struct sprd_pmic *)spi_get_drvdata(spi))->pdata;
   137	
   138			pmdata = kzalloc(count, GFP_KERNEL);
   139			if (!pmdata)
   140				return -ENOMEM;
   141			memcpy(pmdata, data, count);
   142			*pmdata += pdata->slave_id;
   143			ret = spi_write(spi, (const void *)pmdata, count);
   144			kfree(pmdata);
   145		}
   146		if (ret)
   147			pr_err("pmic mfd write failed!\n");
   148	
   149		return ret;
   150	}
   151	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2023-08-22 21:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-22  7:51 [PATCH 0/2] Add PMICs support for UMS9621 SoC Jiansheng Wu
2023-08-22  7:51 ` [PATCH 1/2] dt-bindings: spi: Convert sprd spi bindings to yaml Jiansheng Wu
2023-08-22  8:14   ` Krzysztof Kozlowski
2023-08-22  8:34   ` Rob Herring
2023-08-22  7:51 ` [PATCH 2/2] mfd: sprd-sc27xx-spi: Add PMICs support for UMS9621 SoC Jiansheng Wu
2023-08-22  8:18   ` Krzysztof Kozlowski
2023-08-22 18:51   ` kernel test robot
2023-08-22 21:54   ` kernel test robot

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).