diff mbox

rtc: da9063: Fix ALARM interrupt registration.

Message ID 1416477273-975-1-git-send-email-d.lavnikevich@sam-solutions.com
State Rejected
Headers show

Commit Message

Dmitry Lavnikevich Nov. 20, 2014, 9:54 a.m. UTC
Call platform_get_irq_byname() returns local IRQ number. Use
regmap_irq_get_virq() to get VIRQ instead.
This fixes rtc initialization error:
da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22

Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
---
 drivers/rtc/rtc-da9063.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Steve Twiss Nov. 20, 2014, 11:23 a.m. UTC | #1
On 20 November 2014 09:55 Dmitry Lavnikevich wrote:

> Call platform_get_irq_byname() returns local IRQ number. Use
> regmap_irq_get_virq() to get VIRQ instead.
> This fixes rtc initialization error:
> da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22
> 
> Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>

Hi Dmitry,

Please refer to the previous patch :
http://patchwork.ozlabs.org/patch/329051/

Using platform_get_irq_byname() to retrieve the IRQ number
returns the VIRQ number rather than the local IRQ number for
the device. Passing that value then into regmap_irq_get_virq()
causes a failure because the function is expecting the local
IRQ number (e.g. 0, 1, 2, 3, etc).

> ---
>  drivers/rtc/rtc-da9063.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
> index 731ed1a..04743a6 100644
> --- a/drivers/rtc/rtc-da9063.c
> +++ b/drivers/rtc/rtc-da9063.c
> @@ -315,6 +315,7 @@ static int da9063_rtc_probe(struct platform_device
> *pdev)
>  	platform_set_drvdata(pdev, rtc);
> 
>  	irq_alarm = platform_get_irq_byname(pdev, "ALARM");
> +	irq_alarm = regmap_irq_get_virq(da9063->regmap_irq, irq_alarm);
>  	ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
>  					da9063_alarm_event,
>  					IRQF_TRIGGER_LOW |
> IRQF_ONESHOT,
> --
> 2.1.3

This patch above gives the following error when running on the DA9063:

da9063-rtc da9063-rtc: Failed to request ALARM IRQ -22: -22
da9063-rtc: probe of da9063-rtc failed with error -22

Regards,
Steve
Dmitry Lavnikevich Nov. 20, 2014, 1:09 p.m. UTC | #2
> On 20Nov, 2014, at 12:23, Opensource [Steve Twiss] <stwiss.opensource@diasemi.com> wrote:
> 
> On 20 November 2014 09:55 Dmitry Lavnikevich wrote:
> 
>> Call platform_get_irq_byname() returns local IRQ number. Use
>> regmap_irq_get_virq() to get VIRQ instead.
>> This fixes rtc initialization error:
>> da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22
>> 
>> Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
> 
> Hi Dmitry,
> 
> Please refer to the previous patch :
> http://patchwork.ozlabs.org/patch/329051/

Yes, I’ve seen this patch for da9055.
I have no hardware with da9055 to test it but as I understood from
da9055-core.c sources the difference is in regmap_add_irq_chip()
call. Looks like passing irq_base = -1 to it dynamically allocates
irq_base so call regmap_irq_chip_get_base() then returns base for
virtual IRQ.

In case of da9063 there is no use of
regmap_add_irq_chip/regmap_irq_chip_get_base and because of that
da9063-core registeres IRQ using irq_base=0 and therefore is local
instead of virtual.

>> ---
>> drivers/rtc/rtc-da9063.c | 1 +
>> 1 file changed, 1 insertion(+)
>> 
>> diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
>> index 731ed1a..04743a6 100644
>> --- a/drivers/rtc/rtc-da9063.c
>> +++ b/drivers/rtc/rtc-da9063.c
>> @@ -315,6 +315,7 @@ static int da9063_rtc_probe(struct platform_device
>> *pdev)
>> 	platform_set_drvdata(pdev, rtc);
>> 
>> 	irq_alarm = platform_get_irq_byname(pdev, "ALARM");
>> +	irq_alarm = regmap_irq_get_virq(da9063->regmap_irq, irq_alarm);
>> 	ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
>> 					da9063_alarm_event,
>> 					IRQF_TRIGGER_LOW |
>> IRQF_ONESHOT,
>> --
>> 2.1.3
> 
> This patch above gives the following error when running on the DA9063:
> 
> da9063-rtc da9063-rtc: Failed to request ALARM IRQ -22: -22
> da9063-rtc: probe of da9063-rtc failed with error -22

I have tested this patch on pfla02 board and it was ok. On which
board this fail occured?
Steve Twiss Nov. 20, 2014, 2:43 p.m. UTC | #3
On 20 November 2014 13:09 Dmitry Lavnikevich wrote:

> > On 20Nov, 2014, at 12:23, Steve Twiss wrote:
> > On 20 November 2014 09:55 Dmitry Lavnikevich wrote:
> >
> >> Call platform_get_irq_byname() returns local IRQ number. Use
> >> regmap_irq_get_virq() to get VIRQ instead.
> >> This fixes rtc initialization error:
> >> da9063-rtc da9063-rtc: Failed to request ALARM IRQ 1: -22
> >>
> >> Signed-off-by: Dmitry Lavnikevich <d.lavnikevich@sam-solutions.com>
> >
> > Hi Dmitry,
> >
> > Please refer to the previous patch :
> > http://patchwork.ozlabs.org/patch/329051/
> 
> Yes, I’ve seen this patch for da9055.
> I have no hardware with da9055 to test it but as I understood from
> da9055-core.c sources the difference is in regmap_add_irq_chip()
> call. Looks like passing irq_base = -1 to it dynamically allocates
> irq_base so call regmap_irq_chip_get_base() then returns base for
> virtual IRQ.

Hi Dmitry,
-- that is what I expect ... mmm..

[...]
> >
> > da9063-rtc da9063-rtc: Failed to request ALARM IRQ -22: -22
> > da9063-rtc: probe of da9063-rtc failed with error -22
> 
> I have tested this patch on pfla02 board and it was ok. On which
> board this fail occurred?

I am using a MCIMX6DL-SDP board -- although I the differences are in
my code base and not the platform in this case.
My apologies 

Regards,
Steve

patch follows:

=== DIFF of drivers/regulator/da9063-regulator.c ... linux-next/v3.18-rc5 
870,880c870,877
< 	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;
=== DIFF of drivers/mfd/da9063-core.c ... linux-next/v3.18-rc5 <> InSparse
121c121
< 		da9063->irq_base = 0;
---
> 		da9063->irq_base = -1;
170a171,172
> 	da9063->irq_base = regmap_irq_chip_get_base(da9063->regmap_irq);
>
Dmitry Lavnikevich Nov. 21, 2014, 12:04 p.m. UTC | #4
> On 20Nov, 2014, at 15:43, Opensource [Steve Twiss] <stwiss.opensource@diasemi.com> wrote:
> 
> On 20 November 2014 13:09 Dmitry Lavnikevich wrote:
> [...]
>>> 
>>> da9063-rtc da9063-rtc: Failed to request ALARM IRQ -22: -22
>>> da9063-rtc: probe of da9063-rtc failed with error -22
>> 
>> I have tested this patch on pfla02 board and it was ok. On which
>> board this fail occurred?
> 
> I am using a MCIMX6DL-SDP board -- although I the differences are in
> my code base and not the platform in this case.
> My apologies 
> 
> Regards,
> Steve
> 
> patch follows:
[…]

I see that your code also fixes the issue. And it is more consistent with da9055 implementation.
So there is no need for my fix if yours is already there. Is it already accepted on some mainline branch?
If not then are you going to submit it soon?
Steve Twiss Nov. 21, 2014, 1:23 p.m. UTC | #5
On 21 November 2014 12:04 Dmitry Lavnikevich wrote: 

> > On 20Nov, 2014, at 15:43, Steve Twiss wrote:
> > On 20 November 2014 13:09 Dmitry Lavnikevich wrote:
> > [...]
> >>>
> >>> da9063-rtc da9063-rtc: Failed to request ALARM IRQ -22: -22
> >>> da9063-rtc: probe of da9063-rtc failed with error -22
> >>
> >> I have tested this patch on pfla02 board and it was ok. On which
> >> board this fail occurred?
> >
> > I am using a MCIMX6DL-SDP board -- although I the differences are in
> > my code base and not the platform in this case.
> > My apologies
> >
> > Regards,
> > Steve
> >
> > patch follows:
> […]
> 
> I see that your code also fixes the issue. And it is more consistent with
> da9055 implementation.
> So there is no need for my fix if yours is already there. Is it already accepted
> on some mainline branch?

Hi Dmitry,

No, unfortunately -- I have not had time to send it to the kernel -- it has been
in my buffer for a long time

> If not then are you going to submit it soon?

If you want to submit this, then I will support with Ack: and Tested-by:
but probably it will be quicker not to wait for me.

Regards,
Stephen
diff mbox

Patch

diff --git a/drivers/rtc/rtc-da9063.c b/drivers/rtc/rtc-da9063.c
index 731ed1a..04743a6 100644
--- a/drivers/rtc/rtc-da9063.c
+++ b/drivers/rtc/rtc-da9063.c
@@ -315,6 +315,7 @@  static int da9063_rtc_probe(struct platform_device *pdev)
 	platform_set_drvdata(pdev, rtc);
 
 	irq_alarm = platform_get_irq_byname(pdev, "ALARM");
+	irq_alarm = regmap_irq_get_virq(da9063->regmap_irq, irq_alarm);
 	ret = devm_request_threaded_irq(&pdev->dev, irq_alarm, NULL,
 					da9063_alarm_event,
 					IRQF_TRIGGER_LOW | IRQF_ONESHOT,