Message ID | 56B5EEB0.3040505@osg.samsung.com |
---|---|
State | Superseded |
Headers | show |
On Saturday 06 February 2016 06:31 PM, Javier Martinez Canillas wrote: > Hello Laxman, > > On 02/06/2016 03:29 AM, Laxman Dewangan wrote: >> >> So the issue is that when we create mapping, we can not delete the >> irq_chip. >> >> I saw one function from irq framework irq_dispose_mapping(unsigned >> int virq). >> >> So we need to dispose the mapping before deleting irq chip. >> >> >> Becasue it is reproduced in normal boot also if we do create mapping >> and delete the irq chip data, I will also be able to validate if I >> get some time on weekend. >> > > Thanks, that was it! I was searching yesterday for the > regmap_irq_get_virq() > counterpart and did not find it, but I was looking at > include/linux/regmap.h > and didn't think about looking at include/linux/irqdomain.h. > > Maybe we should add a regmap_irq_put_virq() that's just a wrapper around > irq_dispose_mapping() to make the API consistent and avoid this > confusion? > I see that most drivers don't dispose the mapping on their > error/remove path. > > Anyways, with this patch on top of yours 5/5 my system is able to suspend > after an unbind again: > > diff --git a/drivers/rtc/rtc-max77686.c b/drivers/rtc/rtc-max77686.c > index 45d639674c0b..8ea6d601482a 100644 > --- a/drivers/rtc/rtc-max77686.c > +++ b/drivers/rtc/rtc-max77686.c > @@ -765,6 +765,7 @@ static int max77686_rtc_remove(struct > platform_device *pdev) > struct max77686_rtc_info *info = platform_get_drvdata(pdev); > > free_irq(info->virq, info); > + irq_dispose_mapping(info->virq); > regmap_del_irq_chip(info->rtc_irq, info->rtc_irq_data); > if (info->rtc) > i2c_unregister_device(info->rtc); > > This is a bug in the current MFD driver though so I would include it as > a separate patch prior to your patch that moves the regmap and i2c init > to the RTC driver. > > When posting your new revsion feel free to add my {Reviewed,Tested}-by > tags for $SUBJECT and the new bugfix patch. Thank you very much for testing/help. Now we have all the fixes on this series. I am going to add the "put" funntion on regmap and then first fix it in the rtc driver and then apply my series on top of that. Now 7 patches..
diff --git a/drivers/rtc/rtc-max77686.c b/drivers/rtc/rtc-max77686.c index 45d639674c0b..8ea6d601482a 100644 --- a/drivers/rtc/rtc-max77686.c +++ b/drivers/rtc/rtc-max77686.c @@ -765,6 +765,7 @@ static int max77686_rtc_remove(struct platform_device *pdev) struct max77686_rtc_info *info = platform_get_drvdata(pdev); free_irq(info->virq, info); + irq_dispose_mapping(info->virq); regmap_del_irq_chip(info->rtc_irq, info->rtc_irq_data); if (info->rtc) i2c_unregister_device(info->rtc);