Acked-by: Sonic Zhang <sonic.zh...@analog.com>

>-----Original Message-----
>From: Axel Lin [mailto:axel....@ingics.com]
>Sent: Friday, June 28, 2013 2:43 PM
>To: Mike Frysinger
>Cc: Bob Liu; Steven Miao; Zhang, Sonic; uclinux-dist-devel@blackfin.uclinux.org
>Subject: [PATCH] Blackfin: bfin_gpio: Use proper mask for comparing pfunc
>
>For BF537_FAMILY, when offset != 1, the mask is 1.
>Thus add proper mask for comparing pfunc with function.
>
>Also has small refactor for better readability.
>In portmux_setup(), it looks odd having "pmux &= ~(3 << 1);"
>while in current code we do pmux |= (function << offset);.
>
>Signed-off-by: Axel Lin <axel....@ingics.com>
>---
> arch/blackfin/kernel/bfin_gpio.c | 23 ++++++++++++++---------
> 1 file changed, 14 insertions(+), 9 deletions(-)
>
>diff --git a/arch/blackfin/kernel/bfin_gpio.c 
>b/arch/blackfin/kernel/bfin_gpio.c
>index ed978f1..780d27d 100644
>--- a/arch/blackfin/kernel/bfin_gpio.c
>+++ b/arch/blackfin/kernel/bfin_gpio.c
>@@ -255,7 +255,7 @@ static int portmux_group_check(unsigned short per)
>       u16 ident = P_IDENT(per);
>       u16 function = P_FUNCT2MUX(per);
>       s8 offset = port_mux[ident];
>-      u16 m, pmux, pfunc;
>+      u16 m, pmux, pfunc, mask;
>
>       if (offset < 0)
>               return 0;
>@@ -270,10 +270,12 @@ static int portmux_group_check(unsigned short per)
>                       continue;
>
>               if (offset == 1)
>-                      pfunc = (pmux >> offset) & 3;
>+                      mask = 3;
>               else
>-                      pfunc = (pmux >> offset) & 1;
>-              if (pfunc != function) {
>+                      mask = 1;
>+
>+              pfunc = (pmux >> offset) & mask;
>+              if (pfunc != (function & mask)) {
>                       pr_err("pin group conflict! request pin %d func %d 
> conflict
>with pin %d func %d\n",
>                               ident, function, m, pfunc);
>                       return -EINVAL;
>@@ -288,17 +290,20 @@ static void portmux_setup(unsigned short per)
>       u16 ident = P_IDENT(per);
>       u16 function = P_FUNCT2MUX(per);
>       s8 offset = port_mux[ident];
>-      u16 pmux;
>+      u16 pmux, mask;
>
>       if (offset == -1)
>               return;
>
>       pmux = bfin_read_PORT_MUX();
>-      if (offset != 1)
>-              pmux &= ~(1 << offset);
>+      if (offset == 1)
>+              mask = 3;
>       else
>-              pmux &= ~(3 << 1);
>-      pmux |= (function << offset);
>+              mask = 1;
>+
>+      pmux &= ~(mask << offset);
>+      pmux |= ((function & mask) << offset);
>+
>       bfin_write_PORT_MUX(pmux);
> }
> #elif defined(CONFIG_BF54x) || defined(CONFIG_BF60x)
>--
>1.8.1.2
>
>
>

_______________________________________________
Uclinux-dist-devel mailing list
Uclinux-dist-devel@blackfin.uclinux.org
https://blackfin.uclinux.org/mailman/listinfo/uclinux-dist-devel

Reply via email to