From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Lee Jones <lee.jones@linaro.org>
Cc: Samuel Ortiz <sameo@linux.intel.com>,
Kevin Hilman <khilman@linaro.org>,
Graeme Gregory <gg@slimlogic.co.uk>,
linux-omap@vger.kernel.org,
Ruslan Bilovol <ruslan.bilovol@ti.com>,
linux-kernel@vger.kernel.org,
Oleksandr Dmytryshyn <oleksandr.dmytryshyn@ti.com>
Subject: Re: [PATCH 4/4] mfd: twl6030-irq: Add interrupt mapping table for the twl6032
Date: Wed, 24 Jul 2013 16:39:18 +0300 [thread overview]
Message-ID: <51EFD906.20501@ti.com> (raw)
In-Reply-To: <20130724115212.GJ26801@laptop>
On 07/24/2013 02:52 PM, Lee Jones wrote:
> On Tue, 23 Jul 2013, Grygorii Strashko wrote:
>
>> From: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@ti.com>
>>
>> This patch adds interrupt mapping table for the twl6032.
>
> Repeating the $SUBJECT line is never helpful.
>
>> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@ti.com>
>> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
>> ---
>> drivers/mfd/twl6030-irq.c | 49 ++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 48 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
>> index 89f130b..e4df87f 100644
>> --- a/drivers/mfd/twl6030-irq.c
>> +++ b/drivers/mfd/twl6030-irq.c
>> @@ -41,6 +41,7 @@
>> #include <linux/suspend.h>
>> #include <linux/of.h>
>> #include <linux/irqdomain.h>
>> +#include <linux/of_device.h>
>>
>> #include "twl-core.h"
>>
>> @@ -84,6 +85,36 @@ static int twl6030_interrupt_mapping[24] = {
>> CHARGERFAULT_INTR_OFFSET, /* Bit 22 INT_CHRG */
>> RSV_INTR_OFFSET, /* Bit 23 Reserved */
>> };
>> +
>> +static int twl6032_interrupt_mapping[24] = {
>> + PWR_INTR_OFFSET, /* Bit 0 PWRON */
>> + PWR_INTR_OFFSET, /* Bit 1 RPWRON */
>> + PWR_INTR_OFFSET, /* Bit 2 SYS_VLOW */
>> + RTC_INTR_OFFSET, /* Bit 3 RTC_ALARM */
>> + RTC_INTR_OFFSET, /* Bit 4 RTC_PERIOD */
>> + HOTDIE_INTR_OFFSET, /* Bit 5 HOT_DIE */
>> + SMPSLDO_INTR_OFFSET, /* Bit 6 VXXX_SHORT */
>> + PWR_INTR_OFFSET, /* Bit 7 SPDURATION */
>> +
>> + PWR_INTR_OFFSET, /* Bit 8 WATCHDOG */
>> + BATDETECT_INTR_OFFSET, /* Bit 9 BAT */
>> + SIMDETECT_INTR_OFFSET, /* Bit 10 SIM */
>> + MMCDETECT_INTR_OFFSET, /* Bit 11 MMC */
>> + MADC_INTR_OFFSET, /* Bit 12 GPADC_RT_EOC */
>> + MADC_INTR_OFFSET, /* Bit 13 GPADC_SW_EOC */
>> + GASGAUGE_INTR_OFFSET, /* Bit 14 CC_EOC */
>> + GASGAUGE_INTR_OFFSET, /* Bit 15 CC_AUTOCAL */
>> +
>> + USBOTG_INTR_OFFSET, /* Bit 16 ID_WKUP */
>> + USBOTG_INTR_OFFSET, /* Bit 17 VBUS_WKUP */
>> + USBOTG_INTR_OFFSET, /* Bit 18 ID */
>> + USB_PRES_INTR_OFFSET, /* Bit 19 VBUS */
>> + CHARGER_INTR_OFFSET, /* Bit 20 CHRG_CTRL */
>> + CHARGERFAULT_INTR_OFFSET, /* Bit 21 EXT_CHRG */
>> + CHARGERFAULT_INTR_OFFSET, /* Bit 22 INT_CHRG */
>
> OCD failure. ;)
>
> NB: Kidding, you don't have to do anything about this.
>
>> + RSV_INTR_OFFSET, /* Bit 23 Reserved */
>> +};
>> +
>> /*----------------------------------------------------------------------*/
>>
>> static unsigned twl6030_irq_base;
>> @@ -91,6 +122,7 @@ static int twl_irq;
>> static bool twl_irq_wake_enabled;
>>
>> static atomic_t twl6030_wakeirqs = ATOMIC_INIT(0);
>> +static const int *irq_mapping_tbl;
>
> What I'd actually like to see is the creation of 'struct twl6030' to
> keep all your goodies in; irq_domain, irq_mapping_tbl etc and for you
> to pass that around instead of creating more global variables e.g. via
> request_threaded_irq(..., void *dev_id) to access the aforementioned
> information.
I can add this as the first patch in series - Is It ok?
>
>> static int twl6030_irq_pm_notifier(struct notifier_block *notifier,
>> unsigned long pm_event, void *unused)
>> @@ -164,7 +196,7 @@ static irqreturn_t twl6030_irq_thread(int irq, void *data)
>> if (sts.int_sts & 0x1) {
>> int module_irq =
>> irq_find_mapping(irq_domain,
>> - twl6030_interrupt_mapping[i]);
>> + irq_mapping_tbl[i]);
>> if (module_irq)
>> handle_nested_irq(module_irq);
>> else
>> @@ -339,6 +371,12 @@ static struct irq_domain_ops twl6030_irq_domain_ops = {
>> .xlate = irq_domain_xlate_onetwocell,
>> };
>>
>> +static const struct of_device_id twl6030_of_match[] = {
>> + {.compatible = "ti,twl6030", &twl6030_interrupt_mapping},
>> + {.compatible = "ti,twl6032", &twl6032_interrupt_mapping},
>> + { },
>> +};
>> +
>> int twl6030_init_irq(struct device *dev, int irq_num)
>> {
>> struct device_node *node = dev->of_node;
>> @@ -346,6 +384,15 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>> int status;
>> u8 mask[3];
>> struct irq_domain *irq_domain;
>> + const struct of_device_id *of_id;
>> +
>> + 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;
>> + }
>> +
>> + irq_mapping_tbl = of_id->data;
>>
>> nr_irqs = TWL6030_NR_IRQS;
>>
>
Regards,
-grygorii
WARNING: multiple messages have this Message-ID (diff)
From: Grygorii Strashko <grygorii.strashko@ti.com>
To: Lee Jones <lee.jones@linaro.org>
Cc: Samuel Ortiz <sameo@linux.intel.com>,
Kevin Hilman <khilman@linaro.org>,
Graeme Gregory <gg@slimlogic.co.uk>, <linux-omap@vger.kernel.org>,
Ruslan Bilovol <ruslan.bilovol@ti.com>,
<linux-kernel@vger.kernel.org>,
Oleksandr Dmytryshyn <oleksandr.dmytryshyn@ti.com>
Subject: Re: [PATCH 4/4] mfd: twl6030-irq: Add interrupt mapping table for the twl6032
Date: Wed, 24 Jul 2013 16:39:18 +0300 [thread overview]
Message-ID: <51EFD906.20501@ti.com> (raw)
In-Reply-To: <20130724115212.GJ26801@laptop>
On 07/24/2013 02:52 PM, Lee Jones wrote:
> On Tue, 23 Jul 2013, Grygorii Strashko wrote:
>
>> From: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@ti.com>
>>
>> This patch adds interrupt mapping table for the twl6032.
>
> Repeating the $SUBJECT line is never helpful.
>
>> Signed-off-by: Oleksandr Dmytryshyn <oleksandr.dmytryshyn@ti.com>
>> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
>> ---
>> drivers/mfd/twl6030-irq.c | 49 ++++++++++++++++++++++++++++++++++++++++++++-
>> 1 file changed, 48 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/mfd/twl6030-irq.c b/drivers/mfd/twl6030-irq.c
>> index 89f130b..e4df87f 100644
>> --- a/drivers/mfd/twl6030-irq.c
>> +++ b/drivers/mfd/twl6030-irq.c
>> @@ -41,6 +41,7 @@
>> #include <linux/suspend.h>
>> #include <linux/of.h>
>> #include <linux/irqdomain.h>
>> +#include <linux/of_device.h>
>>
>> #include "twl-core.h"
>>
>> @@ -84,6 +85,36 @@ static int twl6030_interrupt_mapping[24] = {
>> CHARGERFAULT_INTR_OFFSET, /* Bit 22 INT_CHRG */
>> RSV_INTR_OFFSET, /* Bit 23 Reserved */
>> };
>> +
>> +static int twl6032_interrupt_mapping[24] = {
>> + PWR_INTR_OFFSET, /* Bit 0 PWRON */
>> + PWR_INTR_OFFSET, /* Bit 1 RPWRON */
>> + PWR_INTR_OFFSET, /* Bit 2 SYS_VLOW */
>> + RTC_INTR_OFFSET, /* Bit 3 RTC_ALARM */
>> + RTC_INTR_OFFSET, /* Bit 4 RTC_PERIOD */
>> + HOTDIE_INTR_OFFSET, /* Bit 5 HOT_DIE */
>> + SMPSLDO_INTR_OFFSET, /* Bit 6 VXXX_SHORT */
>> + PWR_INTR_OFFSET, /* Bit 7 SPDURATION */
>> +
>> + PWR_INTR_OFFSET, /* Bit 8 WATCHDOG */
>> + BATDETECT_INTR_OFFSET, /* Bit 9 BAT */
>> + SIMDETECT_INTR_OFFSET, /* Bit 10 SIM */
>> + MMCDETECT_INTR_OFFSET, /* Bit 11 MMC */
>> + MADC_INTR_OFFSET, /* Bit 12 GPADC_RT_EOC */
>> + MADC_INTR_OFFSET, /* Bit 13 GPADC_SW_EOC */
>> + GASGAUGE_INTR_OFFSET, /* Bit 14 CC_EOC */
>> + GASGAUGE_INTR_OFFSET, /* Bit 15 CC_AUTOCAL */
>> +
>> + USBOTG_INTR_OFFSET, /* Bit 16 ID_WKUP */
>> + USBOTG_INTR_OFFSET, /* Bit 17 VBUS_WKUP */
>> + USBOTG_INTR_OFFSET, /* Bit 18 ID */
>> + USB_PRES_INTR_OFFSET, /* Bit 19 VBUS */
>> + CHARGER_INTR_OFFSET, /* Bit 20 CHRG_CTRL */
>> + CHARGERFAULT_INTR_OFFSET, /* Bit 21 EXT_CHRG */
>> + CHARGERFAULT_INTR_OFFSET, /* Bit 22 INT_CHRG */
>
> OCD failure. ;)
>
> NB: Kidding, you don't have to do anything about this.
>
>> + RSV_INTR_OFFSET, /* Bit 23 Reserved */
>> +};
>> +
>> /*----------------------------------------------------------------------*/
>>
>> static unsigned twl6030_irq_base;
>> @@ -91,6 +122,7 @@ static int twl_irq;
>> static bool twl_irq_wake_enabled;
>>
>> static atomic_t twl6030_wakeirqs = ATOMIC_INIT(0);
>> +static const int *irq_mapping_tbl;
>
> What I'd actually like to see is the creation of 'struct twl6030' to
> keep all your goodies in; irq_domain, irq_mapping_tbl etc and for you
> to pass that around instead of creating more global variables e.g. via
> request_threaded_irq(..., void *dev_id) to access the aforementioned
> information.
I can add this as the first patch in series - Is It ok?
>
>> static int twl6030_irq_pm_notifier(struct notifier_block *notifier,
>> unsigned long pm_event, void *unused)
>> @@ -164,7 +196,7 @@ static irqreturn_t twl6030_irq_thread(int irq, void *data)
>> if (sts.int_sts & 0x1) {
>> int module_irq =
>> irq_find_mapping(irq_domain,
>> - twl6030_interrupt_mapping[i]);
>> + irq_mapping_tbl[i]);
>> if (module_irq)
>> handle_nested_irq(module_irq);
>> else
>> @@ -339,6 +371,12 @@ static struct irq_domain_ops twl6030_irq_domain_ops = {
>> .xlate = irq_domain_xlate_onetwocell,
>> };
>>
>> +static const struct of_device_id twl6030_of_match[] = {
>> + {.compatible = "ti,twl6030", &twl6030_interrupt_mapping},
>> + {.compatible = "ti,twl6032", &twl6032_interrupt_mapping},
>> + { },
>> +};
>> +
>> int twl6030_init_irq(struct device *dev, int irq_num)
>> {
>> struct device_node *node = dev->of_node;
>> @@ -346,6 +384,15 @@ int twl6030_init_irq(struct device *dev, int irq_num)
>> int status;
>> u8 mask[3];
>> struct irq_domain *irq_domain;
>> + const struct of_device_id *of_id;
>> +
>> + 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;
>> + }
>> +
>> + irq_mapping_tbl = of_id->data;
>>
>> nr_irqs = TWL6030_NR_IRQS;
>>
>
Regards,
-grygorii
next prev parent reply other threads:[~2013-07-24 13:39 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-23 16:07 [PATCH 0/4] mfd: twl6030-irq: rework and add twl6032 support Grygorii Strashko
2013-07-23 16:07 ` Grygorii Strashko
2013-07-23 16:07 ` [PATCH 1/4] mfd: twl6030-irq: migrate to IRQ threaded handler Grygorii Strashko
2013-07-23 16:07 ` Grygorii Strashko
2013-07-24 10:49 ` Lee Jones
2013-07-24 11:54 ` Grygorii Strashko
2013-07-24 11:54 ` Grygorii Strashko
2013-07-24 12:50 ` Lee Jones
2013-07-24 12:50 ` Lee Jones
2013-07-24 13:17 ` Grygorii Strashko
2013-07-24 13:17 ` Grygorii Strashko
2013-07-24 11:54 ` Lee Jones
2013-07-24 11:54 ` Lee Jones
2013-07-23 16:07 ` [PATCH 2/4] mfd: twl6030-irq: add error check when IRQs are masked initially Grygorii Strashko
2013-07-23 16:07 ` Grygorii Strashko
2013-07-23 18:08 ` Graeme Gregory
2013-07-24 11:51 ` Grygorii Strashko
2013-07-24 11:51 ` Grygorii Strashko
2013-07-23 16:07 ` [PATCH 3/4] mfd: twl6030-irq: convert to use linear irq_domain Grygorii Strashko
2013-07-23 16:07 ` Grygorii Strashko
2013-07-24 11:35 ` Lee Jones
2013-07-24 11:35 ` Lee Jones
2013-07-24 13:37 ` Grygorii Strashko
2013-07-24 13:37 ` Grygorii Strashko
2013-07-23 16:07 ` [PATCH 4/4] mfd: twl6030-irq: Add interrupt mapping table for the twl6032 Grygorii Strashko
2013-07-23 16:07 ` Grygorii Strashko
2013-07-24 11:52 ` Lee Jones
2013-07-24 13:39 ` Grygorii Strashko [this message]
2013-07-24 13:39 ` Grygorii Strashko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=51EFD906.20501@ti.com \
--to=grygorii.strashko@ti.com \
--cc=gg@slimlogic.co.uk \
--cc=khilman@linaro.org \
--cc=lee.jones@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=oleksandr.dmytryshyn@ti.com \
--cc=ruslan.bilovol@ti.com \
--cc=sameo@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.