Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2  * Sonics Silicon Backplane
  3  * Embedded systems support code
  4  *
  5  * Copyright 2005-2008, Broadcom Corporation
  6  * Copyright 2006-2008, Michael Buesch <mb@bu3sch.de>
  7  *
  8  * Licensed under the GNU/GPL. See COPYING for details.
  9  */
 10 
 11 #include <linux/ssb/ssb.h>
 12 #include <linux/ssb/ssb_embedded.h>
 13 
 14 #include "ssb_private.h"
 15 
 16 
 17 int ssb_watchdog_timer_set(struct ssb_bus *bus, u32 ticks)
 18 {
 19         if (ssb_chipco_available(&bus->chipco)) {
 20                 ssb_chipco_watchdog_timer_set(&bus->chipco, ticks);
 21                 return 0;
 22         }
 23         if (ssb_extif_available(&bus->extif)) {
 24                 ssb_extif_watchdog_timer_set(&bus->extif, ticks);
 25                 return 0;
 26         }
 27         return -ENODEV;
 28 }
 29 
 30 u32 ssb_gpio_in(struct ssb_bus *bus, u32 mask)
 31 {
 32         unsigned long flags;
 33         u32 res = 0;
 34 
 35         spin_lock_irqsave(&bus->gpio_lock, flags);
 36         if (ssb_chipco_available(&bus->chipco))
 37                 res = ssb_chipco_gpio_in(&bus->chipco, mask);
 38         else if (ssb_extif_available(&bus->extif))
 39                 res = ssb_extif_gpio_in(&bus->extif, mask);
 40         else
 41                 SSB_WARN_ON(1);
 42         spin_unlock_irqrestore(&bus->gpio_lock, flags);
 43 
 44         return res;
 45 }
 46 EXPORT_SYMBOL(ssb_gpio_in);
 47 
 48 u32 ssb_gpio_out(struct ssb_bus *bus, u32 mask, u32 value)
 49 {
 50         unsigned long flags;
 51         u32 res = 0;
 52 
 53         spin_lock_irqsave(&bus->gpio_lock, flags);
 54         if (ssb_chipco_available(&bus->chipco))
 55                 res = ssb_chipco_gpio_out(&bus->chipco, mask, value);
 56         else if (ssb_extif_available(&bus->extif))
 57                 res = ssb_extif_gpio_out(&bus->extif, mask, value);
 58         else
 59                 SSB_WARN_ON(1);
 60         spin_unlock_irqrestore(&bus->gpio_lock, flags);
 61 
 62         return res;
 63 }
 64 EXPORT_SYMBOL(ssb_gpio_out);
 65 
 66 u32 ssb_gpio_outen(struct ssb_bus *bus, u32 mask, u32 value)
 67 {
 68         unsigned long flags;
 69         u32 res = 0;
 70 
 71         spin_lock_irqsave(&bus->gpio_lock, flags);
 72         if (ssb_chipco_available(&bus->chipco))
 73                 res = ssb_chipco_gpio_outen(&bus->chipco, mask, value);
 74         else if (ssb_extif_available(&bus->extif))
 75                 res = ssb_extif_gpio_outen(&bus->extif, mask, value);
 76         else
 77                 SSB_WARN_ON(1);
 78         spin_unlock_irqrestore(&bus->gpio_lock, flags);
 79 
 80         return res;
 81 }
 82 EXPORT_SYMBOL(ssb_gpio_outen);
 83 
 84 u32 ssb_gpio_control(struct ssb_bus *bus, u32 mask, u32 value)
 85 {
 86         unsigned long flags;
 87         u32 res = 0;
 88 
 89         spin_lock_irqsave(&bus->gpio_lock, flags);
 90         if (ssb_chipco_available(&bus->chipco))
 91                 res = ssb_chipco_gpio_control(&bus->chipco, mask, value);
 92         spin_unlock_irqrestore(&bus->gpio_lock, flags);
 93 
 94         return res;
 95 }
 96 EXPORT_SYMBOL(ssb_gpio_control);
 97 
 98 u32 ssb_gpio_intmask(struct ssb_bus *bus, u32 mask, u32 value)
 99 {
100         unsigned long flags;
101         u32 res = 0;
102 
103         spin_lock_irqsave(&bus->gpio_lock, flags);
104         if (ssb_chipco_available(&bus->chipco))
105                 res = ssb_chipco_gpio_intmask(&bus->chipco, mask, value);
106         else if (ssb_extif_available(&bus->extif))
107                 res = ssb_extif_gpio_intmask(&bus->extif, mask, value);
108         else
109                 SSB_WARN_ON(1);
110         spin_unlock_irqrestore(&bus->gpio_lock, flags);
111 
112         return res;
113 }
114 EXPORT_SYMBOL(ssb_gpio_intmask);
115 
116 u32 ssb_gpio_polarity(struct ssb_bus *bus, u32 mask, u32 value)
117 {
118         unsigned long flags;
119         u32 res = 0;
120 
121         spin_lock_irqsave(&bus->gpio_lock, flags);
122         if (ssb_chipco_available(&bus->chipco))
123                 res = ssb_chipco_gpio_polarity(&bus->chipco, mask, value);
124         else if (ssb_extif_available(&bus->extif))
125                 res = ssb_extif_gpio_polarity(&bus->extif, mask, value);
126         else
127                 SSB_WARN_ON(1);
128         spin_unlock_irqrestore(&bus->gpio_lock, flags);
129 
130         return res;
131 }
132 EXPORT_SYMBOL(ssb_gpio_polarity);
133 
  This page was automatically generated by the LXR engine.