mfd: twl6030: Fix endianness problem in IRQ handler
authorDanke Xie <d.xie@sta.samsung.com>
Mon, 23 Dec 2013 17:11:46 +0000 (19:11 +0200)
committerLee Jones <lee.jones@linaro.org>
Tue, 21 Jan 2014 08:28:57 +0000 (08:28 +0000)
The current TWL 6030 IRQ handler assumes little endianness.
This change makes it endian-neutral.

Signed-off-by: Danke Xie <d.xie@sta.samsung.com>
Signed-off-by: Taras Kondratiuk <taras.kondratiuk@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
drivers/mfd/twl6030-irq.c

index 517eda832f79978ac772c94b3bcf111643ec8835..18a607e2ca0607d5fb80c765a53f5f8c13352b6f 100644 (file)
@@ -176,8 +176,9 @@ static irqreturn_t twl6030_irq_thread(int irq, void *data)
        int i, ret;
        union {
                u8 bytes[4];
-               u32 int_sts;
+               __le32 int_sts;
        } sts;
+       u32 int_sts; /* sts.int_sts converted to CPU endianness */
        struct twl6030_irq *pdata = data;
 
        /* read INT_STS_A, B and C in one shot using a burst read */
@@ -196,8 +197,9 @@ static irqreturn_t twl6030_irq_thread(int irq, void *data)
        if (sts.bytes[2] & 0x10)
                sts.bytes[2] |= 0x08;
 
-       for (i = 0; sts.int_sts; sts.int_sts >>= 1, i++)
-               if (sts.int_sts & 0x1) {
+       int_sts = le32_to_cpu(sts.int_sts);
+       for (i = 0; int_sts; int_sts >>= 1, i++)
+               if (int_sts & 0x1) {
                        int module_irq =
                                irq_find_mapping(pdata->irq_domain,
                                                 pdata->irq_mapping_tbl[i]);