2014-11-21 15:29:58

by Dmitry Lavnikevich

[permalink] [raw]
Subject: [PATCH v2 0/2] mfd: da9063: Register device with proper irq_base

This patchset fixes rtc-da9063 registration failure caused by
platform_get_irq_byname() returning local irq instead of virtual one.

In first patch version it was supposed to just transform local IRQ to
VIRQ in rtc-da9063 driver but after discussion in [1] it was decided
to register mfd device with proper irq_base instead of performing IRQ
transform. This is done with patch 1.

This way getting VIRQ in da9063-regulator driver become unnecessary
and so it is removed with patch 2.

[1] https://lkml.org/lkml/2014/11/20/242


2014-11-21 15:29:23

by Dmitry Lavnikevich

[permalink] [raw]
Subject: [PATCH v2 1/2] mfd: da9063: Get irq base dynamically before registering device

After registering mfd device with proper irq_base
platform_get_irq_byname() calls will return VIRQ instead of local IRQ.
This fixes da9063 rtc registration issue:
da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22

Signed-off-by: Dmitry Lavnikevich <[email protected]>
---
drivers/mfd/da9063-core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
index 93db8bb..f38bc98 100644
--- a/drivers/mfd/da9063-core.c
+++ b/drivers/mfd/da9063-core.c
@@ -118,7 +118,7 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
da9063->irq_base = pdata->irq_base;
} else {
da9063->flags = 0;
- da9063->irq_base = 0;
+ da9063->irq_base = -1;
}
da9063->chip_irq = irq;

@@ -168,6 +168,8 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
return ret;
}

+ da9063->irq_base = regmap_irq_chip_get_base(da9063->regmap_irq);
+
ret = mfd_add_devices(da9063->dev, -1, da9063_devs,
ARRAY_SIZE(da9063_devs), NULL, da9063->irq_base,
NULL);
--
2.1.3

2014-11-21 15:29:29

by Dmitry Lavnikevich

[permalink] [raw]
Subject: [PATCH v2 2/2] regulator: da9063: Do not transform local IRQ to virtual

Call platform_get_irq_byname() already returns VIRQ instead of local
IRQ. Passing this value to regmap_irq_get_virq() causes error which
results in IRQ registration failure. This patch fixes such behaviour.

Signed-off-by: Dmitry Lavnikevich <[email protected]>
---
drivers/regulator/da9063-regulator.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/regulator/da9063-regulator.c b/drivers/regulator/da9063-regulator.c
index 7c9461d..37dd427 100644
--- a/drivers/regulator/da9063-regulator.c
+++ b/drivers/regulator/da9063-regulator.c
@@ -867,17 +867,14 @@ static int da9063_regulator_probe(struct platform_device *pdev)
return irq;
}

- regulators->irq_ldo_lim = regmap_irq_get_virq(da9063->regmap_irq, irq);
- if (regulators->irq_ldo_lim >= 0) {
- ret = request_threaded_irq(regulators->irq_ldo_lim,
- NULL, da9063_ldo_lim_event,
- IRQF_TRIGGER_LOW | IRQF_ONESHOT,
- "LDO_LIM", regulators);
- if (ret) {
- dev_err(&pdev->dev,
- "Failed to request LDO_LIM IRQ.\n");
- regulators->irq_ldo_lim = -ENXIO;
- }
+ ret = request_threaded_irq(irq,
+ NULL, da9063_ldo_lim_event,
+ IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+ "LDO_LIM", regulators);
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Failed to request LDO_LIM IRQ.\n");
+ regulators->irq_ldo_lim = -ENXIO;
}

return 0;
--
2.1.3

2014-11-21 18:16:02

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v2 2/2] regulator: da9063: Do not transform local IRQ to virtual

On Fri, Nov 21, 2014 at 06:29:08PM +0300, Dmitry Lavnikevich wrote:
> Call platform_get_irq_byname() already returns VIRQ instead of local
> IRQ. Passing this value to regmap_irq_get_virq() causes error which
> results in IRQ registration failure. This patch fixes such behaviour.

Applied, thanks.


Attachments:
(No filename) (299.00 B)
signature.asc (473.00 B)
Digital signature
Download all attachments

2014-11-24 08:46:09

by Steve Twiss

[permalink] [raw]
Subject: RE: [PATCH v2 2/2] regulator: da9063: Do not transform local IRQ to virtual


On 21 November 2014 18:14 Mark Brown wrote

> To: Dmitry Lavnikevich
> Subject: Re: [PATCH v2 2/2] regulator: da9063: Do not transform local IRQ to virtual
>
> On Fri, Nov 21, 2014 at 06:29:08PM +0300, Dmitry Lavnikevich wrote:
> > Call platform_get_irq_byname() already returns VIRQ instead of local
> > IRQ. Passing this value to regmap_irq_get_virq() causes error which
> > results in IRQ registration failure. This patch fixes such behaviour.
>
> Applied, thanks.

Tested-by: Steve Twiss <[email protected]>

2014-11-24 10:07:50

by Lee Jones

[permalink] [raw]
Subject: Re: [PATCH v2 1/2] mfd: da9063: Get irq base dynamically before registering device

On Fri, 21 Nov 2014, Dmitry Lavnikevich wrote:

> After registering mfd device with proper irq_base
> platform_get_irq_byname() calls will return VIRQ instead of local IRQ.
> This fixes da9063 rtc registration issue:
> da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22
>
> Signed-off-by: Dmitry Lavnikevich <[email protected]>
> ---
> drivers/mfd/da9063-core.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)

Applied, thanks.

> diff --git a/drivers/mfd/da9063-core.c b/drivers/mfd/da9063-core.c
> index 93db8bb..f38bc98 100644
> --- a/drivers/mfd/da9063-core.c
> +++ b/drivers/mfd/da9063-core.c
> @@ -118,7 +118,7 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
> da9063->irq_base = pdata->irq_base;
> } else {
> da9063->flags = 0;
> - da9063->irq_base = 0;
> + da9063->irq_base = -1;
> }
> da9063->chip_irq = irq;
>
> @@ -168,6 +168,8 @@ int da9063_device_init(struct da9063 *da9063, unsigned int irq)
> return ret;
> }
>
> + da9063->irq_base = regmap_irq_chip_get_base(da9063->regmap_irq);
> +
> ret = mfd_add_devices(da9063->dev, -1, da9063_devs,
> ARRAY_SIZE(da9063_devs), NULL, da9063->irq_base,
> NULL);

--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog