mfd: twl6030-irq: Revert to use of_match_device()

Message ID 20231029114843.15553-1-peter.ujfalusi@gmail.com
State New
Headers
Series mfd: twl6030-irq: Revert to use of_match_device() |

Commit Message

Péter Ujfalusi Oct. 29, 2023, 11:48 a.m. UTC
  The core twl chip is probed via i2c and the dev->driver->of_match_table is
NULL, causing the driver to fail to probe.

This partially reverts commit 1e0c866887f4.

Fixes: 1e0c866887f4 ("mfd: Use device_get_match_data() in a bunch of drivers")
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
---
 drivers/mfd/twl6030-irq.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)
  

Comments

Lee Jones Nov. 23, 2023, 10:37 a.m. UTC | #1
On Sun, 29 Oct 2023, Peter Ujfalusi wrote:

> The core twl chip is probed via i2c and the dev->driver->of_match_table is
> NULL, causing the driver to fail to probe.
> 
> This partially reverts commit 1e0c866887f4.
> 
> Fixes: 1e0c866887f4 ("mfd: Use device_get_match_data() in a bunch of drivers")
> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
> ---
>  drivers/mfd/twl6030-irq.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
> index f9fce8408c2c..3c03681c124c 100644
> --- a/drivers/mfd/twl6030-irq.c
> +++ b/drivers/mfd/twl6030-irq.c
> @@ -24,10 +24,10 @@
>  #include <linux/kthread.h>
>  #include <linux/mfd/twl.h>
>  #include <linux/platform_device.h>
> -#include <linux/property.h>
>  #include <linux/suspend.h>
>  #include <linux/of.h>
>  #include <linux/irqdomain.h>
> +#include <linux/of_device.h>
>  
>  #include "twl-core.h"
>  
> @@ -368,10 +368,10 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>  	int			nr_irqs;
>  	int			status;
>  	u8			mask[3];
> -	const int		*irq_tbl;
> +	const struct of_device_id *of_id;
>  
> -	irq_tbl = device_get_match_data(dev);
> -	if (!irq_tbl) {
> +	of_id = of_match_device(twl6030_of_match, dev);

I think you just dropped support for ACPI.

Rob, care to follow-up?

> +	if (!of_id || !of_id->data) {
>  		dev_err(dev, "Unknown TWL device model\n");
>  		return -EINVAL;
>  	}
> @@ -409,7 +409,7 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>  
>  	twl6030_irq->pm_nb.notifier_call = twl6030_irq_pm_notifier;
>  	atomic_set(&twl6030_irq->wakeirqs, 0);
> -	twl6030_irq->irq_mapping_tbl = irq_tbl;
> +	twl6030_irq->irq_mapping_tbl = of_id->data;
>  
>  	twl6030_irq->irq_domain =
>  		irq_domain_add_linear(node, nr_irqs,
> -- 
> 2.42.0
>
  
Lee Jones Nov. 23, 2023, 10:41 a.m. UTC | #2
On Thu, 23 Nov 2023, Lee Jones wrote:

> On Sun, 29 Oct 2023, Peter Ujfalusi wrote:
> 
> > The core twl chip is probed via i2c and the dev->driver->of_match_table is
> > NULL, causing the driver to fail to probe.
> > 
> > This partially reverts commit 1e0c866887f4.
> > 
> > Fixes: 1e0c866887f4 ("mfd: Use device_get_match_data() in a bunch of drivers")
> > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@gmail.com>
> > ---
> >  drivers/mfd/twl6030-irq.c | 10 +++++-----
> >  1 file changed, 5 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
> > index f9fce8408c2c..3c03681c124c 100644
> > --- a/drivers/mfd/twl6030-irq.c
> > +++ b/drivers/mfd/twl6030-irq.c
> > @@ -24,10 +24,10 @@
> >  #include <linux/kthread.h>
> >  #include <linux/mfd/twl.h>
> >  #include <linux/platform_device.h>
> > -#include <linux/property.h>
> >  #include <linux/suspend.h>
> >  #include <linux/of.h>
> >  #include <linux/irqdomain.h>
> > +#include <linux/of_device.h>
> >  
> >  #include "twl-core.h"
> >  
> > @@ -368,10 +368,10 @@ int twl6030_init_irq(struct device *dev, int irq_num)
> >  	int			nr_irqs;
> >  	int			status;
> >  	u8			mask[3];
> > -	const int		*irq_tbl;
> > +	const struct of_device_id *of_id;
> >  
> > -	irq_tbl = device_get_match_data(dev);
> > -	if (!irq_tbl) {
> > +	of_id = of_match_device(twl6030_of_match, dev);
> 
> I think you just dropped support for ACPI.

Ah, scrap that.  I was looking at the wrong part of 1e0c866887f4.

So what about the other drivers changed in the aforementioned commit?

Ideally we'd have a call that covers all of the various probing APIs.

> Rob, care to follow-up?

I'd still like Rob to comment.
  
Péter Ujfalusi Nov. 23, 2023, 3:40 p.m. UTC | #3
On 23/11/2023 12:41, Lee Jones wrote:
>>> @@ -368,10 +368,10 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>>>  	int			nr_irqs;
>>>  	int			status;
>>>  	u8			mask[3];
>>> -	const int		*irq_tbl;
>>> +	const struct of_device_id *of_id;
>>>  
>>> -	irq_tbl = device_get_match_data(dev);
>>> -	if (!irq_tbl) {
>>> +	of_id = of_match_device(twl6030_of_match, dev);
>>
>> I think you just dropped support for ACPI.
> 
> Ah, scrap that.  I was looking at the wrong part of 1e0c866887f4.
> 
> So what about the other drivers changed in the aforementioned commit?

Looking back at it again, I think only this patch is needed.
This is not a real driver, it is using the twl core's device.
The twl6030 is for sure broken, let me reply to the twl4030-power in a sec.

> Ideally we'd have a call that covers all of the various probing APIs.
> 
>> Rob, care to follow-up?
> 
> I'd still like Rob to comment.
>
  
Lee Jones Nov. 30, 2023, 2:05 p.m. UTC | #4
On Thu, 23 Nov 2023, Péter Ujfalusi wrote:

> 
> 
> On 23/11/2023 12:41, Lee Jones wrote:
> >>> @@ -368,10 +368,10 @@ int twl6030_init_irq(struct device *dev, int irq_num)
> >>>  	int			nr_irqs;
> >>>  	int			status;
> >>>  	u8			mask[3];
> >>> -	const int		*irq_tbl;
> >>> +	const struct of_device_id *of_id;
> >>>  
> >>> -	irq_tbl = device_get_match_data(dev);
> >>> -	if (!irq_tbl) {
> >>> +	of_id = of_match_device(twl6030_of_match, dev);
> >>
> >> I think you just dropped support for ACPI.
> > 
> > Ah, scrap that.  I was looking at the wrong part of 1e0c866887f4.
> > 
> > So what about the other drivers changed in the aforementioned commit?
> 
> Looking back at it again, I think only this patch is needed.
> This is not a real driver, it is using the twl core's device.
> The twl6030 is for sure broken, let me reply to the twl4030-power in a sec.
> 
> > Ideally we'd have a call that covers all of the various probing APIs.
> > 
> >> Rob, care to follow-up?

Rob, last chance to state your case before I apply it.
  
Lee Jones Dec. 1, 2023, 11:30 a.m. UTC | #5
On Sun, 29 Oct 2023 13:48:43 +0200, Peter Ujfalusi wrote:
> The core twl chip is probed via i2c and the dev->driver->of_match_table is
> NULL, causing the driver to fail to probe.
> 
> This partially reverts commit 1e0c866887f4.
> 
> 

Applied, thanks!

[1/1] mfd: twl6030-irq: Revert to use of_match_device()
      commit: 6caa120c47c6f8ccb94c4a1d47e44c17de04057a

--
Lee Jones [李琼斯]
  
Andreas Schwab Feb. 19, 2024, 9:52 a.m. UTC | #6
On Okt 29 2023, Peter Ujfalusi wrote:

> The core twl chip is probed via i2c and the dev->driver->of_match_table is
> NULL, causing the driver to fail to probe.
>
> This partially reverts commit 1e0c866887f4.
>
> Fixes: 1e0c866887f4 ("mfd: Use device_get_match_data() in a bunch of drivers")

That commit id does not exist, which is why it hasn't been picked up by
stable.  The correct commit id is 830fafce06e6f.
  
Lee Jones Feb. 19, 2024, 2:33 p.m. UTC | #7
On Mon, 19 Feb 2024, Andreas Schwab wrote:

> On Okt 29 2023, Peter Ujfalusi wrote:
> 
> > The core twl chip is probed via i2c and the dev->driver->of_match_table is
> > NULL, causing the driver to fail to probe.
> >
> > This partially reverts commit 1e0c866887f4.
> >
> > Fixes: 1e0c866887f4 ("mfd: Use device_get_match_data() in a bunch of drivers")
> 
> That commit id does not exist, which is why it hasn't been picked up by
> stable.  The correct commit id is 830fafce06e6f.

It hasn't been picked by Stable because no one sent it to Stable. :)
  
Tony Lindgren Feb. 26, 2024, 11:36 a.m. UTC | #8
* Lee Jones <lee@kernel.org> [240219 14:33]:
> On Mon, 19 Feb 2024, Andreas Schwab wrote:
> 
> > On Okt 29 2023, Peter Ujfalusi wrote:
> > 
> > > The core twl chip is probed via i2c and the dev->driver->of_match_table is
> > > NULL, causing the driver to fail to probe.
> > >
> > > This partially reverts commit 1e0c866887f4.
> > >
> > > Fixes: 1e0c866887f4 ("mfd: Use device_get_match_data() in a bunch of drivers")
> > 
> > That commit id does not exist, which is why it hasn't been picked up by
> > stable.  The correct commit id is 830fafce06e6f.
> 
> It hasn't been picked by Stable because no one sent it to Stable. :)

Andreas, can you please send an email asking stable to pick it up?

See Documentation/process/stable-kernel-rules.rst for details.

Regards,

Tony
  

Patch

diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
index f9fce8408c2c..3c03681c124c 100644
--- a/drivers/mfd/twl6030-irq.c
+++ b/drivers/mfd/twl6030-irq.c
@@ -24,10 +24,10 @@ 
 #include <linux/kthread.h>
 #include <linux/mfd/twl.h>
 #include <linux/platform_device.h>
-#include <linux/property.h>
 #include <linux/suspend.h>
 #include <linux/of.h>
 #include <linux/irqdomain.h>
+#include <linux/of_device.h>
 
 #include "twl-core.h"
 
@@ -368,10 +368,10 @@  int twl6030_init_irq(struct device *dev, int irq_num)
 	int			nr_irqs;
 	int			status;
 	u8			mask[3];
-	const int		*irq_tbl;
+	const struct of_device_id *of_id;
 
-	irq_tbl = device_get_match_data(dev);
-	if (!irq_tbl) {
+	of_id = of_match_device(twl6030_of_match, dev);
+	if (!of_id || !of_id->data) {
 		dev_err(dev, "Unknown TWL device model\n");
 		return -EINVAL;
 	}
@@ -409,7 +409,7 @@  int twl6030_init_irq(struct device *dev, int irq_num)
 
 	twl6030_irq->pm_nb.notifier_call = twl6030_irq_pm_notifier;
 	atomic_set(&twl6030_irq->wakeirqs, 0);
-	twl6030_irq->irq_mapping_tbl = irq_tbl;
+	twl6030_irq->irq_mapping_tbl = of_id->data;
 
 	twl6030_irq->irq_domain =
 		irq_domain_add_linear(node, nr_irqs,