Changeset 10496


Ignore:
Timestamp:
2008-02-19T16:22:17+01:00 (8 years ago)
Author:
mb
Message:

ssb: Make the GPIO API reentrancy safe.

Location:
trunk
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/package/broadcom-diag/src/gpio.h

    r10495 r10496  
    44 
    55#ifndef BCMDRIVER 
    6 #include <linux/ssb/ssb.h> 
    7 #include <linux/ssb/ssb_driver_chipcommon.h> 
    8 #include <linux/ssb/ssb_driver_extif.h> 
     6#include <linux/ssb/ssb_embedded.h> 
    97 
    108extern struct ssb_bus ssb; 
    119 
    12 #define gpio_op(op, param...) \ 
    13         do { \ 
    14                 if (ssb.chipco.dev) \ 
    15                         return ssb_chipco_gpio_##op(&ssb.chipco, param); \ 
    16                 else if (ssb.extif.dev) \ 
    17                         return ssb_extif_gpio_##op(&ssb.extif, param); \ 
    18                 else \ 
    19                         return 0; \ 
    20         } while (0); 
    21                  
    2210 
    2311static inline u32 gpio_in(void) 
    2412{ 
    25         gpio_op(in, ~0); 
     13        return ssb_gpio_in(&ssb, ~0); 
    2614} 
    2715 
    2816static inline u32 gpio_out(u32 mask, u32 value) 
    2917{ 
    30         gpio_op(out, mask, value); 
     18        return ssb_gpio_out(&ssb, mask, value); 
    3119} 
    3220 
    3321static inline u32 gpio_outen(u32 mask, u32 value) 
    3422{ 
    35         gpio_op(outen, mask, value); 
     23        return ssb_gpio_outen(&ssb, mask, value); 
    3624} 
    3725 
    3826static inline u32 gpio_control(u32 mask, u32 value) 
    3927{ 
    40         if (ssb.chipco.dev) 
    41                 return ssb_chipco_gpio_control(&ssb.chipco, mask, value); 
    42         else 
    43                 return 0; 
     28        return ssb_gpio_control(&ssb, mask, value); 
    4429} 
    4530 
    4631static inline u32 gpio_intmask(u32 mask, u32 value) 
    4732{ 
    48         gpio_op(intmask, mask, value); 
     33        return ssb_gpio_intmask(&ssb, mask, value); 
    4934} 
    5035 
    5136static inline u32 gpio_intpolarity(u32 mask, u32 value) 
    5237{ 
    53         gpio_op(polarity, mask, value); 
     38        return ssb_gpio_polarity(&ssb, mask, value); 
    5439} 
    5540 
  • trunk/package/switch/src/gpio-bcm947xx.h

    r6562 r10496  
    44 
    55#ifndef BCMDRIVER 
    6 #include <linux/ssb/ssb.h> 
    7 #include <linux/ssb/ssb_driver_chipcommon.h> 
    8 #include <linux/ssb/ssb_driver_extif.h> 
     6#include <linux/ssb/ssb_embedded.h> 
    97 
    108extern struct ssb_bus ssb; 
    119 
    12 #define gpio_op(op, param...) \ 
    13         do { \ 
    14                 if (ssb.chipco.dev) \ 
    15                         return ssb_chipco_gpio_##op(&ssb.chipco, param); \ 
    16                 else if (ssb.extif.dev) \ 
    17                         return ssb_extif_gpio_##op(&ssb.extif, param); \ 
    18                 else \ 
    19                         return 0; \ 
    20         } while (0); 
    21                  
    2210 
    2311static inline u32 gpio_in(void) 
    2412{ 
    25         gpio_op(in, ~0); 
     13        return ssb_gpio_in(&ssb, ~0); 
    2614} 
    2715 
    2816static inline u32 gpio_out(u32 mask, u32 value) 
    2917{ 
    30         gpio_op(out, mask, value); 
     18        return ssb_gpio_out(&ssb, mask, value); 
    3119} 
    3220 
    3321static inline u32 gpio_outen(u32 mask, u32 value) 
    3422{ 
    35         gpio_op(outen, mask, value); 
     23        return ssb_gpio_outen(&ssb, mask, value); 
    3624} 
    3725 
    3826static inline u32 gpio_control(u32 mask, u32 value) 
    3927{ 
    40         if (ssb.chipco.dev) 
    41                 return ssb_chipco_gpio_control(&ssb.chipco, mask, value); 
    42         else 
    43                 return 0; 
     28        return ssb_gpio_control(&ssb, mask, value); 
    4429} 
    4530 
    4631static inline u32 gpio_intmask(u32 mask, u32 value) 
    4732{ 
    48         gpio_op(intmask, mask, value); 
     33        return ssb_gpio_intmask(&ssb, mask, value); 
    4934} 
    5035 
    5136static inline u32 gpio_intpolarity(u32 mask, u32 value) 
    5237{ 
    53         gpio_op(polarity, mask, value); 
     38        return ssb_gpio_polarity(&ssb, mask, value); 
    5439} 
    5540 
  • trunk/target/linux/brcm47xx/files/include/asm-mips/mach-bcm947xx/gpio.h

    r9309 r10496  
    22#define __BCM947XX_GPIO_H 
    33 
    4 #include <linux/ssb/ssb.h> 
    5 #include <linux/ssb/ssb_driver_chipcommon.h> 
    6 #include <linux/ssb/ssb_driver_extif.h> 
     4#include <linux/ssb/ssb_embedded.h> 
    75 
    86extern struct ssb_bus ssb; 
     
    1917static inline int gpio_direction_input(unsigned gpio) 
    2018{ 
    21         if (ssb.chipco.dev) 
    22                 ssb_chipco_gpio_outen(&ssb.chipco, 1 << gpio, 0); 
    23         else if (ssb.extif.dev) 
    24                 ssb_extif_gpio_outen(&ssb.extif, 1 << gpio, 0); 
    25         else 
    26                 return -EINVAL; 
     19        ssb_gpio_outen(&ssb, 1 << gpio, 0); 
    2720        return 0; 
    2821} 
     
    3023static inline int gpio_direction_output(unsigned gpio, int value) 
    3124{ 
    32         if (ssb.chipco.dev) 
    33                 ssb_chipco_gpio_outen(&ssb.chipco, 1 << gpio, value << gpio); 
    34         else if (ssb.extif.dev) 
    35                 ssb_extif_gpio_outen(&ssb.extif, 1 << gpio, value << gpio); 
    36         else 
    37                 return -EINVAL; 
    38  
     25        ssb_gpio_outen(&ssb, 1 << gpio, value << gpio); 
    3926        return 0; 
    4027} 
     
    4431{ 
    4532        struct ssb_device *dev; 
    46          
     33 
    4734        dev = ssb.chipco.dev; 
    4835        if (!dev) 
     
    6249static inline int gpio_get_value(unsigned gpio) 
    6350{ 
    64         if (ssb.chipco.dev) 
    65                 return ssb_chipco_gpio_in(&ssb.chipco, 1 << gpio) ? 1 : 0; 
    66         else if (ssb.extif.dev) 
    67                 return ssb_extif_gpio_in(&ssb.extif, 1 << gpio) ? 1 : 0; 
    68         else 
    69                 return 0; 
     51        return !!ssb_gpio_in(&ssb, 1 << gpio); 
    7052} 
    7153 
    7254static inline int gpio_set_value(unsigned gpio, int value) 
    7355{ 
    74         if (ssb.chipco.dev) 
    75                 ssb_chipco_gpio_out(&ssb.chipco, 1 << gpio, (value ? 1 << gpio : 0)); 
    76         else if (ssb.extif.dev) 
    77                 ssb_extif_gpio_out(&ssb.extif, 1 << gpio, (value ? 1 << gpio : 0)); 
    78          
     56        ssb_gpio_out(&ssb, 1 << gpio, (value ? 1 << gpio : 0)); 
    7957        return 0; 
    8058} 
Note: See TracChangeset for help on using the changeset viewer.