diff mbox

[v2,1/4] MFD: Palmas: Check if interrupts property exists and then only request irq

Message ID 1371549692-7361-2-git-send-email-j-keerthy@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

J, KEERTHY June 18, 2013, 10:01 a.m. UTC
Check if interrupts property exists and then only request irq.
On some boards INT line might not be connected to a valid
irq line on the application processor. Hence keeping a check
before requesting irq.

Boot tested on OMAP5-UEVM board.

Signed-off-by: J Keerthy <j-keerthy@ti.com>
---
 drivers/mfd/palmas.c |   12 +++++++++++-
 1 files changed, 11 insertions(+), 1 deletions(-)

Comments

Stephen Warren June 18, 2013, 3:51 p.m. UTC | #1
On 06/18/2013 04:01 AM, J Keerthy wrote:
> Check if interrupts property exists and then only request irq.
> On some boards INT line might not be connected to a valid
> irq line on the application processor. Hence keeping a check
> before requesting irq.

When there is no interrupts property, surely i2c->irq == 0, which is an
invalid IRQ, and hence there's no need to check this before copying the
value?

In other words, I think this whole patch could just be:

+ 	palmas->irq = i2c->irq;

right?
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
J, KEERTHY June 18, 2013, 4:54 p.m. UTC | #2
Hi Stephen,

> -----Original Message-----
> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> Sent: Tuesday, June 18, 2013 9:22 PM
> To: J, KEERTHY
> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> ldewangan@nvidia.com; sameo@linux.intel.com; grant.likely@secretlab.ca;
> swarren@nvidia.com; linux-kernel@vger.kernel.org; linux-
> doc@vger.kernel.org; gg@slimlogic.co.uk
> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts property
> exists and then only request irq
> 
> On 06/18/2013 04:01 AM, J Keerthy wrote:
> > Check if interrupts property exists and then only request irq.
> > On some boards INT line might not be connected to a valid irq line on
> > the application processor. Hence keeping a check before requesting
> > irq.
> 
> When there is no interrupts property, surely i2c->irq == 0, which is an
> invalid IRQ, and hence there's no need to check this before copying the
> value?

The intent here is NOT to request irq with 0 or Invalid IRQ. The board
File will not populate the interrupts entry if the INT line is not
Connected. Hence the patch checks for the 'interrupts' property.

This is essential since I do not want the probe to return error
Just because the i2c->irq == 0. The explicit check for the property
Ensures that the board does not have the INT line connected to
A valid interrupt line on the other side.

> 
> In other words, I think this whole patch could just be:
> 
> + 	palmas->irq = i2c->irq;
> 
> right?

Just this will cause a probe failure. That is not what is needed.
Instead the probe should continue skipping irq part.

Regards,
Keerthy
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Warren June 18, 2013, 5:08 p.m. UTC | #3
On 06/18/2013 10:54 AM, J, KEERTHY wrote:
> Hi Stephen,
> 
>> -----Original Message-----
>> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
>> Sent: Tuesday, June 18, 2013 9:22 PM
>> To: J, KEERTHY
>> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
>> ldewangan@nvidia.com; sameo@linux.intel.com; grant.likely@secretlab.ca;
>> swarren@nvidia.com; linux-kernel@vger.kernel.org; linux-
>> doc@vger.kernel.org; gg@slimlogic.co.uk
>> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts property
>> exists and then only request irq
>>
>> On 06/18/2013 04:01 AM, J Keerthy wrote:
>>> Check if interrupts property exists and then only request irq.
>>> On some boards INT line might not be connected to a valid irq line on
>>> the application processor. Hence keeping a check before requesting
>>> irq.
>>
>> When there is no interrupts property, surely i2c->irq == 0, which is an
>> invalid IRQ, and hence there's no need to check this before copying the
>> value?
> 
> The intent here is NOT to request irq with 0 or Invalid IRQ.

Sure.

> The board File will not populate the interrupts entry if the INT line is not
> Connected.

Do you mean the interrupts DT property won't be present if there is no
interrupt. If so, sure.

> Hence the patch checks for the 'interrupts' property.

That shouldn't be necessary; IIRC, the I2C core has already parsed the
interrupts property if there was one, and if there wasn't, it has set
i2c->irq to some invalid value already.

So, you simply need to check the value in i2c->irq, and don't need to
look at the DT at all.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
J, KEERTHY June 18, 2013, 5:19 p.m. UTC | #4
> -----Original Message-----
> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> Sent: Tuesday, June 18, 2013 10:38 PM
> To: J, KEERTHY
> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> ldewangan@nvidia.com; sameo@linux.intel.com; grant.likely@secretlab.ca;
> swarren@nvidia.com; linux-kernel@vger.kernel.org; linux-
> doc@vger.kernel.org; gg@slimlogic.co.uk
> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts property
> exists and then only request irq
> 
> On 06/18/2013 10:54 AM, J, KEERTHY wrote:
> > Hi Stephen,
> >
> >> -----Original Message-----
> >> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> >> Sent: Tuesday, June 18, 2013 9:22 PM
> >> To: J, KEERTHY
> >> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> >> ldewangan@nvidia.com; sameo@linux.intel.com;
> >> grant.likely@secretlab.ca; swarren@nvidia.com;
> >> linux-kernel@vger.kernel.org; linux- doc@vger.kernel.org;
> >> gg@slimlogic.co.uk
> >> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts
> property
> >> exists and then only request irq
> >>
> >> On 06/18/2013 04:01 AM, J Keerthy wrote:
> >>> Check if interrupts property exists and then only request irq.
> >>> On some boards INT line might not be connected to a valid irq line
> >>> on the application processor. Hence keeping a check before
> >>> requesting irq.
> >>
> >> When there is no interrupts property, surely i2c->irq == 0, which is
> >> an invalid IRQ, and hence there's no need to check this before
> >> copying the value?
> >
> > The intent here is NOT to request irq with 0 or Invalid IRQ.
> 
> Sure.
> 
> > The board File will not populate the interrupts entry if the INT line
> > is not Connected.
> 
> Do you mean the interrupts DT property won't be present if there is no
> interrupt. If so, sure.

Yes.

> 
> > Hence the patch checks for the 'interrupts' property.
> 
> That shouldn't be necessary; IIRC, the I2C core has already parsed the
> interrupts property if there was one, and if there wasn't, it has set
> i2c->irq to some invalid value already.
> 
> So, you simply need to check the value in i2c->irq, and don't need to
> look at the DT at all.

Instead of checking the Invalid irq value which most likely can be 0.
I am not sure.
I am explicitly checking if the interrupts property exists or not.

If not present then It throws out a warning. Either there is no
Valid INT line connection or the DeviceTree was not populated fully.

This additional piece of information is good to have in the driver
IMHO. Let me know if this is rational enough to have in the driver.

Regards,
Keerthy
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Stephen Warren June 18, 2013, 5:22 p.m. UTC | #5
On 06/18/2013 11:19 AM, J, KEERTHY wrote:
> 
> 
>> -----Original Message-----
>> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
>> Sent: Tuesday, June 18, 2013 10:38 PM
>> To: J, KEERTHY
>> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
>> ldewangan@nvidia.com; sameo@linux.intel.com; grant.likely@secretlab.ca;
>> swarren@nvidia.com; linux-kernel@vger.kernel.org; linux-
>> doc@vger.kernel.org; gg@slimlogic.co.uk
>> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts property
>> exists and then only request irq
>>
>> On 06/18/2013 10:54 AM, J, KEERTHY wrote:
>>> Hi Stephen,
>>>
>>>> -----Original Message-----
>>>> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
>>>> Sent: Tuesday, June 18, 2013 9:22 PM
>>>> To: J, KEERTHY
>>>> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
>>>> ldewangan@nvidia.com; sameo@linux.intel.com;
>>>> grant.likely@secretlab.ca; swarren@nvidia.com;
>>>> linux-kernel@vger.kernel.org; linux- doc@vger.kernel.org;
>>>> gg@slimlogic.co.uk
>>>> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts
>> property
>>>> exists and then only request irq
>>>>
>>>> On 06/18/2013 04:01 AM, J Keerthy wrote:
>>>>> Check if interrupts property exists and then only request irq.
>>>>> On some boards INT line might not be connected to a valid irq line
>>>>> on the application processor. Hence keeping a check before
>>>>> requesting irq.
>>>>
>>>> When there is no interrupts property, surely i2c->irq == 0, which is
>>>> an invalid IRQ, and hence there's no need to check this before
>>>> copying the value?
>>>
>>> The intent here is NOT to request irq with 0 or Invalid IRQ.
>>
>> Sure.
>>
>>> The board File will not populate the interrupts entry if the INT line
>>> is not Connected.
>>
>> Do you mean the interrupts DT property won't be present if there is no
>> interrupt. If so, sure.
> 
> Yes.
> 
>>
>>> Hence the patch checks for the 'interrupts' property.
>>
>> That shouldn't be necessary; IIRC, the I2C core has already parsed the
>> interrupts property if there was one, and if there wasn't, it has set
>> i2c->irq to some invalid value already.
>>
>> So, you simply need to check the value in i2c->irq, and don't need to
>> look at the DT at all.
> 
> Instead of checking the Invalid irq value which most likely can be 0.
> I am not sure.
> I am explicitly checking if the interrupts property exists or not.
> 
> If not present then It throws out a warning. Either there is no
> Valid INT line connection or the DeviceTree was not populated fully.
> 
> This additional piece of information is good to have in the driver
> IMHO. Let me know if this is rational enough to have in the driver.

No, you should just check the IRQ number.

Consider this:

If the device was instantiated from a board file *or* a device tree,
i2c->irq is correctly set. Hence, checking that value works in both cases.

If you check the interrupts DT property, that will only work if the
device was instantiated from device tree, and not if it was instantiated
from a board file; the property will never exist in the board file case,
and hence you'll never be able to have a board file provide an interrupt.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
J, KEERTHY June 18, 2013, 5:33 p.m. UTC | #6
> -----Original Message-----
> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> Sent: Tuesday, June 18, 2013 10:53 PM
> To: J, KEERTHY
> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> ldewangan@nvidia.com; sameo@linux.intel.com; grant.likely@secretlab.ca;
> swarren@nvidia.com; linux-kernel@vger.kernel.org; linux-
> doc@vger.kernel.org; gg@slimlogic.co.uk
> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts property
> exists and then only request irq
> 
> On 06/18/2013 11:19 AM, J, KEERTHY wrote:
> >
> >
> >> -----Original Message-----
> >> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> >> Sent: Tuesday, June 18, 2013 10:38 PM
> >> To: J, KEERTHY
> >> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> >> ldewangan@nvidia.com; sameo@linux.intel.com;
> >> grant.likely@secretlab.ca; swarren@nvidia.com;
> >> linux-kernel@vger.kernel.org; linux- doc@vger.kernel.org;
> >> gg@slimlogic.co.uk
> >> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts
> property
> >> exists and then only request irq
> >>
> >> On 06/18/2013 10:54 AM, J, KEERTHY wrote:
> >>> Hi Stephen,
> >>>
> >>>> -----Original Message-----
> >>>> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> >>>> Sent: Tuesday, June 18, 2013 9:22 PM
> >>>> To: J, KEERTHY
> >>>> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> >>>> ldewangan@nvidia.com; sameo@linux.intel.com;
> >>>> grant.likely@secretlab.ca; swarren@nvidia.com;
> >>>> linux-kernel@vger.kernel.org; linux- doc@vger.kernel.org;
> >>>> gg@slimlogic.co.uk
> >>>> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts
> >> property
> >>>> exists and then only request irq
> >>>>
> >>>> On 06/18/2013 04:01 AM, J Keerthy wrote:
> >>>>> Check if interrupts property exists and then only request irq.
> >>>>> On some boards INT line might not be connected to a valid irq
> line
> >>>>> on the application processor. Hence keeping a check before
> >>>>> requesting irq.
> >>>>
> >>>> When there is no interrupts property, surely i2c->irq == 0, which
> >>>> is an invalid IRQ, and hence there's no need to check this before
> >>>> copying the value?
> >>>
> >>> The intent here is NOT to request irq with 0 or Invalid IRQ.
> >>
> >> Sure.
> >>
> >>> The board File will not populate the interrupts entry if the INT
> >>> line is not Connected.
> >>
> >> Do you mean the interrupts DT property won't be present if there is
> >> no interrupt. If so, sure.
> >
> > Yes.
> >
> >>
> >>> Hence the patch checks for the 'interrupts' property.
> >>
> >> That shouldn't be necessary; IIRC, the I2C core has already parsed
> >> the interrupts property if there was one, and if there wasn't, it
> has
> >> set
> >> i2c->irq to some invalid value already.
> >>
> >> So, you simply need to check the value in i2c->irq, and don't need
> to
> >> look at the DT at all.
> >
> > Instead of checking the Invalid irq value which most likely can be 0.
> > I am not sure.
> > I am explicitly checking if the interrupts property exists or not.
> >
> > If not present then It throws out a warning. Either there is no Valid
> > INT line connection or the DeviceTree was not populated fully.
> >
> > This additional piece of information is good to have in the driver
> > IMHO. Let me know if this is rational enough to have in the driver.
> 
> No, you should just check the IRQ number.

Hmmm...so something like (!i2c->irq)

> 
> Consider this:
> 
> If the device was instantiated from a board file *or* a device tree,
> i2c->irq is correctly set. Hence, checking that value works in both
> cases.
> 
> If you check the interrupts DT property, that will only work if the
> device was instantiated from device tree, and not if it was
> instantiated from a board file; the property will never exist in the
> board file case, and hence you'll never be able to have a board file
> provide an interrupt.

The board file approach is getting deprecated for this. I
Myself removed board file related pdata stuff in one of the patches.

http://www.mail-archive.com/linux-omap@vger.kernel.org/msg90598.html

So going the DeviceTree way.

Regards,
Keerthy



--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mark Brown June 18, 2013, 6:07 p.m. UTC | #7
On Tue, Jun 18, 2013 at 11:22:41AM -0600, Stephen Warren wrote:

> If the device was instantiated from a board file *or* a device tree,
> i2c->irq is correctly set. Hence, checking that value works in both cases.

The same thing will happen with any other firmware interface that gets
introduced in the future - one of the goals with factoring all this out
into the bus code is that it means the driver doesn't need to have any
special handling.

> If you check the interrupts DT property, that will only work if the
> device was instantiated from device tree, and not if it was instantiated
> from a board file; the property will never exist in the board file case,
> and hence you'll never be able to have a board file provide an interrupt.

Exactly.
Stephen Warren June 18, 2013, 7:11 p.m. UTC | #8
On 06/18/2013 11:33 AM, J, KEERTHY wrote:
> Stephen Warren wrote at Tuesday, June 18, 2013 10:53 PM:
...>> No, you should just check the IRQ number.
> 
> Hmmm...so something like (!i2c->irq)

Yes.

>> Consider this:
>>
>> If the device was instantiated from a board file *or* a device tree,
>> i2c->irq is correctly set. Hence, checking that value works in both
>> cases.
>>
>> If you check the interrupts DT property, that will only work if the
>> device was instantiated from device tree, and not if it was
>> instantiated from a board file; the property will never exist in the
>> board file case, and hence you'll never be able to have a board file
>> provide an interrupt.
> 
> The board file approach is getting deprecated for this. I
> Myself removed board file related pdata stuff in one of the patches.
> 
> http://www.mail-archive.com/linux-omap@vger.kernel.org/msg90598.html
> 
> So going the DeviceTree way.

Even if you're 100% sure this driver will only ever work with DT (which
seems like a bad assumption to make no matter what the circumstance),
it'd still be best to detect whether an IRQ was specified in a generic
way. That way, nobody will read this driver, assume the code is generic,
and just copy/paste it without thinking.
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
J, KEERTHY June 19, 2013, 1:28 a.m. UTC | #9
Hi Stephen,

> -----Original Message-----
> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> Sent: Wednesday, June 19, 2013 12:42 AM
> To: J, KEERTHY
> Cc: linux-omap@vger.kernel.org; broonie@kernel.org;
> ldewangan@nvidia.com; sameo@linux.intel.com; grant.likely@secretlab.ca;
> swarren@nvidia.com; linux-kernel@vger.kernel.org; linux-
> doc@vger.kernel.org; gg@slimlogic.co.uk
> Subject: Re: [PATCH v2 1/4] MFD: Palmas: Check if interrupts property
> exists and then only request irq
> 
> On 06/18/2013 11:33 AM, J, KEERTHY wrote:
> > Stephen Warren wrote at Tuesday, June 18, 2013 10:53 PM:
> ...>> No, you should just check the IRQ number.
> >
> > Hmmm...so something like (!i2c->irq)
> 
> Yes.

Ok.

> 
> >> Consider this:
> >>
> >> If the device was instantiated from a board file *or* a device tree,
> >> i2c->irq is correctly set. Hence, checking that value works in both
> >> cases.
> >>
> >> If you check the interrupts DT property, that will only work if the
> >> device was instantiated from device tree, and not if it was
> >> instantiated from a board file; the property will never exist in the
> >> board file case, and hence you'll never be able to have a board file
> >> provide an interrupt.
> >
> > The board file approach is getting deprecated for this. I Myself
> > removed board file related pdata stuff in one of the patches.
> >
> > http://www.mail-archive.com/linux-omap@vger.kernel.org/msg90598.html
> >
> > So going the DeviceTree way.
> 
> Even if you're 100% sure this driver will only ever work with DT (which
> seems like a bad assumption to make no matter what the circumstance),
> it'd still be best to detect whether an IRQ was specified in a generic
> way. That way, nobody will read this driver, assume the code is
> generic, and just copy/paste it without thinking.

Ok. I understand. I will incorporate this.

Thanks,
Keerthy
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/mfd/palmas.c b/drivers/mfd/palmas.c
index 62fa728..69c4e62 100644
--- a/drivers/mfd/palmas.c
+++ b/drivers/mfd/palmas.c
@@ -236,6 +236,7 @@  static int palmas_i2c_probe(struct i2c_client *i2c,
 {
 	struct palmas *palmas;
 	struct palmas_platform_data *pdata;
+	struct device_node *regnode = NULL;
 	struct device_node *node = i2c->dev.of_node;
 	int ret = 0, i;
 	unsigned int reg, addr;
@@ -262,7 +263,6 @@  static int palmas_i2c_probe(struct i2c_client *i2c,
 	i2c_set_clientdata(i2c, palmas);
 	palmas->dev = &i2c->dev;
 	palmas->id = id->driver_data;
-	palmas->irq = i2c->irq;
 
 	for (i = 0; i < PALMAS_NUM_CLIENTS; i++) {
 		if (i == 0)
@@ -290,6 +290,15 @@  static int palmas_i2c_probe(struct i2c_client *i2c,
 		}
 	}
 
+	regnode = of_parse_phandle(node, "interrupts", 0);
+
+	if (!regnode) {
+		dev_warn(palmas->dev, "IRQ missing: skipping irq request\n");
+		goto no_irq;
+	} else {
+		palmas->irq = i2c->irq;
+	}
+
 	/* Change interrupt line output polarity */
 	if (pdata->irq_flags & IRQ_TYPE_LEVEL_HIGH)
 		reg = PALMAS_POLARITY_CTRL_INT_POLARITY;
@@ -316,6 +325,7 @@  static int palmas_i2c_probe(struct i2c_client *i2c,
 	if (ret < 0)
 		goto err;
 
+no_irq:
 	slave = PALMAS_BASE_TO_SLAVE(PALMAS_PU_PD_OD_BASE);
 	addr = PALMAS_BASE_TO_REG(PALMAS_PU_PD_OD_BASE,
 			PALMAS_PRIMARY_SECONDARY_PAD1);