All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/4] Add Richtek RT5120 PMIC support
@ 2022-06-22 10:01 cy_huang
  2022-06-22 10:01 ` [PATCH v2 1/4] dt-binding: mfd: " cy_huang
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: cy_huang @ 2022-06-22 10:01 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie, dmitry.torokhov
  Cc: lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

From: ChiYuan Huang <cy_huang@richtek.com>

This patch series is to add Richtek RT5120 PMIC support.
In RT5120, it integrates four channels of buck converter, one channel of LDO,
and one external enable channel to control the external power source.

Since v2:
- Add 'unevaluatedProperties: false' for regulator buck1~4/ldo/exten.
- Fix indention and remove status for powerkey.
- Refine powerkey description for more HW details.
- For the regulator property parsing, use of_property_read_u32 instead.
- Not to overwrite regulator constraint.
- Refine regulator desc coding.

ChiYuan Huang (4):
  dt-binding: mfd: Add Richtek RT5120 PMIC support
  mfd: rt5120: Add Richtek PMIC support
  regulator: rt5120: Add PMIC regulator support
  input: misc: rt5120: Add power key support

 .../devicetree/bindings/mfd/richtek,rt5120.yaml    | 178 +++++++++
 drivers/input/misc/Kconfig                         |   9 +
 drivers/input/misc/Makefile                        |   1 +
 drivers/input/misc/rt5120-pwrkey.c                 | 115 ++++++
 drivers/mfd/Kconfig                                |  12 +
 drivers/mfd/Makefile                               |   1 +
 drivers/mfd/rt5120.c                               | 125 ++++++
 drivers/regulator/Kconfig                          |  10 +
 drivers/regulator/Makefile                         |   1 +
 drivers/regulator/rt5120-regulator.c               | 420 +++++++++++++++++++++
 10 files changed, 872 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt5120.yaml
 create mode 100644 drivers/input/misc/rt5120-pwrkey.c
 create mode 100644 drivers/mfd/rt5120.c
 create mode 100644 drivers/regulator/rt5120-regulator.c

-- 
2.7.4


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

* [PATCH v2 1/4] dt-binding: mfd: Add Richtek RT5120 PMIC support
  2022-06-22 10:01 [PATCH v2 0/4] Add Richtek RT5120 PMIC support cy_huang
@ 2022-06-22 10:01 ` cy_huang
  2022-06-22 14:48   ` Krzysztof Kozlowski
  2022-06-22 10:01 ` [PATCH v2 2/4] mfd: rt5120: Add Richtek " cy_huang
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: cy_huang @ 2022-06-22 10:01 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie, dmitry.torokhov
  Cc: lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

From: ChiYuan Huang <cy_huang@richtek.com>

Add Richtek RT5120 PMIC devicetree document.

Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
---
Since v2:
- Add 'unevaluatedProperties: false' for regulator buck1~4/ldo/exten.
- Fix indention and remove status for powerkey.
- Refine powerkey description for more HW details.

---
 .../devicetree/bindings/mfd/richtek,rt5120.yaml    | 178 +++++++++++++++++++++
 1 file changed, 178 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt5120.yaml

diff --git a/Documentation/devicetree/bindings/mfd/richtek,rt5120.yaml b/Documentation/devicetree/bindings/mfd/richtek,rt5120.yaml
new file mode 100644
index 00000000..f73b8b2
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/richtek,rt5120.yaml
@@ -0,0 +1,178 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/richtek,rt5120.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Richtek RT5120 PMIC
+
+maintainers:
+  - ChiYuan Huang <cy_huang@richtek.com>
+
+description: |
+  The RT5120 provides four high-efficiency buck converters and one LDO voltage
+  regulator. The device is targeted at providingthe processor voltage, memory,
+  I/O, and peripheral rails in home entertainment devices. The I2C interface is
+  used for dynamic voltage scaling of the processor voltage, power rails on/off
+  sequence control, operation mode selection.
+
+properties:
+  compatible:
+    enum:
+      - richtek,rt5120
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  interrupt-controller: true
+
+  "#interrupt-cells":
+    const: 1
+
+  wakeup-source: true
+
+  richtek,enable-undervolt-hiccup:
+    type: boolean
+    description: |
+      If used, under voltage protection trigger hiccup behavior, else latchup as
+      default
+
+  richtek,enable-overvolt-hiccup:
+    type: boolean
+    description:
+      Like as 'enable-uv-hiccup', it configures over voltage protection to
+      hiccup, else latchup as default
+
+  vin1-supply:
+    description: phandle for buck1 input power source
+
+  vin2-supply:
+    description: phandle for buck2 input power source
+
+  vin3-supply:
+    description: phandle for buck3 input power source
+
+  vin4-supply:
+    description: phandle for buck4 input power source
+
+  vinldo-supply:
+    description: phandle for ldo input power source
+
+  regulators:
+    type: object
+
+    patternProperties:
+      "^buck[1-4]$":
+        type: object
+        $ref: /schemas/regulator/regulator.yaml#
+        unevaluatedProperties: false
+
+        properties:
+          regulator-allowed-modes:
+            description: |
+              Used to specify the allowed buck converter operating mode
+              mode mapping:
+                0: auto mode
+                1: force pwm mode
+            items:
+              enum: [0, 1]
+
+      "^(ldo|exten)$":
+        type: object
+        $ref: /schemas/regulator/regulator.yaml#
+        unevaluatedProperties: false
+
+    additionalProperties: false
+
+  powerkey:
+    type: object
+    description:
+      PON key that connected to RT5120 PMIC.
+
+    properties:
+      compatible:
+        enum:
+          - richtek,rt5120-pwrkey
+
+    required:
+      - compatible
+
+    additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - '#interrupt-cells'
+  - interrupt-controller
+  - regulators
+  - powerkey
+
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      pmic@62 {
+        compatible = "richtek,rt5120";
+        reg = <0x62>;
+        interrupts-extended = <&gpio_intc 32 IRQ_TYPE_LEVEL_LOW>;
+        interrupt-controller;
+        #interrupt-cells = <1>;
+        wakeup-source;
+
+        regulators {
+          buck1 {
+            regulator-name = "rt5120-buck1";
+            regulator-min-microvolt = <600000>;
+            regulator-max-microvolt = <1393750>;
+            regulator-allowed-modes = <0 1>;
+            regulator-boot-on;
+          };
+          buck2 {
+            regulator-name = "rt5120-buck2";
+            regulator-min-microvolt = <1100000>;
+            regulator-max-microvolt = <1100000>;
+            regulator-allowed-modes = <0 1>;
+            regulator-always-on;
+          };
+          buck3 {
+            regulator-name = "rt5120-buck3";
+            regulator-min-microvolt = <1800000>;
+            regulator-max-microvolt = <1800000>;
+            regulator-allowed-modes = <0 1>;
+            regulator-always-on;
+          };
+          buck4 {
+            regulator-name = "rt5120-buck4";
+            regulator-min-microvolt = <3300000>;
+            regulator-max-microvolt = <3300000>;
+            regulator-allowed-modes = <0 1>;
+            regulator-always-on;
+          };
+          ldo {
+            regulator-name = "rt5120-ldo";
+            regulator-min-microvolt = <1800000>;
+            regulator-max-microvolt = <1800000>;
+            regulator-always-on;
+          };
+          exten {
+            regulator-name = "rt5120-exten";
+            regulator-min-microvolt = <3000000>;
+            regulator-max-microvolt = <3000000>;
+            regulator-always-on;
+          };
+        };
+        powerkey {
+          compatible = "richtek,rt5120-pwrkey";
+        };
+      };
+    };
-- 
2.7.4


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

* [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-06-22 10:01 [PATCH v2 0/4] Add Richtek RT5120 PMIC support cy_huang
  2022-06-22 10:01 ` [PATCH v2 1/4] dt-binding: mfd: " cy_huang
@ 2022-06-22 10:01 ` cy_huang
  2022-06-27 14:22   ` Lee Jones
  2022-06-22 10:01 ` [PATCH v2 3/4] regulator: rt5120: Add PMIC regulator support cy_huang
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: cy_huang @ 2022-06-22 10:01 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie, dmitry.torokhov
  Cc: lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

From: ChiYuan Huang <cy_huang@richtek.com>

Add Richtek RT5120 PMIC I2C driver.

Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
---
 drivers/mfd/Kconfig  |  12 +++++
 drivers/mfd/Makefile |   1 +
 drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 138 insertions(+)
 create mode 100644 drivers/mfd/rt5120.c

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 3b59456..866619c 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1127,6 +1127,18 @@ config MFD_RT5033
 	  sub-devices like charger, fuel gauge, flash LED, current source,
 	  LDO and Buck.
 
+config MFD_RT5120
+	tristate "Richtek RT5120 Power Management IC"
+	depends on I2C
+	select MFD_CORE
+	select REGMAP_I2C
+	select REGMAP_IRQ
+	help
+	  The enables support for Richtek RT5120 PMIC. It includes four high
+	  efficiency buck converters and one LDO voltage regulator. The device
+	  is targeted at providing the CPU voltage, memory, I/O and peripheral
+	  power rails in home entertainment devices.
+
 config MFD_RC5T583
 	bool "Ricoh RC5T583 Power Management system device"
 	depends on I2C=y
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 858cacf..27e8add 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -234,6 +234,7 @@ obj-$(CONFIG_MFD_HI655X_PMIC)   += hi655x-pmic.o
 obj-$(CONFIG_MFD_DLN2)		+= dln2.o
 obj-$(CONFIG_MFD_RT4831)	+= rt4831.o
 obj-$(CONFIG_MFD_RT5033)	+= rt5033.o
+obj-$(CONFIG_MFD_RT5120)	+= rt5120.o
 obj-$(CONFIG_MFD_SKY81452)	+= sky81452.o
 
 intel-soc-pmic-objs		:= intel_soc_pmic_core.o intel_soc_pmic_crc.o
diff --git a/drivers/mfd/rt5120.c b/drivers/mfd/rt5120.c
new file mode 100644
index 00000000..e7c5f3c
--- /dev/null
+++ b/drivers/mfd/rt5120.c
@@ -0,0 +1,125 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <linux/i2c.h>
+#include <linux/kernel.h>
+#include <linux/mfd/core.h>
+#include <linux/module.h>
+#include <linux/mod_devicetable.h>
+#include <linux/regmap.h>
+
+#define RT5120_REG_INTENABLE	0x1D
+#define RT5120_REG_INTSTAT	0x1E
+#define RT5120_REG_FZCMODE	0x44
+
+#define RT5120_INT_HOTDIE	0
+#define RT5120_INT_PWRKEY_REL	5
+#define RT5120_INT_PWRKEY_PRESS	6
+
+static const struct regmap_range rt5120_rd_yes_ranges[] = {
+	regmap_reg_range(0x03, 0x13),
+	regmap_reg_range(0x1c, 0x20),
+	regmap_reg_range(0x44, 0x44)
+};
+
+static const struct regmap_range rt5120_wr_yes_ranges[] = {
+	regmap_reg_range(0x06, 0x13),
+	regmap_reg_range(0x1c, 0x20),
+	regmap_reg_range(0x44, 0x44)
+};
+
+static const struct regmap_access_table rt5120_rd_table = {
+	.yes_ranges = rt5120_rd_yes_ranges,
+	.n_yes_ranges = ARRAY_SIZE(rt5120_rd_yes_ranges),
+};
+
+static const struct regmap_access_table rt5120_wr_table = {
+	.yes_ranges = rt5120_wr_yes_ranges,
+	.n_yes_ranges = ARRAY_SIZE(rt5120_wr_yes_ranges),
+};
+
+static const struct regmap_config rt5120_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.max_register = RT5120_REG_FZCMODE,
+
+	.wr_table = &rt5120_wr_table,
+	.rd_table = &rt5120_rd_table,
+};
+
+static const struct regmap_irq rt5120_irqs[] = {
+	REGMAP_IRQ_REG_LINE(RT5120_INT_HOTDIE, 8),
+	REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_REL, 8),
+	REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_PRESS, 8)
+};
+
+static const struct regmap_irq_chip rt5120_irq_chip = {
+	.name = "rt5120-pmic",
+	.status_base = RT5120_REG_INTSTAT,
+	.mask_base = RT5120_REG_INTENABLE,
+	.ack_base = RT5120_REG_INTSTAT,
+	.mask_invert = true,
+	.use_ack = true,
+	.num_regs = 1,
+	.irqs = rt5120_irqs,
+	.num_irqs = ARRAY_SIZE(rt5120_irqs),
+};
+
+static const struct resource rt5120_regulator_resources[] = {
+	DEFINE_RES_IRQ(RT5120_INT_HOTDIE)
+};
+
+static const struct resource rt5120_pwrkey_resources[] = {
+	DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_PRESS, "pwrkey-press"),
+	DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_REL, "pwrkey-release")
+};
+
+static const struct mfd_cell rt5120_devs[] = {
+	MFD_CELL_RES("rt5120-regulator", rt5120_regulator_resources),
+	MFD_CELL_OF("rt5120-pwrkey", rt5120_pwrkey_resources, NULL, 0, 0,
+		    "richtek,rt5120-pwrkey")
+};
+
+static int rt5120_probe(struct i2c_client *i2c)
+{
+	struct regmap *regmap;
+	struct regmap_irq_chip_data *irq_data;
+	int ret;
+
+	regmap = devm_regmap_init_i2c(i2c, &rt5120_regmap_config);
+	if (IS_ERR(regmap)) {
+		ret = PTR_ERR(regmap);
+		dev_err(&i2c->dev, "Failed to init regmap (%d)\n", ret);
+		return ret;
+	}
+
+	ret = devm_regmap_add_irq_chip(&i2c->dev, regmap, i2c->irq,
+				       IRQF_ONESHOT, 0, &rt5120_irq_chip,
+				       &irq_data);
+	if (ret) {
+		dev_err(&i2c->dev, "Failed to add irq chip (%d)\n", ret);
+		return ret;
+	}
+
+	return devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO, rt5120_devs,
+				    ARRAY_SIZE(rt5120_devs), NULL, 0,
+				    regmap_irq_get_domain(irq_data));
+}
+
+static const struct of_device_id rt5120_device_match_table[] = {
+	{ .compatible = "richtek,rt5120", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, rt5120_device_match_table);
+
+static struct i2c_driver rt5120_driver = {
+	.driver = {
+		.name = "rt5120",
+		.of_match_table = rt5120_device_match_table,
+	},
+	.probe_new = rt5120_probe,
+};
+module_i2c_driver(rt5120_driver);
+
+MODULE_AUTHOR("ChiYuan Huang <cy_huang@richtek.com>");
+MODULE_DESCRIPTION("Richtek RT5120 I2C driver");
+MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH v2 3/4] regulator: rt5120: Add PMIC regulator support
  2022-06-22 10:01 [PATCH v2 0/4] Add Richtek RT5120 PMIC support cy_huang
  2022-06-22 10:01 ` [PATCH v2 1/4] dt-binding: mfd: " cy_huang
  2022-06-22 10:01 ` [PATCH v2 2/4] mfd: rt5120: Add Richtek " cy_huang
@ 2022-06-22 10:01 ` cy_huang
  2022-06-22 10:01 ` [PATCH v2 4/4] input: misc: rt5120: Add power key support cy_huang
  2022-06-23 13:23 ` (subset) [PATCH v2 0/4] Add Richtek RT5120 PMIC support Mark Brown
  4 siblings, 0 replies; 17+ messages in thread
From: cy_huang @ 2022-06-22 10:01 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie, dmitry.torokhov
  Cc: lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

From: ChiYuan Huang <cy_huang@richtek.com>

Add RT5120 PMIC regulator support.

It integrates 4 buck convertes, 1 LDO voltage regulator, 1 external
enable signal to control the external power source.

Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
---
Since v2:
- Add 'unevaluatedProperties: false' for regulator buck1~4/ldo/exten.
- Fix indention and remove status for powerkey.
- Refine powerkey description for more HW details.

---
 drivers/regulator/Kconfig            |  10 +
 drivers/regulator/Makefile           |   1 +
 drivers/regulator/rt5120-regulator.c | 420 +++++++++++++++++++++++++++++++++++
 3 files changed, 431 insertions(+)
 create mode 100644 drivers/regulator/rt5120-regulator.c

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index cbe0f96..d777f71 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -1047,6 +1047,16 @@ config REGULATOR_RT5033
 	  RT5033 PMIC. The device supports multiple regulators like
 	  current source, LDO and Buck.
 
+config REGULATOR_RT5120
+	tristate "Richtek RT5120 PMIC Regulators"
+	depends on MFD_RT5120
+	help
+	  This adds support for voltage regulator in Richtek RT5120 PMIC.
+	  It integrates 4 channels buck controller, 1 channel LDO, 1 EXTEN
+	  to control external power source. Only BUCK1 is adjustable from
+	  600mV to 1395mV, per step 6.250mV. The others are all fixed voltage
+	  by external hardware circuit.
+
 config REGULATOR_RT5190A
 	tristate "Richtek RT5190A PMIC"
 	depends on I2C
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 8d3ee8b6..b74ca8f 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -126,6 +126,7 @@ obj-$(CONFIG_REGULATOR_ROHM)	+= rohm-regulator.o
 obj-$(CONFIG_REGULATOR_RT4801)	+= rt4801-regulator.o
 obj-$(CONFIG_REGULATOR_RT4831)	+= rt4831-regulator.o
 obj-$(CONFIG_REGULATOR_RT5033)	+= rt5033-regulator.o
+obj-$(CONFIG_REGULATOR_RT5120)	+= rt5120-regulator.o
 obj-$(CONFIG_REGULATOR_RT5190A) += rt5190a-regulator.o
 obj-$(CONFIG_REGULATOR_RT5759)	+= rt5759-regulator.o
 obj-$(CONFIG_REGULATOR_RT6160)	+= rt6160-regulator.o
diff --git a/drivers/regulator/rt5120-regulator.c b/drivers/regulator/rt5120-regulator.c
new file mode 100644
index 00000000..8173ede
--- /dev/null
+++ b/drivers/regulator/rt5120-regulator.c
@@ -0,0 +1,420 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <linux/bits.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/of_regulator.h>
+
+#define RT5120_REG_PGSTAT	0x03
+#define RT5120_REG_CH1VID	0x06
+#define RT5120_REG_CH1SLPVID	0x07
+#define RT5120_REG_ENABLE	0x08
+#define RT5120_REG_MODECTL	0x09
+#define RT5120_REG_UVOVPROT	0x0A
+#define RT5120_REG_SLPCTL	0x0C
+#define RT5120_REG_INTSTAT	0x1E
+#define RT5120_REG_DISCHG	0x1F
+
+#define RT5120_OUTPG_MASK(rid)	BIT(rid + 1)
+#define RT5120_OUTUV_MASK(rid)	BIT(rid + 9)
+#define RT5120_OUTOV_MASK(rid)	BIT(rid + 16)
+#define RT5120_CH1VID_MASK	GENMASK(6, 0)
+#define RT5120_RIDEN_MASK(rid)	BIT(rid + 1)
+#define RT5120_RADEN_MASK(rid)	BIT(rid)
+#define RT5120_FPWM_MASK(rid)	BIT(rid + 1)
+#define RT5120_UVHICCUP_MASK	BIT(1)
+#define RT5120_OVHICCUP_MASK	BIT(0)
+#define RT5120_HOTDIE_MASK	BIT(1)
+
+#define RT5120_BUCK1_MINUV	600000
+#define RT5120_BUCK1_MAXUV	1393750
+#define RT5120_BUCK1_STEPUV	6250
+#define RT5120_BUCK1_NUM_VOLT	0x80
+
+#define RT5120_AUTO_MODE	0
+#define RT5120_FPWM_MODE	1
+
+enum {
+	RT5120_REGULATOR_BUCK1 = 0,
+	RT5120_REGULATOR_BUCK2,
+	RT5120_REGULATOR_BUCK3,
+	RT5120_REGULATOR_BUCK4,
+	RT5120_REGULATOR_LDO,
+	RT5120_REGULATOR_EXTEN,
+	RT5120_MAX_REGULATOR
+};
+
+struct rt5120_priv {
+	struct device *dev;
+	struct regmap *regmap;
+	struct regulator_desc rdesc[RT5120_MAX_REGULATOR];
+};
+
+static int rt5120_buck_set_mode(struct regulator_dev *rdev, unsigned int mode)
+{
+	struct regmap *regmap = rdev_get_regmap(rdev);
+	int rid = rdev_get_id(rdev);
+	unsigned int mask = RT5120_FPWM_MASK(rid), val;
+
+	switch (mode) {
+	case REGULATOR_MODE_NORMAL:
+		val = 0;
+		break;
+	case REGULATOR_MODE_FAST:
+		val = RT5120_FPWM_MASK(rid);
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return regmap_update_bits(regmap, RT5120_REG_MODECTL, mask, val);
+}
+
+static unsigned int rt5120_buck_get_mode(struct regulator_dev *rdev)
+{
+	struct regmap *regmap = rdev_get_regmap(rdev);
+	int ret, rid = rdev_get_id(rdev);
+	unsigned int val;
+
+	ret = regmap_read(regmap, RT5120_REG_MODECTL, &val);
+	if (ret)
+		return REGULATOR_MODE_INVALID;
+
+	if (val & RT5120_FPWM_MASK(rid))
+		return REGULATOR_MODE_FAST;
+
+	return REGULATOR_MODE_NORMAL;
+}
+
+static int rt5120_regulator_get_error_flags(struct regulator_dev *rdev,
+					    unsigned int *flags)
+{
+	struct regmap *regmap = rdev_get_regmap(rdev);
+	unsigned int stat, hd_stat, cur_flags = 0;
+	int rid = rdev_get_id(rdev), ret;
+
+	/*
+	 * reg 0x03/0x04/0x05 to indicate PG/UV/OV
+	 * use block read to descrease I/O xfer time
+	 */
+	ret = regmap_raw_read(regmap, RT5120_REG_PGSTAT, &stat, 3);
+	if (ret)
+		return ret;
+
+	ret = regmap_read(regmap, RT5120_REG_INTSTAT, &hd_stat);
+	if (ret)
+		return ret;
+
+	if (!(stat & RT5120_OUTPG_MASK(rid))) {
+		if (stat & RT5120_OUTUV_MASK(rid))
+			cur_flags |= REGULATOR_ERROR_UNDER_VOLTAGE;
+
+		if (stat & RT5120_OUTOV_MASK(rid))
+			cur_flags |= REGULATOR_ERROR_REGULATION_OUT;
+	}
+
+	if (hd_stat & RT5120_HOTDIE_MASK)
+		cur_flags |= REGULATOR_ERROR_OVER_TEMP;
+
+	*flags = cur_flags;
+	return 0;
+}
+
+static int rt5120_buck1_set_suspend_voltage(struct regulator_dev *rdev, int uV)
+{
+	struct regmap *regmap = rdev_get_regmap(rdev);
+	int sel;
+
+	if (uV < RT5120_BUCK1_MINUV || uV > RT5120_BUCK1_MAXUV)
+		return -EINVAL;
+
+	sel = (uV - RT5120_BUCK1_MINUV) / RT5120_BUCK1_STEPUV;
+	return regmap_write(regmap, RT5120_REG_CH1SLPVID, sel);
+}
+
+static int rt5120_regulator_set_suspend_enable(struct regulator_dev *rdev)
+{
+	struct regmap *regmap = rdev_get_regmap(rdev);
+	int rid = rdev_get_id(rdev);
+	unsigned int mask = RT5120_RIDEN_MASK(rid);
+
+	return regmap_update_bits(regmap, RT5120_REG_SLPCTL, mask, mask);
+}
+
+static int rt5120_regulator_set_suspend_disable(struct regulator_dev *rdev)
+{
+	struct regmap *regmap = rdev_get_regmap(rdev);
+	int rid = rdev_get_id(rdev);
+	unsigned int mask = RT5120_RIDEN_MASK(rid);
+
+	return regmap_update_bits(regmap, RT5120_REG_SLPCTL, mask, 0);
+}
+
+static const struct regulator_ops rt5120_buck1_ops = {
+	.enable = regulator_enable_regmap,
+	.disable = regulator_disable_regmap,
+	.is_enabled = regulator_is_enabled_regmap,
+	.list_voltage = regulator_list_voltage_linear,
+	.set_voltage_sel = regulator_set_voltage_sel_regmap,
+	.get_voltage_sel = regulator_get_voltage_sel_regmap,
+	.set_active_discharge = regulator_set_active_discharge_regmap,
+	.set_mode = rt5120_buck_set_mode,
+	.get_mode = rt5120_buck_get_mode,
+	.get_error_flags = rt5120_regulator_get_error_flags,
+	.set_suspend_voltage = rt5120_buck1_set_suspend_voltage,
+	.set_suspend_enable = rt5120_regulator_set_suspend_enable,
+	.set_suspend_disable = rt5120_regulator_set_suspend_disable,
+};
+
+static const struct regulator_ops rt5120_buck234_ops = {
+	.enable = regulator_enable_regmap,
+	.disable = regulator_disable_regmap,
+	.is_enabled = regulator_is_enabled_regmap,
+	.set_active_discharge = regulator_set_active_discharge_regmap,
+	.set_mode = rt5120_buck_set_mode,
+	.get_mode = rt5120_buck_get_mode,
+	.get_error_flags = rt5120_regulator_get_error_flags,
+	.set_suspend_enable = rt5120_regulator_set_suspend_enable,
+	.set_suspend_disable = rt5120_regulator_set_suspend_disable,
+};
+
+static const struct regulator_ops rt5120_ldo_ops = {
+	.enable = regulator_enable_regmap,
+	.disable = regulator_disable_regmap,
+	.is_enabled = regulator_is_enabled_regmap,
+	.set_active_discharge = regulator_set_active_discharge_regmap,
+	.get_error_flags = rt5120_regulator_get_error_flags,
+	.set_suspend_enable = rt5120_regulator_set_suspend_enable,
+	.set_suspend_disable = rt5120_regulator_set_suspend_disable,
+};
+
+static const struct regulator_ops rt5120_exten_ops = {
+	.enable = regulator_enable_regmap,
+	.disable = regulator_disable_regmap,
+	.is_enabled = regulator_is_enabled_regmap,
+	.set_suspend_enable = rt5120_regulator_set_suspend_enable,
+	.set_suspend_disable = rt5120_regulator_set_suspend_disable,
+};
+
+static unsigned int rt5120_buck_of_map_mode(unsigned int mode)
+{
+	switch (mode) {
+	case RT5120_AUTO_MODE:
+		return REGULATOR_MODE_NORMAL;
+	case RT5120_FPWM_MODE:
+		return REGULATOR_MODE_FAST;
+	default:
+		return REGULATOR_MODE_INVALID;
+	}
+}
+
+static void rt5120_fillin_regulator_desc(struct regulator_desc *desc, int rid)
+{
+	static const char * const name[] = {
+		"buck1", "buck2", "buck3", "buck4", "ldo", "exten" };
+	static const char * const sname[] = {
+		"vin1", "vin2", "vin3", "vin4", "vinldo", NULL };
+
+	/* Common regulator property */
+	desc->name = name[rid];
+	desc->supply_name = sname[rid];
+	desc->owner = THIS_MODULE;
+	desc->type = REGULATOR_VOLTAGE;
+	desc->id = rid;
+	desc->enable_reg = RT5120_REG_ENABLE;
+	desc->enable_mask = RT5120_RIDEN_MASK(rid);
+	desc->active_discharge_reg = RT5120_REG_DISCHG;
+	desc->active_discharge_mask = RT5120_RADEN_MASK(rid);
+	desc->active_discharge_on = RT5120_RADEN_MASK(rid);
+	/* Config n_voltages to 1 for all*/
+	desc->n_voltages = 1;
+
+	/* Only buck support mode change */
+	if (rid >= RT5120_REGULATOR_BUCK1 && rid <= RT5120_REGULATOR_BUCK4)
+		desc->of_map_mode = rt5120_buck_of_map_mode;
+
+	/* RID specific property init */
+	switch (rid) {
+	case RT5120_REGULATOR_BUCK1:
+		/* Only buck1 support voltage change by I2C */
+		desc->n_voltages = RT5120_BUCK1_NUM_VOLT;
+		desc->min_uV = RT5120_BUCK1_MINUV;
+		desc->uV_step = RT5120_BUCK1_STEPUV;
+		desc->vsel_reg = RT5120_REG_CH1VID,
+		desc->vsel_mask = RT5120_CH1VID_MASK,
+		desc->ops = &rt5120_buck1_ops;
+		break;
+	case RT5120_REGULATOR_BUCK2 ... RT5120_REGULATOR_BUCK4:
+		desc->ops = &rt5120_buck234_ops;
+		break;
+	case RT5120_REGULATOR_LDO:
+		desc->ops = &rt5120_ldo_ops;
+		break;
+	default:
+		desc->ops = &rt5120_exten_ops;
+	}
+}
+
+static int rt5120_of_parse_cb(struct rt5120_priv *priv, int rid,
+			      struct of_regulator_match *match)
+{
+	struct regulator_desc *desc = priv->rdesc + rid;
+	struct regulator_init_data *init_data = match->init_data;
+
+	if (!init_data || rid == RT5120_REGULATOR_BUCK1)
+		return 0;
+
+	if (init_data->constraints.min_uV != init_data->constraints.max_uV) {
+		dev_err(priv->dev, "Variable voltage for fixed regulator\n");
+		return -EINVAL;
+	}
+
+	desc->fixed_uV = init_data->constraints.min_uV;
+	return 0;
+}
+
+static struct of_regulator_match rt5120_regu_match[RT5120_MAX_REGULATOR] = {
+	[RT5120_REGULATOR_BUCK1] = { .name = "buck1", },
+	[RT5120_REGULATOR_BUCK2] = { .name = "buck2", },
+	[RT5120_REGULATOR_BUCK3] = { .name = "buck3", },
+	[RT5120_REGULATOR_BUCK4] = { .name = "buck4", },
+	[RT5120_REGULATOR_LDO] = { .name = "ldo", },
+	[RT5120_REGULATOR_EXTEN] = { .name = "exten", }
+};
+
+static int rt5120_parse_regulator_dt_data(struct rt5120_priv *priv)
+{
+	struct device *dev = priv->dev->parent;
+	struct device_node *reg_node;
+	int i, ret;
+
+	for (i = 0; i < RT5120_MAX_REGULATOR; i++) {
+		rt5120_fillin_regulator_desc(priv->rdesc + i, i);
+
+		rt5120_regu_match[i].desc = priv->rdesc + i;
+	}
+
+	reg_node = of_get_child_by_name(dev->of_node, "regulators");
+	if (!reg_node) {
+		dev_err(priv->dev, "Couldn't find 'regulators' node\n");
+		return -ENODEV;
+	}
+
+	ret = of_regulator_match(priv->dev, reg_node, rt5120_regu_match,
+				 ARRAY_SIZE(rt5120_regu_match));
+
+	of_node_put(reg_node);
+
+	if (ret < 0) {
+		dev_err(priv->dev,
+			"Error parsing regulator init data (%d)\n", ret);
+		return ret;
+	}
+
+	for (i = 0; i < RT5120_MAX_REGULATOR; i++) {
+		ret = rt5120_of_parse_cb(priv, i, rt5120_regu_match + i);
+		if (ret) {
+			dev_err(priv->dev, "Failed in [%d] of_passe_cb\n", i);
+			return ret;
+		}
+	}
+
+	return 0;
+}
+
+static int rt5120_device_property_init(struct rt5120_priv *priv)
+{
+	struct device *dev = priv->dev->parent;
+	struct device_node *np = dev->of_node;
+	bool prot_enable;
+	unsigned int prot_enable_val = 0;
+
+	/* Assign UV/OV HW protection behavior */
+	prot_enable = of_property_read_bool(np,
+					    "richtek,enable-undervolt-hiccup");
+	if (prot_enable)
+		prot_enable_val |= RT5120_UVHICCUP_MASK;
+
+	prot_enable = of_property_read_bool(np,
+					    "richtek,enable-overvolt-hiccup");
+	if (prot_enable)
+		prot_enable_val |= RT5120_OVHICCUP_MASK;
+
+	return regmap_update_bits(priv->regmap, RT5120_REG_UVOVPROT,
+				  RT5120_UVHICCUP_MASK | RT5120_OVHICCUP_MASK,
+				  prot_enable_val);
+}
+
+static int rt5120_regulator_probe(struct platform_device *pdev)
+{
+	struct rt5120_priv *priv;
+	struct regulator_dev *rdev;
+	struct regulator_config config = {};
+	int i, ret;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->dev = &pdev->dev;
+
+	priv->regmap = dev_get_regmap(pdev->dev.parent, NULL);
+	if (!priv->regmap) {
+		dev_err(&pdev->dev, "Failed to init regmap\n");
+		return -ENODEV;
+	}
+
+	ret = rt5120_device_property_init(priv);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to do property init\n");
+		return ret;
+	}
+
+	ret = rt5120_parse_regulator_dt_data(priv);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to parse dt data\n");
+		return ret;
+	}
+
+	config.dev = &pdev->dev;
+	config.regmap = priv->regmap;
+
+	for (i = 0; i < RT5120_MAX_REGULATOR; i++) {
+		config.of_node = rt5120_regu_match[i].of_node;
+		config.init_data = rt5120_regu_match[i].init_data;
+
+		rdev = devm_regulator_register(&pdev->dev, priv->rdesc + i,
+					       &config);
+		if (IS_ERR(rdev)) {
+			dev_err(&pdev->dev,
+				"Failed to register regulator [%d]\n", i);
+			return PTR_ERR(rdev);
+		}
+	}
+
+	return 0;
+}
+
+static const struct platform_device_id rt5120_regulator_dev_table[] = {
+	{ "rt5120-regulator", 0 },
+	{}
+};
+MODULE_DEVICE_TABLE(platform, rt5120_regulator_dev_table);
+
+static struct platform_driver rt5120_regulator_driver = {
+	.driver = {
+		.name = "rt5120-regulator",
+	},
+	.id_table = rt5120_regulator_dev_table,
+	.probe = rt5120_regulator_probe,
+};
+module_platform_driver(rt5120_regulator_driver);
+
+MODULE_AUTHOR("ChiYuan Huang <cy_huang@richtek.com>");
+MODULE_DESCRIPTION("Richtek RT5120 regulator driver");
+MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* [PATCH v2 4/4] input: misc: rt5120: Add power key support
  2022-06-22 10:01 [PATCH v2 0/4] Add Richtek RT5120 PMIC support cy_huang
                   ` (2 preceding siblings ...)
  2022-06-22 10:01 ` [PATCH v2 3/4] regulator: rt5120: Add PMIC regulator support cy_huang
@ 2022-06-22 10:01 ` cy_huang
  2022-07-09  4:53   ` Dmitry Torokhov
  2022-06-23 13:23 ` (subset) [PATCH v2 0/4] Add Richtek RT5120 PMIC support Mark Brown
  4 siblings, 1 reply; 17+ messages in thread
From: cy_huang @ 2022-06-22 10:01 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie, dmitry.torokhov
  Cc: lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

From: ChiYuan Huang <cy_huang@richtek.com>

Add RT5120 PMIC power key support.

Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
---
 drivers/input/misc/Kconfig         |   9 +++
 drivers/input/misc/Makefile        |   1 +
 drivers/input/misc/rt5120-pwrkey.c | 115 +++++++++++++++++++++++++++++++++++++
 3 files changed, 125 insertions(+)
 create mode 100644 drivers/input/misc/rt5120-pwrkey.c

diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index a18ab73..0b976f8 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -891,6 +891,15 @@ config INPUT_SC27XX_VIBRA
 	  To compile this driver as a module, choose M here. The module will
 	  be called sc27xx_vibra.
 
+config INPUT_RT5120_PWRKEY
+	tristate "RT5120 PMIC power key support"
+	depends on MFD_RT5120
+	help
+	  This enables support for RT5120 PMIC power key driver.
+
+	  To compile this driver as a module, choose M here. the module will
+	  be called rt5120-pwerkey.
+
 config INPUT_STPMIC1_ONKEY
 	tristate "STPMIC1 PMIC Onkey support"
 	depends on MFD_STPMIC1
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 28dfc44..d1fb00e 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -69,6 +69,7 @@ obj-$(CONFIG_INPUT_RAVE_SP_PWRBUTTON)	+= rave-sp-pwrbutton.o
 obj-$(CONFIG_INPUT_RB532_BUTTON)	+= rb532_button.o
 obj-$(CONFIG_INPUT_REGULATOR_HAPTIC)	+= regulator-haptic.o
 obj-$(CONFIG_INPUT_RETU_PWRBUTTON)	+= retu-pwrbutton.o
+obj-$(CONFIG_INPUT_RT5120_PWRKEY)	+= rt5120-pwrkey.o
 obj-$(CONFIG_INPUT_AXP20X_PEK)		+= axp20x-pek.o
 obj-$(CONFIG_INPUT_GPIO_ROTARY_ENCODER)	+= rotary_encoder.o
 obj-$(CONFIG_INPUT_RK805_PWRKEY)	+= rk805-pwrkey.o
diff --git a/drivers/input/misc/rt5120-pwrkey.c b/drivers/input/misc/rt5120-pwrkey.c
new file mode 100644
index 00000000..42bd2f3
--- /dev/null
+++ b/drivers/input/misc/rt5120-pwrkey.c
@@ -0,0 +1,115 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+#include <linux/bits.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/mod_devicetable.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+
+#define RT5120_REG_INTSTAT	0x1E
+#define RT5120_PWRKEYSTAT_MASK	BIT(7)
+
+struct rt5120_priv {
+	struct regmap *regmap;
+	struct input_dev *input;
+	int press_irq;
+	int release_irq;
+};
+
+static irqreturn_t rt5120_pwrkey_handler(int irq, void *devid)
+{
+	struct rt5120_priv *priv = devid;
+	unsigned int stat;
+	bool is_pressed;
+	int ret;
+
+	ret = regmap_read(priv->regmap, RT5120_REG_INTSTAT, &stat);
+	if (ret)
+		return IRQ_NONE;
+
+	is_pressed = !(stat & RT5120_PWRKEYSTAT_MASK);
+
+	if ((is_pressed && irq == priv->press_irq) ||
+	    (!is_pressed  && irq == priv->release_irq)) {
+		input_report_key(priv->input, KEY_POWER, is_pressed);
+		input_sync(priv->input);
+	}
+
+	return IRQ_HANDLED;
+}
+
+static int rt5120_pwrkey_probe(struct platform_device *pdev)
+{
+	struct rt5120_priv *priv;
+	int ret;
+
+	priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->regmap = dev_get_regmap(pdev->dev.parent, NULL);
+	if (!priv->regmap) {
+		dev_err(&pdev->dev, "Failed to init regmap\n");
+		return -ENODEV;
+	}
+
+	priv->press_irq = platform_get_irq_byname(pdev, "pwrkey-press");
+	if (priv->press_irq < 0)
+		return priv->press_irq;
+
+	priv->release_irq = platform_get_irq_byname(pdev, "pwrkey-release");
+	if (priv->release_irq < 0)
+		return priv->release_irq;
+
+	/* Make input device be device resource managed */
+	priv->input = devm_input_allocate_device(&pdev->dev);
+	if (!priv->input) {
+		dev_err(&pdev->dev, "Failed to allocate input device\n");
+		return -ENOMEM;
+	}
+
+	priv->input->name = "rt5120_pwrkey";
+	priv->input->phys = "rt5120_pwrkey/input0";
+	priv->input->id.bustype = BUS_I2C;
+	input_set_capability(priv->input, EV_KEY, KEY_POWER);
+
+	ret = input_register_device(priv->input);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register input device\n");
+		return ret;
+	}
+
+	ret = devm_request_threaded_irq(&pdev->dev, priv->press_irq, NULL,
+					rt5120_pwrkey_handler, 0,
+					"pwrkey-press", priv);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register pwrkey press irq\n");
+		return ret;
+	}
+
+	return devm_request_threaded_irq(&pdev->dev, priv->release_irq, NULL,
+					 rt5120_pwrkey_handler, 0,
+					 "pwrkey-release", priv);
+}
+
+static const struct of_device_id r5120_pwrkey_match_table[] = {
+	{ .compatible = "richtek,rt5120-pwrkey", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, r5120_pwrkey_match_table);
+
+static struct platform_driver rt5120_pwrkey_driver = {
+	.driver = {
+		.name = "rt5120-pwrkey",
+		.of_match_table = r5120_pwrkey_match_table,
+	},
+	.probe = rt5120_pwrkey_probe,
+};
+module_platform_driver(rt5120_pwrkey_driver);
+
+MODULE_AUTHOR("ChiYuan Huang <cy_huang@richtek.com>");
+MODULE_DESCRIPTION("Richtek RT5120 power key driver");
+MODULE_LICENSE("GPL v2");
-- 
2.7.4


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

* Re: [PATCH v2 1/4] dt-binding: mfd: Add Richtek RT5120 PMIC support
  2022-06-22 10:01 ` [PATCH v2 1/4] dt-binding: mfd: " cy_huang
@ 2022-06-22 14:48   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 17+ messages in thread
From: Krzysztof Kozlowski @ 2022-06-22 14:48 UTC (permalink / raw)
  To: cy_huang, robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie,
	dmitry.torokhov
  Cc: lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

On 22/06/2022 12:01, cy_huang wrote:
> From: ChiYuan Huang <cy_huang@richtek.com>
> 
> Add Richtek RT5120 PMIC devicetree document.
> 
> Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>

Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>

Best regards,
Krzysztof

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

* Re: (subset) [PATCH v2 0/4] Add Richtek RT5120 PMIC support
  2022-06-22 10:01 [PATCH v2 0/4] Add Richtek RT5120 PMIC support cy_huang
                   ` (3 preceding siblings ...)
  2022-06-22 10:01 ` [PATCH v2 4/4] input: misc: rt5120: Add power key support cy_huang
@ 2022-06-23 13:23 ` Mark Brown
  4 siblings, 0 replies; 17+ messages in thread
From: Mark Brown @ 2022-06-23 13:23 UTC (permalink / raw)
  To: robh+dt, krzysztof.kozlowski+dt, dmitry.torokhov, u0084500, lee.jones
  Cc: linux-input, cy_huang, linux-kernel, lgirdwood, devicetree

On Wed, 22 Jun 2022 18:01:40 +0800, cy_huang wrote:
> From: ChiYuan Huang <cy_huang@richtek.com>
> 
> This patch series is to add Richtek RT5120 PMIC support.
> In RT5120, it integrates four channels of buck converter, one channel of LDO,
> and one external enable channel to control the external power source.
> 
> Since v2:
> - Add 'unevaluatedProperties: false' for regulator buck1~4/ldo/exten.
> - Fix indention and remove status for powerkey.
> - Refine powerkey description for more HW details.
> - For the regulator property parsing, use of_property_read_u32 instead.
> - Not to overwrite regulator constraint.
> - Refine regulator desc coding.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next

Thanks!

[3/4] regulator: rt5120: Add PMIC regulator support
      commit: c0216c0e68f736d20ac02bbaaaf4a216c10e53af

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-06-22 10:01 ` [PATCH v2 2/4] mfd: rt5120: Add Richtek " cy_huang
@ 2022-06-27 14:22   ` Lee Jones
  2022-06-27 14:56     ` ChiYuan Huang
  0 siblings, 1 reply; 17+ messages in thread
From: Lee Jones @ 2022-06-27 14:22 UTC (permalink / raw)
  To: cy_huang
  Cc: robh+dt, krzysztof.kozlowski+dt, broonie, dmitry.torokhov,
	lgirdwood, cy_huang, devicetree, linux-kernel, linux-input

On Wed, 22 Jun 2022, cy_huang wrote:

> From: ChiYuan Huang <cy_huang@richtek.com>
> 
> Add Richtek RT5120 PMIC I2C driver.

Why a whole new driver?

How different is this to rt5033?

Looks like this could easily be woven into this existing support?

> Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
> ---
>  drivers/mfd/Kconfig  |  12 +++++
>  drivers/mfd/Makefile |   1 +
>  drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 138 insertions(+)
>  create mode 100644 drivers/mfd/rt5120.c
> 
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 3b59456..866619c 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -1127,6 +1127,18 @@ config MFD_RT5033
>  	  sub-devices like charger, fuel gauge, flash LED, current source,
>  	  LDO and Buck.
>  
> +config MFD_RT5120
> +	tristate "Richtek RT5120 Power Management IC"
> +	depends on I2C
> +	select MFD_CORE
> +	select REGMAP_I2C
> +	select REGMAP_IRQ
> +	help
> +	  The enables support for Richtek RT5120 PMIC. It includes four high
> +	  efficiency buck converters and one LDO voltage regulator. The device
> +	  is targeted at providing the CPU voltage, memory, I/O and peripheral
> +	  power rails in home entertainment devices.
> +
>  config MFD_RC5T583
>  	bool "Ricoh RC5T583 Power Management system device"
>  	depends on I2C=y
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index 858cacf..27e8add 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -234,6 +234,7 @@ obj-$(CONFIG_MFD_HI655X_PMIC)   += hi655x-pmic.o
>  obj-$(CONFIG_MFD_DLN2)		+= dln2.o
>  obj-$(CONFIG_MFD_RT4831)	+= rt4831.o
>  obj-$(CONFIG_MFD_RT5033)	+= rt5033.o
> +obj-$(CONFIG_MFD_RT5120)	+= rt5120.o
>  obj-$(CONFIG_MFD_SKY81452)	+= sky81452.o
>  
>  intel-soc-pmic-objs		:= intel_soc_pmic_core.o intel_soc_pmic_crc.o
> diff --git a/drivers/mfd/rt5120.c b/drivers/mfd/rt5120.c
> new file mode 100644
> index 00000000..e7c5f3c
> --- /dev/null
> +++ b/drivers/mfd/rt5120.c
> @@ -0,0 +1,125 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +#include <linux/i2c.h>
> +#include <linux/kernel.h>
> +#include <linux/mfd/core.h>
> +#include <linux/module.h>
> +#include <linux/mod_devicetable.h>
> +#include <linux/regmap.h>
> +
> +#define RT5120_REG_INTENABLE	0x1D
> +#define RT5120_REG_INTSTAT	0x1E
> +#define RT5120_REG_FZCMODE	0x44
> +
> +#define RT5120_INT_HOTDIE	0
> +#define RT5120_INT_PWRKEY_REL	5
> +#define RT5120_INT_PWRKEY_PRESS	6
> +
> +static const struct regmap_range rt5120_rd_yes_ranges[] = {
> +	regmap_reg_range(0x03, 0x13),
> +	regmap_reg_range(0x1c, 0x20),
> +	regmap_reg_range(0x44, 0x44)
> +};
> +
> +static const struct regmap_range rt5120_wr_yes_ranges[] = {
> +	regmap_reg_range(0x06, 0x13),
> +	regmap_reg_range(0x1c, 0x20),
> +	regmap_reg_range(0x44, 0x44)
> +};
> +
> +static const struct regmap_access_table rt5120_rd_table = {
> +	.yes_ranges = rt5120_rd_yes_ranges,
> +	.n_yes_ranges = ARRAY_SIZE(rt5120_rd_yes_ranges),
> +};
> +
> +static const struct regmap_access_table rt5120_wr_table = {
> +	.yes_ranges = rt5120_wr_yes_ranges,
> +	.n_yes_ranges = ARRAY_SIZE(rt5120_wr_yes_ranges),
> +};
> +
> +static const struct regmap_config rt5120_regmap_config = {
> +	.reg_bits = 8,
> +	.val_bits = 8,
> +	.max_register = RT5120_REG_FZCMODE,
> +
> +	.wr_table = &rt5120_wr_table,
> +	.rd_table = &rt5120_rd_table,
> +};
> +
> +static const struct regmap_irq rt5120_irqs[] = {
> +	REGMAP_IRQ_REG_LINE(RT5120_INT_HOTDIE, 8),
> +	REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_REL, 8),
> +	REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_PRESS, 8)
> +};
> +
> +static const struct regmap_irq_chip rt5120_irq_chip = {
> +	.name = "rt5120-pmic",
> +	.status_base = RT5120_REG_INTSTAT,
> +	.mask_base = RT5120_REG_INTENABLE,
> +	.ack_base = RT5120_REG_INTSTAT,
> +	.mask_invert = true,
> +	.use_ack = true,
> +	.num_regs = 1,
> +	.irqs = rt5120_irqs,
> +	.num_irqs = ARRAY_SIZE(rt5120_irqs),
> +};
> +
> +static const struct resource rt5120_regulator_resources[] = {
> +	DEFINE_RES_IRQ(RT5120_INT_HOTDIE)
> +};
> +
> +static const struct resource rt5120_pwrkey_resources[] = {
> +	DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_PRESS, "pwrkey-press"),
> +	DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_REL, "pwrkey-release")
> +};
> +
> +static const struct mfd_cell rt5120_devs[] = {
> +	MFD_CELL_RES("rt5120-regulator", rt5120_regulator_resources),
> +	MFD_CELL_OF("rt5120-pwrkey", rt5120_pwrkey_resources, NULL, 0, 0,
> +		    "richtek,rt5120-pwrkey")
> +};
> +
> +static int rt5120_probe(struct i2c_client *i2c)
> +{
> +	struct regmap *regmap;
> +	struct regmap_irq_chip_data *irq_data;
> +	int ret;
> +
> +	regmap = devm_regmap_init_i2c(i2c, &rt5120_regmap_config);
> +	if (IS_ERR(regmap)) {
> +		ret = PTR_ERR(regmap);
> +		dev_err(&i2c->dev, "Failed to init regmap (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	ret = devm_regmap_add_irq_chip(&i2c->dev, regmap, i2c->irq,
> +				       IRQF_ONESHOT, 0, &rt5120_irq_chip,
> +				       &irq_data);
> +	if (ret) {
> +		dev_err(&i2c->dev, "Failed to add irq chip (%d)\n", ret);
> +		return ret;
> +	}
> +
> +	return devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO, rt5120_devs,
> +				    ARRAY_SIZE(rt5120_devs), NULL, 0,
> +				    regmap_irq_get_domain(irq_data));
> +}
> +
> +static const struct of_device_id rt5120_device_match_table[] = {
> +	{ .compatible = "richtek,rt5120", },
> +	{}
> +};
> +MODULE_DEVICE_TABLE(of, rt5120_device_match_table);
> +
> +static struct i2c_driver rt5120_driver = {
> +	.driver = {
> +		.name = "rt5120",
> +		.of_match_table = rt5120_device_match_table,
> +	},
> +	.probe_new = rt5120_probe,
> +};
> +module_i2c_driver(rt5120_driver);
> +
> +MODULE_AUTHOR("ChiYuan Huang <cy_huang@richtek.com>");
> +MODULE_DESCRIPTION("Richtek RT5120 I2C driver");
> +MODULE_LICENSE("GPL v2");

-- 
Lee Jones [李琼斯]
Principal Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-06-27 14:22   ` Lee Jones
@ 2022-06-27 14:56     ` ChiYuan Huang
  2022-07-01  6:57       ` ChiYuan Huang
  0 siblings, 1 reply; 17+ messages in thread
From: ChiYuan Huang @ 2022-06-27 14:56 UTC (permalink / raw)
  To: Lee Jones
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
>
> On Wed, 22 Jun 2022, cy_huang wrote:
>
> > From: ChiYuan Huang <cy_huang@richtek.com>
> >
> > Add Richtek RT5120 PMIC I2C driver.
>
> Why a whole new driver?
>
> How different is this to rt5033?
>
> Looks like this could easily be woven into this existing support?
>
It's different with the function domain.
RT5033 is most like as the SubPMIC that includes PMU (battery
charger/gauge/led/few buck and ldo)
RT5120 is a main PMIC with default-on power that follows the boot on sequence.
RT5120 only integrates regulator and power key report module.

> > Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
> > ---
> >  drivers/mfd/Kconfig  |  12 +++++
> >  drivers/mfd/Makefile |   1 +
> >  drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
> >  3 files changed, 138 insertions(+)
> >  create mode 100644 drivers/mfd/rt5120.c
> >
> > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> > index 3b59456..866619c 100644
> > --- a/drivers/mfd/Kconfig
> > +++ b/drivers/mfd/Kconfig
> > @@ -1127,6 +1127,18 @@ config MFD_RT5033
> >         sub-devices like charger, fuel gauge, flash LED, current source,
> >         LDO and Buck.
> >
> > +config MFD_RT5120
> > +     tristate "Richtek RT5120 Power Management IC"
> > +     depends on I2C
> > +     select MFD_CORE
> > +     select REGMAP_I2C
> > +     select REGMAP_IRQ
> > +     help
> > +       The enables support for Richtek RT5120 PMIC. It includes four high
> > +       efficiency buck converters and one LDO voltage regulator. The device
> > +       is targeted at providing the CPU voltage, memory, I/O and peripheral
> > +       power rails in home entertainment devices.
> > +
> >  config MFD_RC5T583
> >       bool "Ricoh RC5T583 Power Management system device"
> >       depends on I2C=y
> > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> > index 858cacf..27e8add 100644
> > --- a/drivers/mfd/Makefile
> > +++ b/drivers/mfd/Makefile
> > @@ -234,6 +234,7 @@ obj-$(CONFIG_MFD_HI655X_PMIC)   += hi655x-pmic.o
> >  obj-$(CONFIG_MFD_DLN2)               += dln2.o
> >  obj-$(CONFIG_MFD_RT4831)     += rt4831.o
> >  obj-$(CONFIG_MFD_RT5033)     += rt5033.o
> > +obj-$(CONFIG_MFD_RT5120)     += rt5120.o
> >  obj-$(CONFIG_MFD_SKY81452)   += sky81452.o
> >
> >  intel-soc-pmic-objs          := intel_soc_pmic_core.o intel_soc_pmic_crc.o
> > diff --git a/drivers/mfd/rt5120.c b/drivers/mfd/rt5120.c
> > new file mode 100644
> > index 00000000..e7c5f3c
> > --- /dev/null
> > +++ b/drivers/mfd/rt5120.c
> > @@ -0,0 +1,125 @@
> > +// SPDX-License-Identifier: GPL-2.0+
> > +
> > +#include <linux/i2c.h>
> > +#include <linux/kernel.h>
> > +#include <linux/mfd/core.h>
> > +#include <linux/module.h>
> > +#include <linux/mod_devicetable.h>
> > +#include <linux/regmap.h>
> > +
> > +#define RT5120_REG_INTENABLE 0x1D
> > +#define RT5120_REG_INTSTAT   0x1E
> > +#define RT5120_REG_FZCMODE   0x44
> > +
> > +#define RT5120_INT_HOTDIE    0
> > +#define RT5120_INT_PWRKEY_REL        5
> > +#define RT5120_INT_PWRKEY_PRESS      6
> > +
> > +static const struct regmap_range rt5120_rd_yes_ranges[] = {
> > +     regmap_reg_range(0x03, 0x13),
> > +     regmap_reg_range(0x1c, 0x20),
> > +     regmap_reg_range(0x44, 0x44)
> > +};
> > +
> > +static const struct regmap_range rt5120_wr_yes_ranges[] = {
> > +     regmap_reg_range(0x06, 0x13),
> > +     regmap_reg_range(0x1c, 0x20),
> > +     regmap_reg_range(0x44, 0x44)
> > +};
> > +
> > +static const struct regmap_access_table rt5120_rd_table = {
> > +     .yes_ranges = rt5120_rd_yes_ranges,
> > +     .n_yes_ranges = ARRAY_SIZE(rt5120_rd_yes_ranges),
> > +};
> > +
> > +static const struct regmap_access_table rt5120_wr_table = {
> > +     .yes_ranges = rt5120_wr_yes_ranges,
> > +     .n_yes_ranges = ARRAY_SIZE(rt5120_wr_yes_ranges),
> > +};
> > +
> > +static const struct regmap_config rt5120_regmap_config = {
> > +     .reg_bits = 8,
> > +     .val_bits = 8,
> > +     .max_register = RT5120_REG_FZCMODE,
> > +
> > +     .wr_table = &rt5120_wr_table,
> > +     .rd_table = &rt5120_rd_table,
> > +};
> > +
> > +static const struct regmap_irq rt5120_irqs[] = {
> > +     REGMAP_IRQ_REG_LINE(RT5120_INT_HOTDIE, 8),
> > +     REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_REL, 8),
> > +     REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_PRESS, 8)
> > +};
> > +
> > +static const struct regmap_irq_chip rt5120_irq_chip = {
> > +     .name = "rt5120-pmic",
> > +     .status_base = RT5120_REG_INTSTAT,
> > +     .mask_base = RT5120_REG_INTENABLE,
> > +     .ack_base = RT5120_REG_INTSTAT,
> > +     .mask_invert = true,
> > +     .use_ack = true,
> > +     .num_regs = 1,
> > +     .irqs = rt5120_irqs,
> > +     .num_irqs = ARRAY_SIZE(rt5120_irqs),
> > +};
> > +
> > +static const struct resource rt5120_regulator_resources[] = {
> > +     DEFINE_RES_IRQ(RT5120_INT_HOTDIE)
> > +};
> > +
> > +static const struct resource rt5120_pwrkey_resources[] = {
> > +     DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_PRESS, "pwrkey-press"),
> > +     DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_REL, "pwrkey-release")
> > +};
> > +
> > +static const struct mfd_cell rt5120_devs[] = {
> > +     MFD_CELL_RES("rt5120-regulator", rt5120_regulator_resources),
> > +     MFD_CELL_OF("rt5120-pwrkey", rt5120_pwrkey_resources, NULL, 0, 0,
> > +                 "richtek,rt5120-pwrkey")
> > +};
> > +
> > +static int rt5120_probe(struct i2c_client *i2c)
> > +{
> > +     struct regmap *regmap;
> > +     struct regmap_irq_chip_data *irq_data;
> > +     int ret;
> > +
> > +     regmap = devm_regmap_init_i2c(i2c, &rt5120_regmap_config);
> > +     if (IS_ERR(regmap)) {
> > +             ret = PTR_ERR(regmap);
> > +             dev_err(&i2c->dev, "Failed to init regmap (%d)\n", ret);
> > +             return ret;
> > +     }
> > +
> > +     ret = devm_regmap_add_irq_chip(&i2c->dev, regmap, i2c->irq,
> > +                                    IRQF_ONESHOT, 0, &rt5120_irq_chip,
> > +                                    &irq_data);
> > +     if (ret) {
> > +             dev_err(&i2c->dev, "Failed to add irq chip (%d)\n", ret);
> > +             return ret;
> > +     }
> > +
> > +     return devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO, rt5120_devs,
> > +                                 ARRAY_SIZE(rt5120_devs), NULL, 0,
> > +                                 regmap_irq_get_domain(irq_data));
> > +}
> > +
> > +static const struct of_device_id rt5120_device_match_table[] = {
> > +     { .compatible = "richtek,rt5120", },
> > +     {}
> > +};
> > +MODULE_DEVICE_TABLE(of, rt5120_device_match_table);
> > +
> > +static struct i2c_driver rt5120_driver = {
> > +     .driver = {
> > +             .name = "rt5120",
> > +             .of_match_table = rt5120_device_match_table,
> > +     },
> > +     .probe_new = rt5120_probe,
> > +};
> > +module_i2c_driver(rt5120_driver);
> > +
> > +MODULE_AUTHOR("ChiYuan Huang <cy_huang@richtek.com>");
> > +MODULE_DESCRIPTION("Richtek RT5120 I2C driver");
> > +MODULE_LICENSE("GPL v2");
>
> --
> Lee Jones [李琼斯]
> Principal Technical Lead - Developer Services
> Linaro.org │ Open source software for Arm SoCs
> Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-06-27 14:56     ` ChiYuan Huang
@ 2022-07-01  6:57       ` ChiYuan Huang
  2022-07-01  7:37         ` Lee Jones
  0 siblings, 1 reply; 17+ messages in thread
From: ChiYuan Huang @ 2022-07-01  6:57 UTC (permalink / raw)
  To: Lee Jones
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

HI, Lee:

ChiYuan Huang <u0084500@gmail.com> 於 2022年6月27日 週一 晚上10:56寫道:
>
> Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
> >
> > On Wed, 22 Jun 2022, cy_huang wrote:
> >
> > > From: ChiYuan Huang <cy_huang@richtek.com>
> > >
> > > Add Richtek RT5120 PMIC I2C driver.
> >
> > Why a whole new driver?
> >
> > How different is this to rt5033?
> >
> > Looks like this could easily be woven into this existing support?
> >
> It's different with the function domain.
> RT5033 is most like as the SubPMIC that includes PMU (battery
> charger/gauge/led/few buck and ldo)
> RT5120 is a main PMIC with default-on power that follows the boot on sequence.
> RT5120 only integrates regulator and power key report module.
>
Since I have explained the chip difference, do you still think it's
better to merge this code into rt5033 mfd?
> > > Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
> > > ---
> > >  drivers/mfd/Kconfig  |  12 +++++
> > >  drivers/mfd/Makefile |   1 +
> > >  drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > >  3 files changed, 138 insertions(+)
> > >  create mode 100644 drivers/mfd/rt5120.c
> > >
> > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> > > index 3b59456..866619c 100644
> > > --- a/drivers/mfd/Kconfig
> > > +++ b/drivers/mfd/Kconfig
> > > @@ -1127,6 +1127,18 @@ config MFD_RT5033
> > >         sub-devices like charger, fuel gauge, flash LED, current source,
> > >         LDO and Buck.
> > >
> > > +config MFD_RT5120
> > > +     tristate "Richtek RT5120 Power Management IC"
> > > +     depends on I2C
> > > +     select MFD_CORE
> > > +     select REGMAP_I2C
> > > +     select REGMAP_IRQ
> > > +     help
> > > +       The enables support for Richtek RT5120 PMIC. It includes four high
> > > +       efficiency buck converters and one LDO voltage regulator. The device
> > > +       is targeted at providing the CPU voltage, memory, I/O and peripheral
> > > +       power rails in home entertainment devices.
> > > +
> > >  config MFD_RC5T583
> > >       bool "Ricoh RC5T583 Power Management system device"
> > >       depends on I2C=y
> > > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> > > index 858cacf..27e8add 100644
> > > --- a/drivers/mfd/Makefile
> > > +++ b/drivers/mfd/Makefile
> > > @@ -234,6 +234,7 @@ obj-$(CONFIG_MFD_HI655X_PMIC)   += hi655x-pmic.o
> > >  obj-$(CONFIG_MFD_DLN2)               += dln2.o
> > >  obj-$(CONFIG_MFD_RT4831)     += rt4831.o
> > >  obj-$(CONFIG_MFD_RT5033)     += rt5033.o
> > > +obj-$(CONFIG_MFD_RT5120)     += rt5120.o
> > >  obj-$(CONFIG_MFD_SKY81452)   += sky81452.o
> > >
> > >  intel-soc-pmic-objs          := intel_soc_pmic_core.o intel_soc_pmic_crc.o
> > > diff --git a/drivers/mfd/rt5120.c b/drivers/mfd/rt5120.c
> > > new file mode 100644
> > > index 00000000..e7c5f3c
> > > --- /dev/null
> > > +++ b/drivers/mfd/rt5120.c
> > > @@ -0,0 +1,125 @@
> > > +// SPDX-License-Identifier: GPL-2.0+
> > > +
> > > +#include <linux/i2c.h>
> > > +#include <linux/kernel.h>
> > > +#include <linux/mfd/core.h>
> > > +#include <linux/module.h>
> > > +#include <linux/mod_devicetable.h>
> > > +#include <linux/regmap.h>
> > > +
> > > +#define RT5120_REG_INTENABLE 0x1D
> > > +#define RT5120_REG_INTSTAT   0x1E
> > > +#define RT5120_REG_FZCMODE   0x44
> > > +
> > > +#define RT5120_INT_HOTDIE    0
> > > +#define RT5120_INT_PWRKEY_REL        5
> > > +#define RT5120_INT_PWRKEY_PRESS      6
> > > +
> > > +static const struct regmap_range rt5120_rd_yes_ranges[] = {
> > > +     regmap_reg_range(0x03, 0x13),
> > > +     regmap_reg_range(0x1c, 0x20),
> > > +     regmap_reg_range(0x44, 0x44)
> > > +};
> > > +
> > > +static const struct regmap_range rt5120_wr_yes_ranges[] = {
> > > +     regmap_reg_range(0x06, 0x13),
> > > +     regmap_reg_range(0x1c, 0x20),
> > > +     regmap_reg_range(0x44, 0x44)
> > > +};
> > > +
> > > +static const struct regmap_access_table rt5120_rd_table = {
> > > +     .yes_ranges = rt5120_rd_yes_ranges,
> > > +     .n_yes_ranges = ARRAY_SIZE(rt5120_rd_yes_ranges),
> > > +};
> > > +
> > > +static const struct regmap_access_table rt5120_wr_table = {
> > > +     .yes_ranges = rt5120_wr_yes_ranges,
> > > +     .n_yes_ranges = ARRAY_SIZE(rt5120_wr_yes_ranges),
> > > +};
> > > +
> > > +static const struct regmap_config rt5120_regmap_config = {
> > > +     .reg_bits = 8,
> > > +     .val_bits = 8,
> > > +     .max_register = RT5120_REG_FZCMODE,
> > > +
> > > +     .wr_table = &rt5120_wr_table,
> > > +     .rd_table = &rt5120_rd_table,
> > > +};
> > > +
> > > +static const struct regmap_irq rt5120_irqs[] = {
> > > +     REGMAP_IRQ_REG_LINE(RT5120_INT_HOTDIE, 8),
> > > +     REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_REL, 8),
> > > +     REGMAP_IRQ_REG_LINE(RT5120_INT_PWRKEY_PRESS, 8)
> > > +};
> > > +
> > > +static const struct regmap_irq_chip rt5120_irq_chip = {
> > > +     .name = "rt5120-pmic",
> > > +     .status_base = RT5120_REG_INTSTAT,
> > > +     .mask_base = RT5120_REG_INTENABLE,
> > > +     .ack_base = RT5120_REG_INTSTAT,
> > > +     .mask_invert = true,
> > > +     .use_ack = true,
> > > +     .num_regs = 1,
> > > +     .irqs = rt5120_irqs,
> > > +     .num_irqs = ARRAY_SIZE(rt5120_irqs),
> > > +};
> > > +
> > > +static const struct resource rt5120_regulator_resources[] = {
> > > +     DEFINE_RES_IRQ(RT5120_INT_HOTDIE)
> > > +};
> > > +
> > > +static const struct resource rt5120_pwrkey_resources[] = {
> > > +     DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_PRESS, "pwrkey-press"),
> > > +     DEFINE_RES_IRQ_NAMED(RT5120_INT_PWRKEY_REL, "pwrkey-release")
> > > +};
> > > +
> > > +static const struct mfd_cell rt5120_devs[] = {
> > > +     MFD_CELL_RES("rt5120-regulator", rt5120_regulator_resources),
> > > +     MFD_CELL_OF("rt5120-pwrkey", rt5120_pwrkey_resources, NULL, 0, 0,
> > > +                 "richtek,rt5120-pwrkey")
> > > +};
> > > +
> > > +static int rt5120_probe(struct i2c_client *i2c)
> > > +{
> > > +     struct regmap *regmap;
> > > +     struct regmap_irq_chip_data *irq_data;
> > > +     int ret;
> > > +
> > > +     regmap = devm_regmap_init_i2c(i2c, &rt5120_regmap_config);
> > > +     if (IS_ERR(regmap)) {
> > > +             ret = PTR_ERR(regmap);
> > > +             dev_err(&i2c->dev, "Failed to init regmap (%d)\n", ret);
> > > +             return ret;
> > > +     }
> > > +
> > > +     ret = devm_regmap_add_irq_chip(&i2c->dev, regmap, i2c->irq,
> > > +                                    IRQF_ONESHOT, 0, &rt5120_irq_chip,
> > > +                                    &irq_data);
> > > +     if (ret) {
> > > +             dev_err(&i2c->dev, "Failed to add irq chip (%d)\n", ret);
> > > +             return ret;
> > > +     }
> > > +
> > > +     return devm_mfd_add_devices(&i2c->dev, PLATFORM_DEVID_AUTO, rt5120_devs,
> > > +                                 ARRAY_SIZE(rt5120_devs), NULL, 0,
> > > +                                 regmap_irq_get_domain(irq_data));
> > > +}
> > > +
> > > +static const struct of_device_id rt5120_device_match_table[] = {
> > > +     { .compatible = "richtek,rt5120", },
> > > +     {}
> > > +};
> > > +MODULE_DEVICE_TABLE(of, rt5120_device_match_table);
> > > +
> > > +static struct i2c_driver rt5120_driver = {
> > > +     .driver = {
> > > +             .name = "rt5120",
> > > +             .of_match_table = rt5120_device_match_table,
> > > +     },
> > > +     .probe_new = rt5120_probe,
> > > +};
> > > +module_i2c_driver(rt5120_driver);
> > > +
> > > +MODULE_AUTHOR("ChiYuan Huang <cy_huang@richtek.com>");
> > > +MODULE_DESCRIPTION("Richtek RT5120 I2C driver");
> > > +MODULE_LICENSE("GPL v2");
> >
> > --
> > Lee Jones [李琼斯]
> > Principal Technical Lead - Developer Services
> > Linaro.org │ Open source software for Arm SoCs
> > Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-07-01  6:57       ` ChiYuan Huang
@ 2022-07-01  7:37         ` Lee Jones
  2022-07-01  9:56           ` ChiYuan Huang
  0 siblings, 1 reply; 17+ messages in thread
From: Lee Jones @ 2022-07-01  7:37 UTC (permalink / raw)
  To: ChiYuan Huang
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

On Fri, 01 Jul 2022, ChiYuan Huang wrote:

> HI, Lee:
> 
> ChiYuan Huang <u0084500@gmail.com> 於 2022年6月27日 週一 晚上10:56寫道:
> >
> > Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
> > >
> > > On Wed, 22 Jun 2022, cy_huang wrote:
> > >
> > > > From: ChiYuan Huang <cy_huang@richtek.com>
> > > >
> > > > Add Richtek RT5120 PMIC I2C driver.
> > >
> > > Why a whole new driver?
> > >
> > > How different is this to rt5033?
> > >
> > > Looks like this could easily be woven into this existing support?
> > >
> > It's different with the function domain.
> > RT5033 is most like as the SubPMIC that includes PMU (battery
> > charger/gauge/led/few buck and ldo)
> > RT5120 is a main PMIC with default-on power that follows the boot on sequence.
> > RT5120 only integrates regulator and power key report module.
> >
> Since I have explained the chip difference, do you still think it's
> better to merge this code into rt5033 mfd?

I think it's okay to group devices which are similar but not exactly
the same, if they can be.  The integration of this device into the
other looks trivial to my naive eyes.

A PMIC is a PMIC, main or sub.

> > > > Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
> > > > ---
> > > >  drivers/mfd/Kconfig  |  12 +++++
> > > >  drivers/mfd/Makefile |   1 +
> > > >  drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > > >  3 files changed, 138 insertions(+)
> > > >  create mode 100644 drivers/mfd/rt5120.c

-- 
Lee Jones [李琼斯]
Principal Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-07-01  7:37         ` Lee Jones
@ 2022-07-01  9:56           ` ChiYuan Huang
  2022-07-04  9:14             ` ChiYuan Huang
  0 siblings, 1 reply; 17+ messages in thread
From: ChiYuan Huang @ 2022-07-01  9:56 UTC (permalink / raw)
  To: Lee Jones
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

Lee Jones <lee.jones@linaro.org> 於 2022年7月1日 週五 下午3:38寫道:
>
> On Fri, 01 Jul 2022, ChiYuan Huang wrote:
>
> > HI, Lee:
> >
> > ChiYuan Huang <u0084500@gmail.com> 於 2022年6月27日 週一 晚上10:56寫道:
> > >
> > > Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
> > > >
> > > > On Wed, 22 Jun 2022, cy_huang wrote:
> > > >
> > > > > From: ChiYuan Huang <cy_huang@richtek.com>
> > > > >
> > > > > Add Richtek RT5120 PMIC I2C driver.
> > > >
> > > > Why a whole new driver?
> > > >
> > > > How different is this to rt5033?
> > > >
> > > > Looks like this could easily be woven into this existing support?
> > > >
> > > It's different with the function domain.
> > > RT5033 is most like as the SubPMIC that includes PMU (battery
> > > charger/gauge/led/few buck and ldo)
> > > RT5120 is a main PMIC with default-on power that follows the boot on sequence.
> > > RT5120 only integrates regulator and power key report module.
> > >
> > Since I have explained the chip difference, do you still think it's
> > better to merge this code into rt5033 mfd?
>
> I think it's okay to group devices which are similar but not exactly
> the same, if they can be.  The integration of this device into the
> other looks trivial to my naive eyes.
>
> A PMIC is a PMIC, main or sub.
>
M.. ok. I will try to group all chip changes like as devices
list/regmap_irq/regmap_config ..., etc.
Treat it as one set of chip config and use 'of_device_get_match_data'
to get the chip config data.

> > > > > Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
> > > > > ---
> > > > >  drivers/mfd/Kconfig  |  12 +++++
> > > > >  drivers/mfd/Makefile |   1 +
> > > > >  drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > >  3 files changed, 138 insertions(+)
> > > > >  create mode 100644 drivers/mfd/rt5120.c
>
> --
> Lee Jones [李琼斯]
> Principal Technical Lead - Developer Services
> Linaro.org │ Open source software for Arm SoCs
> Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-07-01  9:56           ` ChiYuan Huang
@ 2022-07-04  9:14             ` ChiYuan Huang
  2022-07-04  9:54               ` Lee Jones
  0 siblings, 1 reply; 17+ messages in thread
From: ChiYuan Huang @ 2022-07-04  9:14 UTC (permalink / raw)
  To: Lee Jones
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

Hi, Lee:

ChiYuan Huang <u0084500@gmail.com> 於 2022年7月1日 週五 下午5:56寫道:
>
> Lee Jones <lee.jones@linaro.org> 於 2022年7月1日 週五 下午3:38寫道:
> >
> > On Fri, 01 Jul 2022, ChiYuan Huang wrote:
> >
> > > HI, Lee:
> > >
> > > ChiYuan Huang <u0084500@gmail.com> 於 2022年6月27日 週一 晚上10:56寫道:
> > > >
> > > > Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
> > > > >
> > > > > On Wed, 22 Jun 2022, cy_huang wrote:
> > > > >
> > > > > > From: ChiYuan Huang <cy_huang@richtek.com>
> > > > > >
> > > > > > Add Richtek RT5120 PMIC I2C driver.
> > > > >
> > > > > Why a whole new driver?
> > > > >
> > > > > How different is this to rt5033?
> > > > >
> > > > > Looks like this could easily be woven into this existing support?
> > > > >
> > > > It's different with the function domain.
> > > > RT5033 is most like as the SubPMIC that includes PMU (battery
> > > > charger/gauge/led/few buck and ldo)
> > > > RT5120 is a main PMIC with default-on power that follows the boot on sequence.
> > > > RT5120 only integrates regulator and power key report module.
> > > >
> > > Since I have explained the chip difference, do you still think it's
> > > better to merge this code into rt5033 mfd?
> >
> > I think it's okay to group devices which are similar but not exactly
> > the same, if they can be.  The integration of this device into the
> > other looks trivial to my naive eyes.
> >
> > A PMIC is a PMIC, main or sub.
> >
> M.. ok. I will try to group all chip changes like as devices
> list/regmap_irq/regmap_config ..., etc.
> Treat it as one set of chip config and use 'of_device_get_match_data'
> to get the chip config data.
>
There's a question.
As I know, it's not the same chip series.
The rt5033 is submitted from Samsung at 2015.
The driver data is also defined in header file.

Do you still suggest to do the merge?
Even in our internal, it's difficult to find a rt5033 EVB for testing.

And one more question is the binding. If yes, for the binding, I need to add
rt5033 related.....

Actually, it's a tough work.
> > > > > > Signed-off-by: ChiYuan Huang <cy_huang@richtek.com>
> > > > > > ---
> > > > > >  drivers/mfd/Kconfig  |  12 +++++
> > > > > >  drivers/mfd/Makefile |   1 +
> > > > > >  drivers/mfd/rt5120.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++
> > > > > >  3 files changed, 138 insertions(+)
> > > > > >  create mode 100644 drivers/mfd/rt5120.c
> >
> > --
> > Lee Jones [李琼斯]
> > Principal Technical Lead - Developer Services
> > Linaro.org │ Open source software for Arm SoCs
> > Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-07-04  9:14             ` ChiYuan Huang
@ 2022-07-04  9:54               ` Lee Jones
  2022-07-05  3:04                 ` ChiYuan Huang
  0 siblings, 1 reply; 17+ messages in thread
From: Lee Jones @ 2022-07-04  9:54 UTC (permalink / raw)
  To: ChiYuan Huang
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

On Mon, 04 Jul 2022, ChiYuan Huang wrote:

> Hi, Lee:
> 
> ChiYuan Huang <u0084500@gmail.com> 於 2022年7月1日 週五 下午5:56寫道:
> >
> > Lee Jones <lee.jones@linaro.org> 於 2022年7月1日 週五 下午3:38寫道:
> > >
> > > On Fri, 01 Jul 2022, ChiYuan Huang wrote:
> > >
> > > > HI, Lee:
> > > >
> > > > ChiYuan Huang <u0084500@gmail.com> 於 2022年6月27日 週一 晚上10:56寫道:
> > > > >
> > > > > Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
> > > > > >
> > > > > > On Wed, 22 Jun 2022, cy_huang wrote:
> > > > > >
> > > > > > > From: ChiYuan Huang <cy_huang@richtek.com>
> > > > > > >
> > > > > > > Add Richtek RT5120 PMIC I2C driver.
> > > > > >
> > > > > > Why a whole new driver?
> > > > > >
> > > > > > How different is this to rt5033?
> > > > > >
> > > > > > Looks like this could easily be woven into this existing support?
> > > > > >
> > > > > It's different with the function domain.
> > > > > RT5033 is most like as the SubPMIC that includes PMU (battery
> > > > > charger/gauge/led/few buck and ldo)
> > > > > RT5120 is a main PMIC with default-on power that follows the boot on sequence.
> > > > > RT5120 only integrates regulator and power key report module.
> > > > >
> > > > Since I have explained the chip difference, do you still think it's
> > > > better to merge this code into rt5033 mfd?
> > >
> > > I think it's okay to group devices which are similar but not exactly
> > > the same, if they can be.  The integration of this device into the
> > > other looks trivial to my naive eyes.
> > >
> > > A PMIC is a PMIC, main or sub.
> > >
> > M.. ok. I will try to group all chip changes like as devices
> > list/regmap_irq/regmap_config ..., etc.
> > Treat it as one set of chip config and use 'of_device_get_match_data'
> > to get the chip config data.
> >
> There's a question.
> As I know, it's not the same chip series.
> The rt5033 is submitted from Samsung at 2015.
> The driver data is also defined in header file.
> 
> Do you still suggest to do the merge?
> Even in our internal, it's difficult to find a rt5033 EVB for testing.
> 
> And one more question is the binding. If yes, for the binding, I need to add
> rt5033 related.....
> 
> Actually, it's a tough work.

If it's genuinely difficult to integrate, you can keep them separate.

-- 
Lee Jones [李琼斯]
Principal Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 2/4] mfd: rt5120: Add Richtek PMIC support
  2022-07-04  9:54               ` Lee Jones
@ 2022-07-05  3:04                 ` ChiYuan Huang
  0 siblings, 0 replies; 17+ messages in thread
From: ChiYuan Huang @ 2022-07-05  3:04 UTC (permalink / raw)
  To: Lee Jones
  Cc: Rob Herring, Krzysztof Kozlowski, Mark Brown, dmitry.torokhov,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

Lee Jones <lee.jones@linaro.org> 於 2022年7月4日 週一 下午5:54寫道:
>
> On Mon, 04 Jul 2022, ChiYuan Huang wrote:
>
> > Hi, Lee:
> >
> > ChiYuan Huang <u0084500@gmail.com> 於 2022年7月1日 週五 下午5:56寫道:
> > >
> > > Lee Jones <lee.jones@linaro.org> 於 2022年7月1日 週五 下午3:38寫道:
> > > >
> > > > On Fri, 01 Jul 2022, ChiYuan Huang wrote:
> > > >
> > > > > HI, Lee:
> > > > >
> > > > > ChiYuan Huang <u0084500@gmail.com> 於 2022年6月27日 週一 晚上10:56寫道:
> > > > > >
> > > > > > Lee Jones <lee.jones@linaro.org> 於 2022年6月27日 週一 晚上10:22寫道:
> > > > > > >
> > > > > > > On Wed, 22 Jun 2022, cy_huang wrote:
> > > > > > >
> > > > > > > > From: ChiYuan Huang <cy_huang@richtek.com>
> > > > > > > >
> > > > > > > > Add Richtek RT5120 PMIC I2C driver.
> > > > > > >
> > > > > > > Why a whole new driver?
> > > > > > >
> > > > > > > How different is this to rt5033?
> > > > > > >
> > > > > > > Looks like this could easily be woven into this existing support?
> > > > > > >
> > > > > > It's different with the function domain.
> > > > > > RT5033 is most like as the SubPMIC that includes PMU (battery
> > > > > > charger/gauge/led/few buck and ldo)
> > > > > > RT5120 is a main PMIC with default-on power that follows the boot on sequence.
> > > > > > RT5120 only integrates regulator and power key report module.
> > > > > >
> > > > > Since I have explained the chip difference, do you still think it's
> > > > > better to merge this code into rt5033 mfd?
> > > >
> > > > I think it's okay to group devices which are similar but not exactly
> > > > the same, if they can be.  The integration of this device into the
> > > > other looks trivial to my naive eyes.
> > > >
> > > > A PMIC is a PMIC, main or sub.
> > > >
> > > M.. ok. I will try to group all chip changes like as devices
> > > list/regmap_irq/regmap_config ..., etc.
> > > Treat it as one set of chip config and use 'of_device_get_match_data'
> > > to get the chip config data.
> > >
> > There's a question.
> > As I know, it's not the same chip series.
> > The rt5033 is submitted from Samsung at 2015.
> > The driver data is also defined in header file.
> >
> > Do you still suggest to do the merge?
> > Even in our internal, it's difficult to find a rt5033 EVB for testing.
> >
> > And one more question is the binding. If yes, for the binding, I need to add
> > rt5033 related.....
> >
> > Actually, it's a tough work.
>
> If it's genuinely difficult to integrate, you can keep them separate.
>
Keep it in this patch series and wait for your reviewing.
Hope that I'm not misunderstanding.
> --
> Lee Jones [李琼斯]
> Principal Technical Lead - Developer Services
> Linaro.org │ Open source software for Arm SoCs
> Follow Linaro: Facebook | Twitter | Blog

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

* Re: [PATCH v2 4/4] input: misc: rt5120: Add power key support
  2022-06-22 10:01 ` [PATCH v2 4/4] input: misc: rt5120: Add power key support cy_huang
@ 2022-07-09  4:53   ` Dmitry Torokhov
  2022-07-11  3:43     ` ChiYuan Huang
  0 siblings, 1 reply; 17+ messages in thread
From: Dmitry Torokhov @ 2022-07-09  4:53 UTC (permalink / raw)
  To: cy_huang
  Cc: robh+dt, krzysztof.kozlowski+dt, lee.jones, broonie, lgirdwood,
	cy_huang, devicetree, linux-kernel, linux-input

Hi ChiYuan,

On Wed, Jun 22, 2022 at 06:01:44PM +0800, cy_huang wrote:
> +
> +	is_pressed = !(stat & RT5120_PWRKEYSTAT_MASK);
> +
> +	if ((is_pressed && irq == priv->press_irq) ||
> +	    (!is_pressed  && irq == priv->release_irq)) {
> +		input_report_key(priv->input, KEY_POWER, is_pressed);
> +		input_sync(priv->input);
> +	}
> +

What is the reason for checking both the status and interrupt? Can we
simply say:


	input_report_key(priv->input, KEY_POWER,
			 !(stat & RT5120_PWRKEYSTAT_MASK));
	input_sync(priv->input);

?

Thanks.

-- 
Dmitry

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

* Re: [PATCH v2 4/4] input: misc: rt5120: Add power key support
  2022-07-09  4:53   ` Dmitry Torokhov
@ 2022-07-11  3:43     ` ChiYuan Huang
  0 siblings, 0 replies; 17+ messages in thread
From: ChiYuan Huang @ 2022-07-11  3:43 UTC (permalink / raw)
  To: Dmitry Torokhov
  Cc: Rob Herring, Krzysztof Kozlowski, Lee Jones, Mark Brown,
	Liam Girdwood, cy_huang,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS, lkml,
	linux-input

Dmitry Torokhov <dmitry.torokhov@gmail.com> 於 2022年7月9日 週六 中午12:53寫道:
>
> Hi ChiYuan,
>
> On Wed, Jun 22, 2022 at 06:01:44PM +0800, cy_huang wrote:
> > +
> > +     is_pressed = !(stat & RT5120_PWRKEYSTAT_MASK);
> > +
> > +     if ((is_pressed && irq == priv->press_irq) ||
> > +         (!is_pressed  && irq == priv->release_irq)) {
> > +             input_report_key(priv->input, KEY_POWER, is_pressed);
> > +             input_sync(priv->input);
> > +     }
> > +
>
> What is the reason for checking both the status and interrupt? Can we
> simply say:
>
Just to make sure 'press/release' to matche the current state.
In the IC design, it already guarantee press/release interrupt with 50
millisecond debounce time.
But if irq is delayed handling, press and release irq will all be checked.
Although irq is one by one, but in that case, pwrkey button up will be
reported twice.
I'm not sure whether this case exists or not.
>
>         input_report_key(priv->input, KEY_POWER,
>                          !(stat & RT5120_PWRKEYSTAT_MASK));
>         input_sync(priv->input);
>
> ?
>
Yes, but how about the above comment? Is that case 'don't care'?
> Thanks.
>
> --
> Dmitry

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

end of thread, other threads:[~2022-07-11  3:43 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-06-22 10:01 [PATCH v2 0/4] Add Richtek RT5120 PMIC support cy_huang
2022-06-22 10:01 ` [PATCH v2 1/4] dt-binding: mfd: " cy_huang
2022-06-22 14:48   ` Krzysztof Kozlowski
2022-06-22 10:01 ` [PATCH v2 2/4] mfd: rt5120: Add Richtek " cy_huang
2022-06-27 14:22   ` Lee Jones
2022-06-27 14:56     ` ChiYuan Huang
2022-07-01  6:57       ` ChiYuan Huang
2022-07-01  7:37         ` Lee Jones
2022-07-01  9:56           ` ChiYuan Huang
2022-07-04  9:14             ` ChiYuan Huang
2022-07-04  9:54               ` Lee Jones
2022-07-05  3:04                 ` ChiYuan Huang
2022-06-22 10:01 ` [PATCH v2 3/4] regulator: rt5120: Add PMIC regulator support cy_huang
2022-06-22 10:01 ` [PATCH v2 4/4] input: misc: rt5120: Add power key support cy_huang
2022-07-09  4:53   ` Dmitry Torokhov
2022-07-11  3:43     ` ChiYuan Huang
2022-06-23 13:23 ` (subset) [PATCH v2 0/4] Add Richtek RT5120 PMIC support Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.