* [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement
@ 2023-02-09 10:51 Christoph Niedermaier
2023-02-09 10:51 ` [PATCH V2 2/2] regulator: da9062: Make the use of IRQ optional Christoph Niedermaier
` (3 more replies)
0 siblings, 4 replies; 6+ messages in thread
From: Christoph Niedermaier @ 2023-02-09 10:51 UTC (permalink / raw)
To: linux-arm-kernel
Cc: Christoph Niedermaier, Support Opensource, Lee Jones,
Adam Thomson, Liam Girdwood, Mark Brown, Marek Vasut, kernel,
linux-kernel
This patch removes the requirement for an IRQ, because for the core
functionality IRQ isn't needed. So this makes the DA9061/62 chip
useable for designs which haven't connected the IRQ pin.
Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com>
---
Cc: Support Opensource <support.opensource@diasemi.com>
Cc: Lee Jones <lee@kernel.org>
Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
Cc: Liam Girdwood <lgirdwood@gmail.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Marek Vasut <marex@denx.de>
Cc: kernel@dh-electronics.com
Cc: linux-kernel@vger.kernel.org
To: linux-arm-kernel@lists.infradead.org
---
V2: - Rebase on current next 20230209
- Add Lee Jones to Cc list
---
drivers/mfd/da9062-core.c | 98 +++++++++++++++++++++++++++++++++++------------
1 file changed, 73 insertions(+), 25 deletions(-)
diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c
index 40cde51e5719..caa597400dd1 100644
--- a/drivers/mfd/da9062-core.c
+++ b/drivers/mfd/da9062-core.c
@@ -212,6 +212,27 @@ static const struct mfd_cell da9061_devs[] = {
},
};
+static const struct mfd_cell da9061_devs_without_irq[] = {
+ {
+ .name = "da9061-core",
+ },
+ {
+ .name = "da9062-regulators",
+ },
+ {
+ .name = "da9061-watchdog",
+ .of_compatible = "dlg,da9061-watchdog",
+ },
+ {
+ .name = "da9061-thermal",
+ .of_compatible = "dlg,da9061-thermal",
+ },
+ {
+ .name = "da9061-onkey",
+ .of_compatible = "dlg,da9061-onkey",
+ },
+};
+
static const struct resource da9062_core_resources[] = {
DEFINE_RES_NAMED(DA9062_IRQ_VDD_WARN, 1, "VDD_WARN", IORESOURCE_IRQ),
};
@@ -288,6 +309,35 @@ static const struct mfd_cell da9062_devs[] = {
},
};
+static const struct mfd_cell da9062_devs_without_irq[] = {
+ {
+ .name = "da9062-core",
+ },
+ {
+ .name = "da9062-regulators",
+ },
+ {
+ .name = "da9062-watchdog",
+ .of_compatible = "dlg,da9062-watchdog",
+ },
+ {
+ .name = "da9062-thermal",
+ .of_compatible = "dlg,da9062-thermal",
+ },
+ {
+ .name = "da9062-rtc",
+ .of_compatible = "dlg,da9062-rtc",
+ },
+ {
+ .name = "da9062-onkey",
+ .of_compatible = "dlg,da9062-onkey",
+ },
+ {
+ .name = "da9062-gpio",
+ .of_compatible = "dlg,da9062-gpio",
+ },
+};
+
static int da9062_clear_fault_log(struct da9062 *chip)
{
int ret;
@@ -625,7 +675,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c)
{
const struct i2c_device_id *id = i2c_client_get_device_id(i2c);
struct da9062 *chip;
- unsigned int irq_base;
+ unsigned int irq_base = 0;
const struct mfd_cell *cell;
const struct regmap_irq_chip *irq_chip;
const struct regmap_config *config;
@@ -645,21 +695,16 @@ static int da9062_i2c_probe(struct i2c_client *i2c)
i2c_set_clientdata(i2c, chip);
chip->dev = &i2c->dev;
- if (!i2c->irq) {
- dev_err(chip->dev, "No IRQ configured\n");
- return -EINVAL;
- }
-
switch (chip->chip_type) {
case COMPAT_TYPE_DA9061:
- cell = da9061_devs;
- cell_num = ARRAY_SIZE(da9061_devs);
+ cell = i2c->irq ? da9061_devs : da9061_devs_without_irq;
+ cell_num = i2c->irq ? ARRAY_SIZE(da9061_devs) : ARRAY_SIZE(da9061_devs_without_irq);
irq_chip = &da9061_irq_chip;
config = &da9061_regmap_config;
break;
case COMPAT_TYPE_DA9062:
- cell = da9062_devs;
- cell_num = ARRAY_SIZE(da9062_devs);
+ cell = i2c->irq ? da9062_devs : da9062_devs_without_irq;
+ cell_num = i2c->irq ? ARRAY_SIZE(da9062_devs) : ARRAY_SIZE(da9062_devs_without_irq);
irq_chip = &da9062_irq_chip;
config = &da9062_regmap_config;
break;
@@ -695,29 +740,32 @@ static int da9062_i2c_probe(struct i2c_client *i2c)
if (ret)
return ret;
- ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type);
- if (ret < 0) {
- dev_err(chip->dev, "Failed to configure IRQ type\n");
- return ret;
- }
+ if (i2c->irq) {
+ ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type);
+ if (ret < 0) {
+ dev_err(chip->dev, "Failed to configure IRQ type\n");
+ return ret;
+ }
- ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
- trigger_type | IRQF_SHARED | IRQF_ONESHOT,
- -1, irq_chip, &chip->regmap_irq);
- if (ret) {
- dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
- i2c->irq, ret);
- return ret;
- }
+ ret = regmap_add_irq_chip(chip->regmap, i2c->irq,
+ trigger_type | IRQF_SHARED | IRQF_ONESHOT,
+ -1, irq_chip, &chip->regmap_irq);
+ if (ret) {
+ dev_err(chip->dev, "Failed to request IRQ %d: %d\n",
+ i2c->irq, ret);
+ return ret;
+ }
- irq_base = regmap_irq_chip_get_base(chip->regmap_irq);
+ irq_base = regmap_irq_chip_get_base(chip->regmap_irq);
+ }
ret = mfd_add_devices(chip->dev, PLATFORM_DEVID_NONE, cell,
cell_num, NULL, irq_base,
NULL);
if (ret) {
dev_err(chip->dev, "Cannot register child devices\n");
- regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
+ if (i2c->irq)
+ regmap_del_irq_chip(i2c->irq, chip->regmap_irq);
return ret;
}
--
2.11.0
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH V2 2/2] regulator: da9062: Make the use of IRQ optional 2023-02-09 10:51 [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Christoph Niedermaier @ 2023-02-09 10:51 ` Christoph Niedermaier 2023-02-09 11:17 ` [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Marek Vasut ` (2 subsequent siblings) 3 siblings, 0 replies; 6+ messages in thread From: Christoph Niedermaier @ 2023-02-09 10:51 UTC (permalink / raw) To: linux-arm-kernel Cc: Christoph Niedermaier, Support Opensource, Adam Thomson, Liam Girdwood, Mark Brown, Marek Vasut, kernel, linux-kernel This patch makes the use of IRQ optional to make the DA9061/62 usable for designs that don't have the IRQ pin connected, because the regulator is usable without IRQ. Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com> Acked-by: Mark Brown <broonie@kernel.org> Reviewed-by: Adam Ward <DLG-Adam.Ward.opensource@dm.renesas.com> --- Cc: Support Opensource <support.opensource@diasemi.com> Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> Cc: Liam Girdwood <lgirdwood@gmail.com> Cc: Mark Brown <broonie@kernel.org> Cc: Marek Vasut <marex@denx.de> Cc: kernel@dh-electronics.com Cc: linux-kernel@vger.kernel.org To: linux-arm-kernel@lists.infradead.org --- V2: - Rebase on current next 20230209 - Add Reviewed-by and Acked-by tags --- drivers/regulator/da9062-regulator.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/regulator/da9062-regulator.c b/drivers/regulator/da9062-regulator.c index 1a6324001027..653e1844dd61 100644 --- a/drivers/regulator/da9062-regulator.c +++ b/drivers/regulator/da9062-regulator.c @@ -1012,10 +1012,9 @@ static int da9062_regulator_probe(struct platform_device *pdev) } /* LDOs overcurrent event support */ - irq = platform_get_irq_byname(pdev, "LDO_LIM"); - if (irq < 0) - return irq; - regulators->irq_ldo_lim = irq; + regulators->irq_ldo_lim = platform_get_irq_byname_optional(pdev, "LDO_LIM"); + if (regulators->irq_ldo_lim < 0) + return 0; ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, da9062_ldo_lim_event, -- 2.11.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement 2023-02-09 10:51 [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Christoph Niedermaier 2023-02-09 10:51 ` [PATCH V2 2/2] regulator: da9062: Make the use of IRQ optional Christoph Niedermaier @ 2023-02-09 11:17 ` Marek Vasut 2023-02-09 13:12 ` DLG Adam Ward 2023-03-03 8:41 ` Lee Jones 3 siblings, 0 replies; 6+ messages in thread From: Marek Vasut @ 2023-02-09 11:17 UTC (permalink / raw) To: Christoph Niedermaier, linux-arm-kernel Cc: Support Opensource, Lee Jones, Adam Thomson, Liam Girdwood, Mark Brown, kernel, linux-kernel On 2/9/23 11:51, Christoph Niedermaier wrote: > This patch removes the requirement for an IRQ, because for the core > functionality IRQ isn't needed. So this makes the DA9061/62 chip > useable for designs which haven't connected the IRQ pin. > > Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com> > --- > Cc: Support Opensource <support.opensource@diasemi.com> > Cc: Lee Jones <lee@kernel.org> > Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> > Cc: Liam Girdwood <lgirdwood@gmail.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: Marek Vasut <marex@denx.de> > Cc: kernel@dh-electronics.com > Cc: linux-kernel@vger.kernel.org > To: linux-arm-kernel@lists.infradead.org > --- > V2: - Rebase on current next 20230209 > - Add Lee Jones to Cc list Reviewed-by: Marek Vasut <marex@denx.de> _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement 2023-02-09 10:51 [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Christoph Niedermaier 2023-02-09 10:51 ` [PATCH V2 2/2] regulator: da9062: Make the use of IRQ optional Christoph Niedermaier 2023-02-09 11:17 ` [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Marek Vasut @ 2023-02-09 13:12 ` DLG Adam Ward 2023-03-03 8:41 ` Lee Jones 3 siblings, 0 replies; 6+ messages in thread From: DLG Adam Ward @ 2023-02-09 13:12 UTC (permalink / raw) To: Christoph Niedermaier, linux-arm-kernel@lists.infradead.org Cc: Support Opensource, Lee Jones, Adam Thomson, Liam Girdwood, Mark Brown, Marek Vasut, kernel@dh-electronics.com, linux-kernel@vger.kernel.org On 2/9/23 11:51, Christoph Niedermaier wrote: > This patch removes the requirement for an IRQ, because for the core > functionality IRQ isn't needed. So this makes the DA9061/62 chip > useable for designs which haven't connected the IRQ pin. > > Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com> > --- > Cc: Support Opensource <support.opensource@diasemi.com> > Cc: Lee Jones <lee@kernel.org> > Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> > Cc: Liam Girdwood <lgirdwood@gmail.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: Marek Vasut <marex@denx.de> > Cc: kernel@dh-electronics.com > Cc: linux-kernel@vger.kernel.org > To: linux-arm-kernel@lists.infradead.org > --- > V2: - Rebase on current next 20230209 > - Add Lee Jones to Cc list Thanks! Reviewed-by: Adam Ward <Adam.Ward.Opensouce@diasemi.com> _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement 2023-02-09 10:51 [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Christoph Niedermaier ` (2 preceding siblings ...) 2023-02-09 13:12 ` DLG Adam Ward @ 2023-03-03 8:41 ` Lee Jones 2023-03-07 10:17 ` Christoph Niedermaier 3 siblings, 1 reply; 6+ messages in thread From: Lee Jones @ 2023-03-03 8:41 UTC (permalink / raw) To: Christoph Niedermaier Cc: linux-arm-kernel, Support Opensource, Adam Thomson, Liam Girdwood, Mark Brown, Marek Vasut, kernel, linux-kernel On Thu, 09 Feb 2023, Christoph Niedermaier wrote: > This patch removes the requirement for an IRQ, because for the core > functionality IRQ isn't needed. So this makes the DA9061/62 chip > useable for designs which haven't connected the IRQ pin. > > Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com> > --- > Cc: Support Opensource <support.opensource@diasemi.com> > Cc: Lee Jones <lee@kernel.org> > Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> > Cc: Liam Girdwood <lgirdwood@gmail.com> > Cc: Mark Brown <broonie@kernel.org> > Cc: Marek Vasut <marex@denx.de> > Cc: kernel@dh-electronics.com > Cc: linux-kernel@vger.kernel.org > To: linux-arm-kernel@lists.infradead.org > --- > V2: - Rebase on current next 20230209 > - Add Lee Jones to Cc list > --- > drivers/mfd/da9062-core.c | 98 +++++++++++++++++++++++++++++++++++------------ > 1 file changed, 73 insertions(+), 25 deletions(-) > > diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c > index 40cde51e5719..caa597400dd1 100644 > --- a/drivers/mfd/da9062-core.c > +++ b/drivers/mfd/da9062-core.c > @@ -212,6 +212,27 @@ static const struct mfd_cell da9061_devs[] = { > }, > }; > > +static const struct mfd_cell da9061_devs_without_irq[] = { "_noirq" > + { > + .name = "da9061-core", > + }, > + { > + .name = "da9062-regulators", > + }, Place the one line entries on one line please. Even better, use MFD_CELL_NAME() > + { > + .name = "da9061-watchdog", > + .of_compatible = "dlg,da9061-watchdog", > + }, MFD_CELL_OF(<name>, NULL, NULL, NULL, 0, <compatible>); > + { > + .name = "da9061-thermal", > + .of_compatible = "dlg,da9061-thermal", > + }, > + { > + .name = "da9061-onkey", > + .of_compatible = "dlg,da9061-onkey", > + }, > +}; > + > static const struct resource da9062_core_resources[] = { > DEFINE_RES_NAMED(DA9062_IRQ_VDD_WARN, 1, "VDD_WARN", IORESOURCE_IRQ), > }; > @@ -288,6 +309,35 @@ static const struct mfd_cell da9062_devs[] = { > }, > }; > > +static const struct mfd_cell da9062_devs_without_irq[] = { > + { > + .name = "da9062-core", > + }, > + { > + .name = "da9062-regulators", > + }, > + { > + .name = "da9062-watchdog", > + .of_compatible = "dlg,da9062-watchdog", > + }, > + { > + .name = "da9062-thermal", > + .of_compatible = "dlg,da9062-thermal", > + }, > + { > + .name = "da9062-rtc", > + .of_compatible = "dlg,da9062-rtc", > + }, > + { > + .name = "da9062-onkey", > + .of_compatible = "dlg,da9062-onkey", > + }, > + { > + .name = "da9062-gpio", > + .of_compatible = "dlg,da9062-gpio", > + }, > +}; As above. > static int da9062_clear_fault_log(struct da9062 *chip) > { > int ret; > @@ -625,7 +675,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c) > { > const struct i2c_device_id *id = i2c_client_get_device_id(i2c); > struct da9062 *chip; > - unsigned int irq_base; > + unsigned int irq_base = 0; > const struct mfd_cell *cell; > const struct regmap_irq_chip *irq_chip; > const struct regmap_config *config; > @@ -645,21 +695,16 @@ static int da9062_i2c_probe(struct i2c_client *i2c) > i2c_set_clientdata(i2c, chip); > chip->dev = &i2c->dev; > > - if (!i2c->irq) { > - dev_err(chip->dev, "No IRQ configured\n"); > - return -EINVAL; > - } > - > switch (chip->chip_type) { > case COMPAT_TYPE_DA9061: > - cell = da9061_devs; > - cell_num = ARRAY_SIZE(da9061_devs); > + cell = i2c->irq ? da9061_devs : da9061_devs_without_irq; > + cell_num = i2c->irq ? ARRAY_SIZE(da9061_devs) : ARRAY_SIZE(da9061_devs_without_irq); This is hideous. Why not just NULLify the resources below instead? > irq_chip = &da9061_irq_chip; > config = &da9061_regmap_config; > break; > case COMPAT_TYPE_DA9062: > - cell = da9062_devs; > - cell_num = ARRAY_SIZE(da9062_devs); > + cell = i2c->irq ? da9062_devs : da9062_devs_without_irq; > + cell_num = i2c->irq ? ARRAY_SIZE(da9062_devs) : ARRAY_SIZE(da9062_devs_without_irq); > irq_chip = &da9062_irq_chip; Still setting this despite no IRQs? > config = &da9062_regmap_config; > break; __ _||_ \ / \/ [...] if (i2c->irq <= 0) cell->resources = NULL; cell->num_resources = 0; > @@ -695,29 +740,32 @@ static int da9062_i2c_probe(struct i2c_client *i2c) > if (ret) > return ret; > > - ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type); > - if (ret < 0) { > - dev_err(chip->dev, "Failed to configure IRQ type\n"); > - return ret; > - } > + if (i2c->irq) { > + ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type); > + if (ret < 0) { > + dev_err(chip->dev, "Failed to configure IRQ type\n"); > + return ret; > + } > > - ret = regmap_add_irq_chip(chip->regmap, i2c->irq, > - trigger_type | IRQF_SHARED | IRQF_ONESHOT, > - -1, irq_chip, &chip->regmap_irq); > - if (ret) { > - dev_err(chip->dev, "Failed to request IRQ %d: %d\n", > - i2c->irq, ret); > - return ret; > - } > + ret = regmap_add_irq_chip(chip->regmap, i2c->irq, > + trigger_type | IRQF_SHARED | IRQF_ONESHOT, > + -1, irq_chip, &chip->regmap_irq); > + if (ret) { > + dev_err(chip->dev, "Failed to request IRQ %d: %d\n", > + i2c->irq, ret); > + return ret; > + } > > - irq_base = regmap_irq_chip_get_base(chip->regmap_irq); > + irq_base = regmap_irq_chip_get_base(chip->regmap_irq); > + } > > ret = mfd_add_devices(chip->dev, PLATFORM_DEVID_NONE, cell, > cell_num, NULL, irq_base, > NULL); > if (ret) { > dev_err(chip->dev, "Cannot register child devices\n"); > - regmap_del_irq_chip(i2c->irq, chip->regmap_irq); > + if (i2c->irq) > + regmap_del_irq_chip(i2c->irq, chip->regmap_irq); > return ret; > } > > -- > 2.11.0 > -- Lee Jones [李琼斯] _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement 2023-03-03 8:41 ` Lee Jones @ 2023-03-07 10:17 ` Christoph Niedermaier 0 siblings, 0 replies; 6+ messages in thread From: Christoph Niedermaier @ 2023-03-07 10:17 UTC (permalink / raw) To: Lee Jones Cc: linux-arm-kernel@lists.infradead.org, Support Opensource, Adam Thomson, Liam Girdwood, Mark Brown, Marek Vasut, kernel, linux-kernel@vger.kernel.org From: Lee Jones [mailto:lee@kernel.org] Sent: Friday, March 3, 2023 9:42 AM > > On Thu, 09 Feb 2023, Christoph Niedermaier wrote: > >> This patch removes the requirement for an IRQ, because for the core >> functionality IRQ isn't needed. So this makes the DA9061/62 chip >> useable for designs which haven't connected the IRQ pin. >> >> Signed-off-by: Christoph Niedermaier <cniedermaier@dh-electronics.com> >> --- >> Cc: Support Opensource <support.opensource@diasemi.com> >> Cc: Lee Jones <lee@kernel.org> >> Cc: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> >> Cc: Liam Girdwood <lgirdwood@gmail.com> >> Cc: Mark Brown <broonie@kernel.org> >> Cc: Marek Vasut <marex@denx.de> >> Cc: kernel@dh-electronics.com >> Cc: linux-kernel@vger.kernel.org >> To: linux-arm-kernel@lists.infradead.org >> --- >> V2: - Rebase on current next 20230209 >> - Add Lee Jones to Cc list >> --- >> drivers/mfd/da9062-core.c | 98 +++++++++++++++++++++++++++++++++++------------ >> 1 file changed, 73 insertions(+), 25 deletions(-) >> >> diff --git a/drivers/mfd/da9062-core.c b/drivers/mfd/da9062-core.c >> index 40cde51e5719..caa597400dd1 100644 >> --- a/drivers/mfd/da9062-core.c >> +++ b/drivers/mfd/da9062-core.c >> @@ -212,6 +212,27 @@ static const struct mfd_cell da9061_devs[] = { >> }, >> }; >> >> +static const struct mfd_cell da9061_devs_without_irq[] = { > > "_noirq" > >> + { >> + .name = "da9061-core", >> + }, >> + { >> + .name = "da9062-regulators", >> + }, > > Place the one line entries on one line please. > > Even better, use MFD_CELL_NAME() > >> + { >> + .name = "da9061-watchdog", >> + .of_compatible = "dlg,da9061-watchdog", >> + }, > > MFD_CELL_OF(<name>, NULL, NULL, NULL, 0, <compatible>); > I will convert all to MFD_CELL_NAME() in version 3. >> + { >> + .name = "da9061-thermal", >> + .of_compatible = "dlg,da9061-thermal", >> + }, >> + { >> + .name = "da9061-onkey", >> + .of_compatible = "dlg,da9061-onkey", >> + }, >> +}; >> + >> static const struct resource da9062_core_resources[] = { >> DEFINE_RES_NAMED(DA9062_IRQ_VDD_WARN, 1, "VDD_WARN", IORESOURCE_IRQ), >> }; >> @@ -288,6 +309,35 @@ static const struct mfd_cell da9062_devs[] = { >> }, >> }; >> >> +static const struct mfd_cell da9062_devs_without_irq[] = { >> + { >> + .name = "da9062-core", >> + }, >> + { >> + .name = "da9062-regulators", >> + }, >> + { >> + .name = "da9062-watchdog", >> + .of_compatible = "dlg,da9062-watchdog", >> + }, >> + { >> + .name = "da9062-thermal", >> + .of_compatible = "dlg,da9062-thermal", >> + }, >> + { >> + .name = "da9062-rtc", >> + .of_compatible = "dlg,da9062-rtc", >> + }, >> + { >> + .name = "da9062-onkey", >> + .of_compatible = "dlg,da9062-onkey", >> + }, >> + { >> + .name = "da9062-gpio", >> + .of_compatible = "dlg,da9062-gpio", >> + }, >> +}; > > As above. > I will convert all to MFD_CELL_NAME() in version 3. >> static int da9062_clear_fault_log(struct da9062 *chip) >> { >> int ret; >> @@ -625,7 +675,7 @@ static int da9062_i2c_probe(struct i2c_client *i2c) >> { >> const struct i2c_device_id *id = i2c_client_get_device_id(i2c); >> struct da9062 *chip; >> - unsigned int irq_base; >> + unsigned int irq_base = 0; >> const struct mfd_cell *cell; >> const struct regmap_irq_chip *irq_chip; >> const struct regmap_config *config; >> @@ -645,21 +695,16 @@ static int da9062_i2c_probe(struct i2c_client *i2c) >> i2c_set_clientdata(i2c, chip); >> chip->dev = &i2c->dev; >> >> - if (!i2c->irq) { >> - dev_err(chip->dev, "No IRQ configured\n"); >> - return -EINVAL; >> - } >> - >> switch (chip->chip_type) { >> case COMPAT_TYPE_DA9061: >> - cell = da9061_devs; >> - cell_num = ARRAY_SIZE(da9061_devs); >> + cell = i2c->irq ? da9061_devs : da9061_devs_without_irq; >> + cell_num = i2c->irq ? ARRAY_SIZE(da9061_devs) : ARRAY_SIZE(da9061_devs_without_irq); > > This is hideous. > > Why not just NULLify the resources below instead? > >> irq_chip = &da9061_irq_chip; >> config = &da9061_regmap_config; >> break; >> case COMPAT_TYPE_DA9062: >> - cell = da9062_devs; >> - cell_num = ARRAY_SIZE(da9062_devs); >> + cell = i2c->irq ? da9062_devs : da9062_devs_without_irq; >> + cell_num = i2c->irq ? ARRAY_SIZE(da9062_devs) : ARRAY_SIZE(da9062_devs_without_irq); > > irq_chip = &da9062_irq_chip; > > Still setting this despite no IRQs? I will take it into account in version 3. > >> config = &da9062_regmap_config; >> break; > __ > _||_ > \ / > \/ > > [...] > > if (i2c->irq <= 0) > cell->resources = NULL; > cell->num_resources = 0; But it is an array. I then have to go through it completely and check if it is related to IRQ. I will try to refactor the my code to be less hideous and send a version 3. > >> @@ -695,29 +740,32 @@ static int da9062_i2c_probe(struct i2c_client *i2c) >> if (ret) >> return ret; >> >> - ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type); >> - if (ret < 0) { >> - dev_err(chip->dev, "Failed to configure IRQ type\n"); >> - return ret; >> - } >> + if (i2c->irq) { >> + ret = da9062_configure_irq_type(chip, i2c->irq, &trigger_type); >> + if (ret < 0) { >> + dev_err(chip->dev, "Failed to configure IRQ type\n"); >> + return ret; >> + } >> >> - ret = regmap_add_irq_chip(chip->regmap, i2c->irq, >> - trigger_type | IRQF_SHARED | IRQF_ONESHOT, >> - -1, irq_chip, &chip->regmap_irq); >> - if (ret) { >> - dev_err(chip->dev, "Failed to request IRQ %d: %d\n", >> - i2c->irq, ret); >> - return ret; >> - } >> + ret = regmap_add_irq_chip(chip->regmap, i2c->irq, >> + trigger_type | IRQF_SHARED | IRQF_ONESHOT, >> + -1, irq_chip, &chip->regmap_irq); >> + if (ret) { >> + dev_err(chip->dev, "Failed to request IRQ %d: %d\n", >> + i2c->irq, ret); >> + return ret; >> + } >> >> - irq_base = regmap_irq_chip_get_base(chip->regmap_irq); >> + irq_base = regmap_irq_chip_get_base(chip->regmap_irq); >> + } >> >> ret = mfd_add_devices(chip->dev, PLATFORM_DEVID_NONE, cell, >> cell_num, NULL, irq_base, >> NULL); >> if (ret) { >> dev_err(chip->dev, "Cannot register child devices\n"); >> - regmap_del_irq_chip(i2c->irq, chip->regmap_irq); >> + if (i2c->irq) >> + regmap_del_irq_chip(i2c->irq, chip->regmap_irq); >> return ret; >> } >> Regards Christoph _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2023-03-07 10:30 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-02-09 10:51 [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Christoph Niedermaier 2023-02-09 10:51 ` [PATCH V2 2/2] regulator: da9062: Make the use of IRQ optional Christoph Niedermaier 2023-02-09 11:17 ` [PATCH V2 1/2] mfd: da9062: Remove IRQ requirement Marek Vasut 2023-02-09 13:12 ` DLG Adam Ward 2023-03-03 8:41 ` Lee Jones 2023-03-07 10:17 ` Christoph Niedermaier
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).