Ignore:
Timestamp:
2011-06-29T00:21:57+02:00 (5 years ago)
Author:
hauke
Message:

brcm47xx: add initial support for devices with bcma bus.

Ethernet and wifi are not working and this is highly experimental.

File:
1 edited

Legend:

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

    r14618 r27301  
    22#define __DIAG_GPIO_H 
    33#include <linux/interrupt.h> 
     4#include <linux/gpio.h> 
     5#include <asm/mach-bcm47xx/bcm47xx.h> 
    46 
    5 #ifndef BCMDRIVER 
    6 #include <linux/ssb/ssb_embedded.h> 
    7  
    8 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) 
    9 #include <linux/gpio.h> 
    10 #define ssb ssb_bcm47xx 
     7#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) 
     8#define ssb_bcm47xx bcm47xx_bus.ssb 
    119#endif 
    12 extern struct ssb_bus ssb; 
    13  
    14  
    15 static inline u32 gpio_in(void) 
    16 { 
    17         return ssb_gpio_in(&ssb, ~0); 
    18 } 
    19  
    20 static inline u32 gpio_out(u32 mask, u32 value) 
    21 { 
    22         return ssb_gpio_out(&ssb, mask, value); 
    23 } 
    24  
    25 static inline u32 gpio_outen(u32 mask, u32 value) 
    26 { 
    27         return ssb_gpio_outen(&ssb, mask, value); 
    28 } 
    29  
    30 static inline u32 gpio_control(u32 mask, u32 value) 
    31 { 
    32         return ssb_gpio_control(&ssb, mask, value); 
    33 } 
    34  
    35 static inline u32 gpio_setintmask(u32 mask, u32 value) 
    36 { 
    37         return ssb_gpio_intmask(&ssb, mask, value); 
    38 } 
    39  
    40 static inline u32 gpio_intpolarity(u32 mask, u32 value) 
    41 { 
    42         return ssb_gpio_polarity(&ssb, mask, value); 
    43 } 
    4410 
    4511static inline u32 __ssb_write32_masked(struct ssb_device *dev, u16 offset, 
     
    5622        int irq; 
    5723 
    58 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) 
    5924        irq = gpio_to_irq(0); 
    6025        if (irq == -EINVAL) return; 
    61 #else 
    62         if (ssb.chipco.dev) 
    63                 irq = ssb_mips_irq(ssb.chipco.dev) + 2; 
    64         else if (ssb.extif.dev) 
    65                 irq = ssb_mips_irq(ssb.extif.dev) + 2; 
    66         else return; 
    67 #endif 
    6826         
    6927        if (enabled) { 
     
    7432        } 
    7533 
    76         if (ssb.chipco.dev) 
    77                 __ssb_write32_masked(ssb.chipco.dev, SSB_CHIPCO_IRQMASK, SSB_CHIPCO_IRQ_GPIO, (enabled ? SSB_CHIPCO_IRQ_GPIO : 0)); 
     34        if (ssb_bcm47xx.chipco.dev) 
     35                __ssb_write32_masked(ssb_bcm47xx.chipco.dev, SSB_CHIPCO_IRQMASK, SSB_CHIPCO_IRQ_GPIO, (enabled ? SSB_CHIPCO_IRQ_GPIO : 0)); 
    7836} 
    79  
    80 #else 
    81  
    82 #include <typedefs.h> 
    83 #include <osl.h> 
    84 #include <bcmdevs.h> 
    85 #include <sbutils.h> 
    86 #include <sbconfig.h> 
    87 #include <sbchipc.h> 
    88 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) 
    89 #include <sbmips.h> 
    90 #else 
    91 #include <hndcpu.h> 
    92 #endif 
    93  
    94 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) 
    95 #define sbh bcm947xx_sbh 
    96 #define sbh_lock bcm947xx_sbh_lock 
    97 #endif 
    98  
    99 extern void *sbh; 
    100 extern spinlock_t sbh_lock; 
    101  
    102 #define gpio_in()       sb_gpioin(sbh) 
    103 #define gpio_out(mask, value)   sb_gpioout(sbh, mask, ((value) & (mask)), GPIO_DRV_PRIORITY) 
    104 #define gpio_outen(mask, value)         sb_gpioouten(sbh, mask, value, GPIO_DRV_PRIORITY) 
    105 #define gpio_control(mask, value)       sb_gpiocontrol(sbh, mask, value, GPIO_DRV_PRIORITY) 
    106 #define gpio_setintmask(mask, value)    sb_gpiointmask(sbh, mask, value, GPIO_DRV_PRIORITY) 
    107 #define gpio_intpolarity(mask, value)   sb_gpiointpolarity(sbh, mask, value, GPIO_DRV_PRIORITY) 
    108  
    109 static void gpio_set_irqenable(int enabled, irqreturn_t (*handler)(int, void *, struct pt_regs *)) 
    110 { 
    111         unsigned int coreidx; 
    112         unsigned long flags; 
    113         chipcregs_t *cc; 
    114         int irq; 
    115  
    116         spin_lock_irqsave(sbh_lock, flags); 
    117         coreidx = sb_coreidx(sbh); 
    118  
    119         irq = sb_irq(sbh) + 2; 
    120         if (enabled) 
    121                 request_irq(irq, handler, SA_SHIRQ | SA_SAMPLE_RANDOM, "gpio", handler); 
    122         else 
    123                 free_irq(irq, handler); 
    124  
    125         if ((cc = sb_setcore(sbh, SB_CC, 0))) { 
    126                 int intmask; 
    127  
    128                 intmask = readl(&cc->intmask); 
    129                 if (enabled) 
    130                         intmask |= CI_GPIO; 
    131                 else 
    132                         intmask &= ~CI_GPIO; 
    133                 writel(intmask, &cc->intmask); 
    134         } 
    135         sb_setcoreidx(sbh, coreidx); 
    136         spin_unlock_irqrestore(sbh_lock, flags); 
    137 } 
    138  
    139 #endif /* BCMDRIVER */ 
    14037 
    14138#define EXTIF_ADDR 0x1f000000 
Note: See TracChangeset for help on using the changeset viewer.