Thread (9 messages) 9 messages, 3 authors, 2020-03-11

Re: [PATCH v9 3/5] mfd: Add support for the MediaTek MT6358 PMIC

From: Nicolas Boichat <hidden>
Date: 2020-03-11 03:24:48
Also in: linux-devicetree, linux-mediatek, linux-pm, linux-rtc, lkml

Thanks, much better. Just one issue left.

On Tue, Mar 10, 2020 at 6:10 PM Hsin-Hsiung Wang
[off-list ref] wrote:
quoted hunk ↗ jump to hunk
This adds support for the MediaTek MT6358 PMIC. This is a
multifunction device with the following sub modules:

- Regulator
- RTC
- Codec
- Interrupt

It is interfaced to the host controller using SPI interface
by a proprietary hardware called PMIC wrapper or pwrap.
MT6358 MFD is a child device of the pwrap.

Signed-off-by: Hsin-Hsiung Wang <redacted>
---
 drivers/mfd/Makefile                 |   2 +-
 drivers/mfd/mt6358-irq.c             | 238 +++++++++++++++++++++++++++++
 drivers/mfd/mt6397-core.c            |  55 ++++++-
 include/linux/mfd/mt6358/core.h      | 158 ++++++++++++++++++++
 include/linux/mfd/mt6358/registers.h | 282 +++++++++++++++++++++++++++++++++++
 include/linux/mfd/mt6397/core.h      |   3 +
 6 files changed, 733 insertions(+), 5 deletions(-)
 create mode 100644 drivers/mfd/mt6358-irq.c
 create mode 100644 include/linux/mfd/mt6358/core.h
 create mode 100644 include/linux/mfd/mt6358/registers.h
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index b83f172..9af1414 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -238,7 +238,7 @@ obj-$(CONFIG_INTEL_SOC_PMIC)        += intel-soc-pmic.o
 obj-$(CONFIG_INTEL_SOC_PMIC_BXTWC)     += intel_soc_pmic_bxtwc.o
 obj-$(CONFIG_INTEL_SOC_PMIC_CHTWC)     += intel_soc_pmic_chtwc.o
 obj-$(CONFIG_INTEL_SOC_PMIC_CHTDC_TI)  += intel_soc_pmic_chtdc_ti.o
-mt6397-objs    := mt6397-core.o mt6397-irq.o
+mt6397-objs                    := mt6397-core.o mt6397-irq.o mt6358-irq.o
 obj-$(CONFIG_MFD_MT6397)       += mt6397.o
 obj-$(CONFIG_INTEL_SOC_PMIC_MRFLD)     += intel_soc_pmic_mrfld.o
diff --git a/drivers/mfd/mt6358-irq.c b/drivers/mfd/mt6358-irq.c
new file mode 100644
index 0000000..0b99a39
--- /dev/null
+++ b/drivers/mfd/mt6358-irq.c
@@ -0,0 +1,238 @@
[snip]
+static irqreturn_t mt6358_irq_handler(int irq, void *data)
+{
+       struct mt6397_chip *chip = data;
+       struct pmic_irq_data *mt6358_irq_data = chip->irq_data;
+       unsigned int bit, i, top_irq_status;
+       int ret;
+
+       ret = regmap_read(chip->regmap,
+                         mt6358_irq_data->top_int_status_reg,
+                         &top_irq_status);
+       if (ret) {
+               dev_err(chip->dev,
+                       "Failed to read status from the device, ret=%d\n", ret);
+               return IRQ_NONE;
+       }
+
+       for (i = 0; i < mt6358_irq_data->num_top; i++) {
+               for (i = 0; i < mt6358_irq_data->num_top; i++) {
Only one loop needed.
+                       bit = BIT(mt6358_ints[i].top_offset);
+                       if (top_irq_status & bit) {
+                               mt6358_irq_sp_handler(chip, i);
+                               top_irq_status &= ~bit;
+                               if (!top_irq_status)
+                                       break;
+                       }
+               }
+       }
+
+       return IRQ_HANDLED;
+}
+
+static int pmic_irq_domain_map(struct irq_domain *d, unsigned int irq,
+                              irq_hw_number_t hw)
+{
+       struct mt6397_chip *mt6397 = d->host_data;
+
+       irq_set_chip_data(irq, mt6397);
+       irq_set_chip_and_handler(irq, &mt6358_irq_chip, handle_level_irq);
+       irq_set_nested_thread(irq, 1);
+       irq_set_noprobe(irq);
+
+       return 0;
+}
[snip]
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help