Re: [PATCH 4/4] mfd: twl6030-irq: Add interrupt mapping table for the twl6032

2013-07-24 Thread Lee Jones
On Tue, 23 Jul 2013, Grygorii Strashko wrote:

 From: Oleksandr Dmytryshyn oleksandr.dmytrys...@ti.com
 
 This patch adds interrupt mapping table for the twl6032.

Repeating the $SUBJECT line is never helpful.

 Signed-off-by: Oleksandr Dmytryshyn oleksandr.dmytrys...@ti.com
 Signed-off-by: Grygorii Strashko grygorii.stras...@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 0PWRON   */
 + PWR_INTR_OFFSET,/* Bit 1RPWRON  */
 + PWR_INTR_OFFSET,/* Bit 2SYS_VLOW*/
 + RTC_INTR_OFFSET,/* Bit 3RTC_ALARM   */
 + RTC_INTR_OFFSET,/* Bit 4RTC_PERIOD  */
 + HOTDIE_INTR_OFFSET, /* Bit 5HOT_DIE */
 + SMPSLDO_INTR_OFFSET,/* Bit 6VXXX_SHORT  */
 + PWR_INTR_OFFSET,/* Bit 7SPDURATION  */
 +
 + PWR_INTR_OFFSET,/* Bit 8WATCHDOG*/
 + BATDETECT_INTR_OFFSET,  /* Bit 9BAT */
 + 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.

  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);
 + 

Re: [PATCH 4/4] mfd: twl6030-irq: Add interrupt mapping table for the twl6032

2013-07-24 Thread Grygorii Strashko

On 07/24/2013 02:52 PM, Lee Jones wrote:

On Tue, 23 Jul 2013, Grygorii Strashko wrote:


From: Oleksandr Dmytryshyn oleksandr.dmytrys...@ti.com

This patch adds interrupt mapping table for the twl6032.


Repeating the $SUBJECT line is never helpful.


Signed-off-by: Oleksandr Dmytryshyn oleksandr.dmytrys...@ti.com
Signed-off-by: Grygorii Strashko grygorii.stras...@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 0PWRON   */
+   PWR_INTR_OFFSET,/* Bit 1RPWRON  */
+   PWR_INTR_OFFSET,/* Bit 2SYS_VLOW*/
+   RTC_INTR_OFFSET,/* Bit 3RTC_ALARM   */
+   RTC_INTR_OFFSET,/* Bit 4RTC_PERIOD  */
+   HOTDIE_INTR_OFFSET, /* Bit 5HOT_DIE */
+   SMPSLDO_INTR_OFFSET,/* Bit 6VXXX_SHORT  */
+   PWR_INTR_OFFSET,/* Bit 7SPDURATION  */
+
+   PWR_INTR_OFFSET,/* Bit 8WATCHDOG*/
+   BATDETECT_INTR_OFFSET,  /* Bit 9BAT */
+   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 =