]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
minor irq-related cleanups
authorDavid Brownell <dbrownell@users.sourceforge.net>
Tue, 30 Sep 2008 18:42:58 +0000 (21:42 +0300)
committerTony Lindgren <tony@atomide.com>
Wed, 1 Oct 2008 10:37:37 +0000 (13:37 +0300)
Minor IRQ-related cleanups:  comment out the no-longer-used
GPIO irq symbol (more to come, eventually); create RTC IRQ
resource; and use that RTC IRQ resource.

And incidentally, make the RTC code free the correct IRQ;
it was pretty goofed up...

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Felipe Balbi <felipe.balbi@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
drivers/gpio/twl4030-gpio.c
drivers/i2c/chips/twl4030-core.c
drivers/rtc/rtc-twl4030.c
include/linux/i2c/twl4030.h

index 2949da1f20cb2fd8148a39035149975c8b412f2f..b65d4761250a42bf027fef5e211711dfec46df4e 100644 (file)
@@ -49,7 +49,6 @@
 /* REVISIT when these symbols vanish elsewhere, remove them here too */
 /* #undef TWL4030_GPIO_IRQ_BASE */
 /* #undef TWL4030_GPIO_IRQ_END */
-#undef TWL4030_MODIRQ_GPIO
 
 static struct gpio_chip twl_gpiochip;
 static int twl4030_gpio_irq_base;
index 80cf2318e7d09910cd15c9e213d7fb08b6bf8487..e0a6ef4c39ed67e18ee23691860eaed099121681 100644 (file)
@@ -776,37 +776,44 @@ static int add_children(struct twl4030_platform_data *pdata)
        }
 
        if (twl_has_rtc()) {
+               twl = &twl4030_modules[TWL4030_SLAVENUM_NUM3];
+
                pdev = platform_device_alloc("twl4030_rtc", -1);
-               if (pdev) {
-                       twl = &twl4030_modules[TWL4030_SLAVENUM_NUM3];
+               if (!pdev) {
+                       pr_debug("%s: can't alloc rtc dev\n", DRIVER_NAME);
+                       status = -ENOMEM;
+               } else {
                        pdev->dev.parent = &twl->client->dev;
                        device_init_wakeup(&pdev->dev, 1);
+               }
 
-                       /*
-                        * FIXME add the relevant IRQ resource, and make the
-                        * rtc driver use it instead of hard-wiring ...
-                        *
-                        * REVISIT platform_data here currently only supports
-                        * setting up the "msecure" line ... which actually
-                        * violates the "princple of least privilege", since
-                        * it's effectively always in "high trust" mode.
-                        *
-                        * For now, expect equivalent treatment at board init:
-                        * setting msecure high.  Eventually, Linux might
-                        * become more aware of those HW security concerns.
-                        */
+               /*
+                * REVISIT platform_data here currently might use of
+                * "msecure" line ... but for now we just expect board
+                * setup to tell the chip "we are secure" at all times.
+                * Eventually, Linux might become more aware of such
+                * HW security concerns, and "least privilege".
+                */
+
+               /* RTC module IRQ */
+               if (status == 0) {
+                       struct resource r = {
+                               /* REVISIT don't hard-wire this stuff */
+                               .start = TWL4030_PWRIRQ_RTC,
+                               .flags = IORESOURCE_IRQ,
+                       };
+
+                       status = platform_device_add_resources(pdev, &r, 1);
+               }
 
+               if (status == 0)
                        status = platform_device_add(pdev);
-                       if (status < 0) {
-                               platform_device_put(pdev);
-                               dev_dbg(&twl->client->dev,
-                                               "can't create rtc dev, %d\n",
-                                               status);
-                               goto err;
-                       }
-               } else {
-                       pr_debug("%s: can't alloc rtc dev\n", DRIVER_NAME);
-                       status = -ENOMEM;
+
+               if (status < 0) {
+                       platform_device_put(pdev);
+                       dev_dbg(&twl->client->dev,
+                                       "can't create rtc dev, %d\n",
+                                       status);
                        goto err;
                }
        }
index 98aea0788b7c9e19a70094a87f40c458cd15a1da..b19151a7a230d3c1aedf1e8e224ea9241b16261c 100644 (file)
@@ -353,8 +353,12 @@ static int __devinit twl4030_rtc_probe(struct platform_device *pdev)
        struct twl4030rtc_platform_data *pdata = pdev->dev.platform_data;
        struct rtc_device *rtc;
        int ret = 0;
+       int irq = platform_get_irq(pdev, 0);
        u8 rd_reg;
 
+       if (irq < 0)
+               return irq;
+
        if (pdata != NULL && pdata->init != NULL) {
                ret = pdata->init();
                if (ret < 0)
@@ -389,7 +393,7 @@ static int __devinit twl4030_rtc_probe(struct platform_device *pdev)
        if (ret < 0)
                goto out1;
 
-       ret = request_irq(TWL4030_PWRIRQ_RTC, twl4030_rtc_interrupt,
+       ret = request_irq(irq, twl4030_rtc_interrupt,
                                0, rtc->dev.bus_id, rtc);
        if (ret < 0) {
                dev_err(&pdev->dev, "IRQ is not free.\n");
@@ -438,7 +442,7 @@ static int __devinit twl4030_rtc_probe(struct platform_device *pdev)
 
 
 out2:
-       free_irq(TWL4030_MODIRQ_PWR, rtc);
+       free_irq(irq, rtc);
 out1:
        rtc_device_unregister(rtc);
 out0:
@@ -457,11 +461,12 @@ static int __devexit twl4030_rtc_remove(struct platform_device *pdev)
        /* leave rtc running, but disable irqs */
        struct twl4030rtc_platform_data *pdata = pdev->dev.platform_data;
        struct rtc_device *rtc = platform_get_drvdata(pdev);
+       int irq = platform_get_irq(pdev, 0);
 
        mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_ALARM_M);
        mask_rtc_irq_bit(BIT_RTC_INTERRUPTS_REG_IT_TIMER_M);
 
-       free_irq(TWL4030_MODIRQ_PWR, rtc);
+       free_irq(irq, rtc);
 
        if (pdata != NULL && pdata->exit != NULL)
                pdata->exit();
index 404300cc4b4ed78e01dc631ee04ad22ae6159c0c..582848583337814aa3cff3bc5a4eb1a9401e73e2 100644 (file)
@@ -108,7 +108,7 @@ struct twl4030_platform_data {
 #include <mach/irqs.h>
 /* TWL4030 interrupts */
 
-#define TWL4030_MODIRQ_GPIO            (TWL4030_IRQ_BASE + 0)
+/* #define TWL4030_MODIRQ_GPIO         (TWL4030_IRQ_BASE + 0) */
 #define TWL4030_MODIRQ_KEYPAD          (TWL4030_IRQ_BASE + 1)
 #define TWL4030_MODIRQ_BCI             (TWL4030_IRQ_BASE + 2)
 #define TWL4030_MODIRQ_MADC            (TWL4030_IRQ_BASE + 3)