Changeset 36367


Ignore:
Timestamp:
2013-04-19T14:39:40+02:00 (5 years ago)
Author:
nbd
Message:

kernel: backport SSB/BCMA changes in preparation for a compat-wireless update

Signed-off-by: Felix Fietkau <nbd@…>

Location:
trunk/target/linux
Files:
2 added
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm47xx/patches-3.6/060-ssb-add-serial-flash-driver.patch

    r35080 r36367  
    477477 #define SSB_CHIPCO_BCAST_DATA          0x0054 
    478478 #define SSB_CHIPCO_GPIOPULLUP          0x0058          /* Rev >= 20 only */ 
    479 @@ -503,7 +516,7 @@ 
     479@@ -504,7 +517,7 @@ 
    480480 #define SSB_CHIPCO_FLASHCTL_ST_PP      0x0302          /* Page Program */ 
    481481 #define SSB_CHIPCO_FLASHCTL_ST_SE      0x02D8          /* Sector Erase */ 
     
    486486 #define SSB_CHIPCO_FLASHCTL_ST_CSA     0x1000          /* Keep chip select asserted */ 
    487487 #define SSB_CHIPCO_FLASHCTL_ST_SSE     0x0220          /* Sub-sector Erase */ 
    488 @@ -594,6 +607,9 @@ struct ssb_chipcommon { 
     488@@ -595,6 +608,9 @@ struct ssb_chipcommon { 
    489489        struct ssb_chipcommon_pmu pmu; 
    490490        u32 ticks_per_ms; 
  • trunk/target/linux/brcm47xx/patches-3.6/070-bcma-add-functions-to-write-to-serial-flash.patch

    r35080 r36367  
    293293  
    294294        switch (cc->capabilities & BCMA_CC_CAP_FLASHT) { 
    295 @@ -150,6 +375,12 @@ int bcma_sflash_init(struct bcma_drv_cc 
     295@@ -150,6 +375,12 @@ int bcma_sflash_init(struct bcma_drv_cc  
    296296        sflash->numblocks = e->numblocks; 
    297297        sflash->size = sflash->blocksize * sflash->numblocks; 
     
    317317 #define BCMA_CC_ID                     0x0000 
    318318 #define  BCMA_CC_ID_ID                 0x0000FFFF 
    319 @@ -519,17 +521,6 @@ struct bcma_pflash { 
     319@@ -520,17 +522,6 @@ struct bcma_pflash { 
    320320        u32 window_size; 
    321321 }; 
     
    335335 #ifdef CONFIG_BCMA_NFLASH 
    336336 struct mtd_info; 
    337 @@ -564,7 +555,7 @@ struct bcma_drv_cc { 
     337@@ -565,7 +556,7 @@ struct bcma_drv_cc { 
    338338 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    339339        struct bcma_pflash pflash; 
  • trunk/target/linux/brcm47xx/patches-3.6/071-bcma-add-functions-to-write-to-nand-flash.patch

    r35080 r36367  
    2626 }; 
    2727  
    28 @@ -31,6 +38,11 @@ int bcma_nflash_init(struct bcma_drv_cc 
     28@@ -31,6 +38,11 @@ int bcma_nflash_init(struct bcma_drv_cc  
    2929                return -ENODEV; 
    3030        } 
     
    3838        if (cc->core->id.rev == 38 && 
    3939            (cc->status & BCMA_CC_CHIPST_5357_NAND_BOOT)) 
    40 @@ -42,3 +54,141 @@ int bcma_nflash_init(struct bcma_drv_cc 
     40@@ -42,3 +54,141 @@ int bcma_nflash_init(struct bcma_drv_cc  
    4141  
    4242        return 0; 
     
    190190 /** ChipCommon core registers. **/ 
    191191 #define BCMA_CC_ID                     0x0000 
    192 @@ -522,17 +523,6 @@ struct bcma_pflash { 
     192@@ -523,17 +524,6 @@ struct bcma_pflash { 
    193193 }; 
    194194  
     
    208208        void *regs; 
    209209        unsigned long clockspeed; 
    210 @@ -558,7 +548,7 @@ struct bcma_drv_cc { 
     210@@ -559,7 +549,7 @@ struct bcma_drv_cc { 
    211211        struct bcm47xx_sflash sflash; 
    212212 #endif 
     
    217217  
    218218        int nr_serial_ports; 
    219 @@ -625,4 +615,13 @@ extern void bcma_chipco_regctl_maskset(s 
     219@@ -628,4 +618,13 @@ extern void bcma_chipco_regctl_maskset(s 
    220220                                       u32 offset, u32 mask, u32 set); 
    221221 extern void bcma_pmu_spuravoid_pllupdate(struct bcma_drv_cc *cc, int spuravoid); 
  • trunk/target/linux/brcm47xx/patches-3.6/235-bcma-dont-expose-mips-irq.patch

    r35121 r36367  
    1111--- a/drivers/bcma/driver_chipcommon.c 
    1212+++ b/drivers/bcma/driver_chipcommon.c 
    13 @@ -329,7 +329,7 @@ void bcma_chipco_serial_init(struct bcma 
     13@@ -332,7 +332,7 @@ void bcma_chipco_serial_init(struct bcma 
    1414                return; 
    1515        } 
     
    6666  
    6767        return 0; 
    68 @@ -596,6 +596,6 @@ int bcma_core_pci_pcibios_map_irq(const 
     68@@ -596,6 +596,6 @@ int bcma_core_pci_pcibios_map_irq(const  
    6969  
    7070        pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host, 
  • trunk/target/linux/brcm47xx/patches-3.6/750-bgmac.patch

    r35083 r36367  
    4444--- a/drivers/bcma/driver_chipcommon_pmu.c 
    4545+++ b/drivers/bcma/driver_chipcommon_pmu.c 
    46 @@ -264,7 +264,7 @@ static u32 bcma_pmu_pll_clock_bcm4706(st 
     46@@ -280,7 +280,7 @@ static u32 bcma_pmu_pll_clock_bcm4706(st 
    4747 } 
    4848  
     
    5353        struct bcma_bus *bus = cc->core->bus; 
    5454  
    55 @@ -293,6 +293,7 @@ static u32 bcma_pmu_get_bus_clock(struct 
     55@@ -309,6 +309,7 @@ static u32 bcma_pmu_get_bus_clock(struct 
    5656        } 
    5757        return BCMA_CC_PMU_HT_CLOCK; 
     
    19701970--- a/include/linux/bcma/bcma_driver_chipcommon.h 
    19711971+++ b/include/linux/bcma/bcma_driver_chipcommon.h 
    1972 @@ -624,4 +624,6 @@ int bcma_nflash_erase(struct bcma_drv_cc 
     1972@@ -627,4 +627,6 @@ int bcma_nflash_erase(struct bcma_drv_cc 
    19731973 int bcma_nflash_commit(struct bcma_drv_cc *cc, u32 offset, u32 len, const u8 *buf); 
    19741974 #endif 
  • trunk/target/linux/generic/patches-3.3/020-ssb_update.patch

    r35080 r36367  
    405405                 * min_msk = 0xCBB 
    406406                 * max_msk = 0x7FFFF 
    407 @@ -607,3 +617,61 @@ void ssb_pmu_set_ldo_paref(struct ssb_ch 
     407@@ -607,3 +617,90 @@ void ssb_pmu_set_ldo_paref(struct ssb_ch 
    408408  
    409409 EXPORT_SYMBOL(ssb_pmu_set_ldo_voltage); 
     
    467467+       } 
    468468+} 
     469+ 
     470+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid) 
     471+{ 
     472+       u32 pmu_ctl = 0; 
     473+ 
     474+       switch (cc->dev->bus->chip_id) { 
     475+       case 0x4322: 
     476+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100070); 
     477+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x1014140a); 
     478+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888854); 
     479+               if (spuravoid == 1) 
     480+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05201828); 
     481+               else 
     482+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05001828); 
     483+               pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; 
     484+               break; 
     485+       case 43222: 
     486+               /* TODO: BCM43222 requires updating PLLs too */ 
     487+               return; 
     488+       default: 
     489+               ssb_printk(KERN_ERR PFX 
     490+                          "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
     491+                          cc->dev->bus->chip_id); 
     492+               return; 
     493+       } 
     494+ 
     495+       chipco_set32(cc, SSB_CHIPCO_PMU_CTL, pmu_ctl); 
     496+} 
     497+EXPORT_SYMBOL_GPL(ssb_pmu_spuravoid_pllupdate); 
    469498--- /dev/null 
    470499+++ b/drivers/ssb/driver_chipcommon_sflash.c 
     
    766795--- a/drivers/ssb/driver_mipscore.c 
    767796+++ b/drivers/ssb/driver_mipscore.c 
    768 @@ -178,9 +178,9 @@ static void ssb_mips_serial_init(struct 
     797@@ -178,9 +178,9 @@ static void ssb_mips_serial_init(struct  
    769798 { 
    770799        struct ssb_bus *bus = mcore->dev->bus; 
     
    10321061 static inline u8 ssb_crc8(u8 crc, u8 data) 
    10331062 { 
    1034 @@ -331,7 +343,6 @@ static void sprom_extract_r123(struct ss 
     1063@@ -327,11 +339,25 @@ static s8 r123_extract_antgain(u8 sprom_ 
     1064        return (s8)gain; 
     1065 } 
     1066  
     1067+static void sprom_extract_r23(struct ssb_sprom *out, const u16 *in) 
     1068+{ 
     1069+       SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1070+       SPEX(opo, SSB_SPROM2_OPO, SSB_SPROM2_OPO_VALUE, 0); 
     1071+       SPEX(pa1lob0, SSB_SPROM2_PA1LOB0, 0xFFFF, 0); 
     1072+       SPEX(pa1lob1, SSB_SPROM2_PA1LOB1, 0xFFFF, 0); 
     1073+       SPEX(pa1lob2, SSB_SPROM2_PA1LOB2, 0xFFFF, 0); 
     1074+       SPEX(pa1hib0, SSB_SPROM2_PA1HIB0, 0xFFFF, 0); 
     1075+       SPEX(pa1hib1, SSB_SPROM2_PA1HIB1, 0xFFFF, 0); 
     1076+       SPEX(pa1hib2, SSB_SPROM2_PA1HIB2, 0xFFFF, 0); 
     1077+       SPEX(maxpwr_ah, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_HI, 0); 
     1078+       SPEX(maxpwr_al, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_LO, 
     1079+            SSB_SPROM2_MAXP_A_LO_SHIFT); 
     1080+} 
     1081+ 
     1082 static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in) 
    10351083 { 
    10361084        int i; 
     
    10401088  
    10411089        if (out->revision == 3)                 /* rev 3 moved MAC */ 
    1042 @@ -361,8 +372,9 @@ static void sprom_extract_r123(struct ss 
     1090@@ -361,8 +387,9 @@ static void sprom_extract_r123(struct ss 
    10431091        SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14); 
    10441092        SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15); 
     
    10521100             SSB_SPROM1_BINF_ANTA_SHIFT); 
    10531101        SPEX(ant_available_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG, 
    1054 @@ -388,22 +400,16 @@ static void sprom_extract_r123(struct ss 
     1102@@ -386,24 +413,19 @@ static void sprom_extract_r123(struct ss 
     1103             SSB_SPROM1_ITSSI_A_SHIFT); 
     1104        SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0); 
    10551105        SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0); 
    1056         if (out->revision >= 2) 
    1057                 SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1106-       if (out->revision >= 2) 
     1107-               SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1108+ 
    10581109+       SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8); 
    10591110+       SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0); 
     
    10801131+                                                   SSB_SPROM1_AGAIN_A, 
    10811132+                                                   SSB_SPROM1_AGAIN_A_SHIFT); 
     1133+       if (out->revision >= 2) 
     1134+               sprom_extract_r23(out, in); 
    10821135 } 
    10831136  
    10841137 /* Revs 4 5 and 8 have partially shared layout */ 
    1085 @@ -464,14 +470,17 @@ static void sprom_extract_r45(struct ssb 
     1138@@ -464,14 +486,17 @@ static void sprom_extract_r45(struct ssb 
    10861139        SPEX(et0phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET0A, 0); 
    10871140        SPEX(et1phyaddr, SSB_SPROM4_ETHPHY, SSB_SPROM4_ETHPHY_ET1A, 
     
    11031156                SPEX(boardflags_hi, SSB_SPROM5_BFLHI, 0xFFFF, 0); 
    11041157                SPEX(boardflags2_lo, SSB_SPROM5_BFL2LO, 0xFFFF, 0); 
    1105 @@ -504,16 +513,14 @@ static void sprom_extract_r45(struct ssb 
     1158@@ -504,16 +529,14 @@ static void sprom_extract_r45(struct ssb 
    11061159        } 
    11071160  
     
    11241177        sprom_extract_r458(out, in); 
    11251178  
    1126 @@ -523,14 +530,22 @@ static void sprom_extract_r45(struct ssb 
     1179@@ -523,14 +546,22 @@ static void sprom_extract_r45(struct ssb 
    11271180 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
    11281181 { 
     
    11491202        SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0); 
    11501203        SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, 0xFFFF, 0); 
    1151 @@ -596,16 +611,46 @@ static void sprom_extract_r8(struct ssb_ 
     1204@@ -596,16 +627,46 @@ static void sprom_extract_r8(struct ssb_ 
    11521205        SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0); 
    11531206  
     
    12021255        /* Extract FEM info */ 
    12031256        SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
    1204 @@ -630,6 +675,63 @@ static void sprom_extract_r8(struct ssb_ 
     1257@@ -630,6 +691,63 @@ static void sprom_extract_r8(struct ssb_ 
    12051258        SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, 
    12061259                SSB_SROM8_FEM_ANTSWLUT, SSB_SROM8_FEM_ANTSWLUT_SHIFT); 
     
    12661319  
    12671320        /* TODO - get remaining rev 8 stuff needed */ 
    1268 @@ -759,7 +861,6 @@ static void ssb_pci_get_boardinfo(struct 
     1321@@ -759,7 +877,6 @@ static void ssb_pci_get_boardinfo(struct 
    12691322 { 
    12701323        bi->vendor = bus->host_pci->subsystem_vendor; 
     
    16111664--- a/include/linux/ssb/ssb_driver_chipcommon.h 
    16121665+++ b/include/linux/ssb/ssb_driver_chipcommon.h 
    1613 @@ -504,7 +504,9 @@ 
     1666@@ -219,6 +219,7 @@ 
     1667 #define SSB_CHIPCO_PMU_CTL                     0x0600 /* PMU control */ 
     1668 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV            0xFFFF0000 /* ILP div mask */ 
     1669 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT      16 
     1670+#define  SSB_CHIPCO_PMU_CTL_PLL_UPD            0x00000400 
     1671 #define  SSB_CHIPCO_PMU_CTL_NOILPONW           0x00000200 /* No ILP on wait */ 
     1672 #define  SSB_CHIPCO_PMU_CTL_HTREQEN            0x00000100 /* HT req enable */ 
     1673 #define  SSB_CHIPCO_PMU_CTL_ALPREQEN           0x00000080 /* ALP req enable */ 
     1674@@ -504,7 +505,9 @@ 
    16141675 #define SSB_CHIPCO_FLASHCTL_ST_SE      0x02D8          /* Sector Erase */ 
    16151676 #define SSB_CHIPCO_FLASHCTL_ST_BE      0x00C7          /* Bulk Erase */ 
     
    16221683 /* Status register bits for ST flashes */ 
    16231684 #define SSB_CHIPCO_FLASHSTA_ST_WIP     0x01            /* Write In Progress */ 
    1624 @@ -588,7 +590,10 @@ struct ssb_chipcommon { 
     1685@@ -588,7 +591,10 @@ struct ssb_chipcommon { 
    16251686        u32 status; 
    16261687        /* Fast Powerup Delay constant */ 
     
    16331694  
    16341695 static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) 
    1635 @@ -628,8 +633,7 @@ enum ssb_clkmode { 
     1696@@ -628,8 +634,7 @@ enum ssb_clkmode { 
    16361697 extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, 
    16371698                                     enum ssb_clkmode mode); 
     
    16431704 void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); 
    16441705  
    1645 @@ -642,6 +646,8 @@ u32 ssb_chipco_gpio_outen(struct ssb_chi 
     1706@@ -642,6 +647,8 @@ u32 ssb_chipco_gpio_outen(struct ssb_chi 
    16461707 u32 ssb_chipco_gpio_control(struct ssb_chipcommon *cc, u32 mask, u32 value); 
    16471708 u32 ssb_chipco_gpio_intmask(struct ssb_chipcommon *cc, u32 mask, u32 value); 
     
    16521713 #ifdef CONFIG_SSB_SERIAL 
    16531714 extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, 
     1715@@ -661,5 +668,6 @@ enum ssb_pmu_ldo_volt_id { 
     1716 void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, 
     1717                             enum ssb_pmu_ldo_volt_id id, u32 voltage); 
     1718 void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); 
     1719+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid); 
     1720  
     1721 #endif /* LINUX_SSB_CHIPCO_H_ */ 
    16541722--- a/include/linux/ssb/ssb_driver_extif.h 
    16551723+++ b/include/linux/ssb/ssb_driver_extif.h 
     
    17901858 #define SSB_SPROM4_BFLHI               0x0046  /* Board Flags Hi */ 
    17911859 #define SSB_SPROM4_BFL2LO              0x0048  /* Board flags 2 (low 16 bits) */ 
     1860@@ -287,11 +289,11 @@ 
     1861 #define  SSB_SPROM4_ETHPHY_ET1A_SHIFT  5 
     1862 #define  SSB_SPROM4_ETHPHY_ET0M                (1<<14) /* MDIO for enet0 */ 
     1863 #define  SSB_SPROM4_ETHPHY_ET1M                (1<<15) /* MDIO for enet1 */ 
     1864-#define SSB_SPROM4_ANTAVAIL            0x005D  /* Antenna available bitfields */ 
     1865-#define  SSB_SPROM4_ANTAVAIL_A         0x00FF  /* A-PHY bitfield */ 
     1866-#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   0 
     1867-#define  SSB_SPROM4_ANTAVAIL_BG                0xFF00  /* B-PHY and G-PHY bitfield */ 
     1868-#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  8 
     1869+#define SSB_SPROM4_ANTAVAIL            0x005C  /* Antenna available bitfields */ 
     1870+#define  SSB_SPROM4_ANTAVAIL_BG                0x00FF  /* B-PHY and G-PHY bitfield */ 
     1871+#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  0 
     1872+#define  SSB_SPROM4_ANTAVAIL_A         0xFF00  /* A-PHY bitfield */ 
     1873+#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   8 
     1874 #define SSB_SPROM4_AGAIN01             0x005E  /* Antenna Gain (in dBm Q5.2) */ 
     1875 #define  SSB_SPROM4_AGAIN0             0x00FF  /* Antenna 0 */ 
     1876 #define  SSB_SPROM4_AGAIN0_SHIFT       0 
    17921877@@ -389,6 +391,11 @@ 
    17931878 #define  SSB_SPROM8_GPIOB_P2           0x00FF  /* Pin 2 */ 
     
    19462031+} 
    19472032+#endif /* LINUX_BCM47XX_WDT_H_ */ 
     2033--- a/drivers/net/wireless/b43/phy_n.c 
     2034+++ b/drivers/net/wireless/b43/phy_n.c 
     2035@@ -4259,7 +4259,8 @@ static void b43_nphy_pmu_spur_avoid(stru 
     2036 #endif 
     2037 #ifdef CONFIG_B43_SSB 
     2038        case B43_BUS_SSB: 
     2039-               /* FIXME */ 
     2040+               ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco, 
     2041+                                           avoid); 
     2042                break; 
     2043 #endif 
     2044        } 
  • trunk/target/linux/generic/patches-3.3/025-bcma_backport.patch

    r35080 r36367  
    225225  
    226226 static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset, 
    227 @@ -22,20 +25,119 @@ static inline u32 bcma_cc_write32_masked 
     227@@ -22,20 +25,120 @@ static inline u32 bcma_cc_write32_masked 
    228228        return value; 
    229229 } 
    230230  
    231231-void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) 
    232 +static u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     232+u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
    233233 { 
    234234-       u32 leddc_on = 10; 
     
    240240+       return 20000000; 
    241241+} 
     242+EXPORT_SYMBOL_GPL(bcma_chipco_get_alp_clock); 
    242243+ 
    243244+static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc) 
     
    349350                bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0); 
    350351                bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0); 
    351 @@ -44,7 +146,7 @@ void bcma_core_chipcommon_init(struct bc 
     352@@ -44,7 +147,7 @@ void bcma_core_chipcommon_init(struct bc 
    352353        if (cc->capabilities & BCMA_CC_CAP_PMU) 
    353354                bcma_pmu_init(cc); 
     
    358359        if (cc->core->id.rev >= 16) { 
    359360                if (cc->core->bus->sprom.leddc_on_time && 
    360 @@ -56,15 +158,33 @@ void bcma_core_chipcommon_init(struct bc 
     361@@ -56,15 +159,33 @@ void bcma_core_chipcommon_init(struct bc 
    361362                        ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | 
    362363                         (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT))); 
     
    395396  
    396397 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value) 
    397 @@ -84,28 +204,97 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_ 
     398@@ -84,28 +205,99 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_ 
    398399  
    399400 u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     
    409410+       return res; 
    410411 } 
     412+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out); 
    411413  
    412414 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     
    422424+       return res; 
    423425 } 
     426+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen); 
    424427  
    425428+/* 
     
    498501  
    499502 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    500 @@ -118,8 +307,7 @@ void bcma_chipco_serial_init(struct bcma 
     503@@ -118,8 +310,7 @@ void bcma_chipco_serial_init(struct bcma 
    501504        struct bcma_serial_port *ports = cc->serial_ports; 
    502505  
     
    508511                        /* Turn off UART clock before switching clocksource. */ 
    509512                        bcma_cc_write32(cc, BCMA_CC_CORECTL, 
    510 @@ -137,8 +325,7 @@ void bcma_chipco_serial_init(struct bcma 
     513@@ -137,8 +328,7 @@ void bcma_chipco_serial_init(struct bcma 
    511514                                       | BCMA_CC_CORECTL_UARTCLKEN); 
    512515                } 
     
    749752                bcma_cc_mask32(cc, BCMA_CC_PMU_CTL, 
    750753                              ~BCMA_CC_PMU_CTL_NOILPONW); 
    751 @@ -174,37 +165,31 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
     754@@ -174,37 +165,47 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
    752755                bcma_cc_set32(cc, BCMA_CC_PMU_CTL, 
    753756                             BCMA_CC_PMU_CTL_NOILPONW); 
     
    775778-       case 0x4749: 
    776779-       case 53572: 
     780+       case BCMA_CHIP_ID_BCM4313: 
     781+       case BCMA_CHIP_ID_BCM43224: 
     782+       case BCMA_CHIP_ID_BCM43225: 
     783+       case BCMA_CHIP_ID_BCM43227: 
     784+       case BCMA_CHIP_ID_BCM43228: 
     785+       case BCMA_CHIP_ID_BCM4331: 
     786+       case BCMA_CHIP_ID_BCM43421: 
     787+       case BCMA_CHIP_ID_BCM43428: 
     788+       case BCMA_CHIP_ID_BCM43431: 
    777789+       case BCMA_CHIP_ID_BCM4716: 
     790+       case BCMA_CHIP_ID_BCM47162: 
    778791+       case BCMA_CHIP_ID_BCM4748: 
    779 +       case BCMA_CHIP_ID_BCM47162: 
    780 +       case BCMA_CHIP_ID_BCM4313: 
     792+       case BCMA_CHIP_ID_BCM4749: 
    781793+       case BCMA_CHIP_ID_BCM5357: 
    782 +       case BCMA_CHIP_ID_BCM4749: 
    783794+       case BCMA_CHIP_ID_BCM53572: 
     795+       case BCMA_CHIP_ID_BCM6362: 
    784796                /* always 20Mhz */ 
    785797                return 20000 * 1000; 
    786798-       case 0x5356: 
    787799-       case 0x5300: 
     800+       case BCMA_CHIP_ID_BCM4706: 
    788801+       case BCMA_CHIP_ID_BCM5356: 
    789 +       case BCMA_CHIP_ID_BCM4706: 
    790802                /* always 25Mhz */ 
    791803                return 25000 * 1000; 
     804+       case BCMA_CHIP_ID_BCM43460: 
     805+       case BCMA_CHIP_ID_BCM4352: 
     806+       case BCMA_CHIP_ID_BCM4360: 
     807+               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
     808+                       return 40000 * 1000; 
     809+               else 
     810+                       return 20000 * 1000; 
    792811        default: 
    793812-               pr_warn("No ALP clock specified for %04X device, " 
     
    799818        return BCMA_CC_PMU_ALP_CLOCK; 
    800819 } 
    801 @@ -212,7 +197,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
     820@@ -212,7 +213,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
    802821 /* Find the output of the "m" pll divider given pll controls that start with 
    803822  * pllreg "pll0" i.e. 12 for main 6 for phy, 0 for misc. 
     
    808827        u32 tmp, div, ndiv, p1, p2, fc; 
    809828        struct bcma_bus *bus = cc->core->bus; 
    810 @@ -221,7 +206,8 @@ static u32 bcma_pmu_clock(struct bcma_dr 
     829@@ -221,7 +222,8 @@ static u32 bcma_pmu_clock(struct bcma_dr 
    811830  
    812831        BUG_ON(!m || m > 4); 
     
    818837                tmp = bcma_cc_read32(cc, BCMA_CC_CHIPSTAT); 
    819838                if (tmp & 0x40000) 
    820 @@ -240,60 +226,95 @@ static u32 bcma_pmu_clock(struct bcma_dr 
     839@@ -240,60 +242,95 @@ static u32 bcma_pmu_clock(struct bcma_dr 
    821840        ndiv = (tmp & BCMA_CC_PPL_NDIV_MASK) >> BCMA_CC_PPL_NDIV_SHIFT; 
    822841  
     
    940959                        break; 
    941960                default: 
    942 @@ -301,10 +322,189 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr 
     961@@ -301,10 +338,189 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr 
    943962                        break; 
    944963                } 
     
    9971016+               bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
    9981017+ 
    999 +               tmp = 1 << 10; 
     1018+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    10001019+               break; 
    10011020+ 
     
    10181037+                                                    0x03000a08); 
    10191038+               } 
    1020 +               tmp = 1 << 10; 
     1039+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    10211040+               break; 
    10221041+ 
     
    10511070+                                                    0x88888815); 
    10521071+               } 
    1053 +               tmp = 1 << 10; 
     1072+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    10541073+               break; 
    10551074+ 
     
    10851104+               } 
    10861105+ 
    1087 +               tmp = 3 << 9; 
     1106+               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
    10881107+               break; 
    10891108+ 
     
    11211140+                                                    0x88888815); 
    11221141+               } 
    1123 +               tmp = 1 << 10; 
     1142+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
    11241143+               break; 
    11251144+       default: 
     
    15561575        } 
    15571576 } 
    1558 @@ -171,9 +194,9 @@ u32 bcma_cpu_clock(struct bcma_drv_mips 
     1577@@ -171,9 +194,9 @@ u32 bcma_cpu_clock(struct bcma_drv_mips  
    15591578        struct bcma_bus *bus = mcore->core->bus; 
    15601579  
     
    19141933  
    19151934 /************************************************** 
    1916 @@ -138,88 +143,108 @@ static void bcma_pcie_mdio_write(struct 
     1935@@ -138,88 +143,108 @@ static void bcma_pcie_mdio_write(struct  
    19171936  
    19181937 static u8 bcma_pcicore_polarity_workaround(struct bcma_drv_pci *pc) 
     
    27722791        struct bcma_bus *bus = pci_get_drvdata(dev); 
    27732792  
    2774 @@ -234,7 +238,7 @@ static void bcma_host_pci_remove(struct 
     2793@@ -234,7 +238,7 @@ static void bcma_host_pci_remove(struct  
    27752794        pci_set_drvdata(dev, NULL); 
    27762795 } 
     
    32133232+       default: 
    32143233+               return "UNKNOWN"; 
    3215         } 
     3234+       } 
    32163235+ 
    32173236+       for (i = 0; i < size; i++) { 
    32183237+               if (names[i].id == id->id) 
    32193238+                       return names[i].name; 
    3220 +       } 
     3239        } 
    32213240+ 
    32223241        return "UNKNOWN"; 
     
    36023621+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
    36033622+       } 
     3623+ 
     3624+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_TSSIPOS, 
     3625+            SSB_SROM8_FEM_TSSIPOS_SHIFT); 
     3626+       SPEX(fem.ghz2.extpa_gain, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_EXTPA_GAIN, 
     3627+            SSB_SROM8_FEM_EXTPA_GAIN_SHIFT); 
     3628+       SPEX(fem.ghz2.pdet_range, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_PDET_RANGE, 
     3629+            SSB_SROM8_FEM_PDET_RANGE_SHIFT); 
     3630+       SPEX(fem.ghz2.tr_iso, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_TR_ISO, 
     3631+            SSB_SROM8_FEM_TR_ISO_SHIFT); 
     3632+       SPEX(fem.ghz2.antswlut, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_ANTSWLUT, 
     3633+            SSB_SROM8_FEM_ANTSWLUT_SHIFT); 
     3634+ 
     3635+       SPEX(fem.ghz5.tssipos, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_TSSIPOS, 
     3636+            SSB_SROM8_FEM_TSSIPOS_SHIFT); 
     3637+       SPEX(fem.ghz5.extpa_gain, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_EXTPA_GAIN, 
     3638+            SSB_SROM8_FEM_EXTPA_GAIN_SHIFT); 
     3639+       SPEX(fem.ghz5.pdet_range, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_PDET_RANGE, 
     3640+            SSB_SROM8_FEM_PDET_RANGE_SHIFT); 
     3641+       SPEX(fem.ghz5.tr_iso, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_TR_ISO, 
     3642+            SSB_SROM8_FEM_TR_ISO_SHIFT); 
     3643+       SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT, 
     3644+            SSB_SROM8_FEM_ANTSWLUT_SHIFT); 
     3645+ 
     3646+       SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A, 
     3647+            SSB_SPROM8_ANTAVAIL_A_SHIFT); 
     3648+       SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, 
     3649+            SSB_SPROM8_ANTAVAIL_BG_SHIFT); 
     3650+       SPEX(maxpwr_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_MAXP_BG_MASK, 0); 
     3651+       SPEX(itssi_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_ITSSI_BG, 
     3652+            SSB_SPROM8_ITSSI_BG_SHIFT); 
     3653+       SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); 
     3654+       SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, 
     3655+            SSB_SPROM8_ITSSI_A_SHIFT); 
     3656+       SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0); 
     3657+       SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK, 
     3658+            SSB_SPROM8_MAXP_AL_SHIFT); 
     3659+       SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0); 
     3660+       SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1, 
     3661+            SSB_SPROM8_GPIOA_P1_SHIFT); 
     3662+       SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0); 
     3663+       SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3, 
     3664+            SSB_SPROM8_GPIOB_P3_SHIFT); 
     3665+       SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0); 
     3666+       SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G, 
     3667+            SSB_SPROM8_TRI5G_SHIFT); 
     3668+       SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0); 
     3669+       SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH, 
     3670+            SSB_SPROM8_TRI5GH_SHIFT); 
     3671+       SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G, 
     3672+            SSB_SPROM8_RXPO2G_SHIFT); 
     3673+       SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G, 
     3674+            SSB_SPROM8_RXPO5G_SHIFT); 
     3675+       SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0); 
     3676+       SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G, 
     3677+            SSB_SPROM8_RSSISMC2G_SHIFT); 
     3678+       SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G, 
     3679+            SSB_SPROM8_RSSISAV2G_SHIFT); 
     3680+       SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G, 
     3681+            SSB_SPROM8_BXA2G_SHIFT); 
     3682+       SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0); 
     3683+       SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G, 
     3684+            SSB_SPROM8_RSSISMC5G_SHIFT); 
     3685+       SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G, 
     3686+            SSB_SPROM8_RSSISAV5G_SHIFT); 
     3687+       SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G, 
     3688+            SSB_SPROM8_BXA5G_SHIFT); 
     3689+ 
     3690+       SPEX(pa0b0, SSB_SPROM8_PA0B0, ~0, 0); 
     3691+       SPEX(pa0b1, SSB_SPROM8_PA0B1, ~0, 0); 
     3692+       SPEX(pa0b2, SSB_SPROM8_PA0B2, ~0, 0); 
     3693+       SPEX(pa1b0, SSB_SPROM8_PA1B0, ~0, 0); 
     3694+       SPEX(pa1b1, SSB_SPROM8_PA1B1, ~0, 0); 
     3695+       SPEX(pa1b2, SSB_SPROM8_PA1B2, ~0, 0); 
     3696+       SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, ~0, 0); 
     3697+       SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, ~0, 0); 
     3698+       SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, ~0, 0); 
     3699+       SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, ~0, 0); 
     3700+       SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, ~0, 0); 
     3701+       SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, ~0, 0); 
     3702+       SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, ~0, 0); 
     3703+       SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, ~0, 0); 
     3704+       SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, ~0, 0); 
     3705+       SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, ~0, 0); 
     3706+       SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, ~0, 0); 
     3707+ 
     3708+       /* Extract the antenna gain values. */ 
     3709+       SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01, 
     3710+            SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT); 
     3711+       SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01, 
     3712+            SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT); 
     3713+       SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23, 
     3714+            SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT); 
     3715+       SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23, 
     3716+            SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT); 
     3717+ 
     3718+       SPEX(leddc_on_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_ON, 
     3719+            SSB_SPROM8_LEDDC_ON_SHIFT); 
     3720+       SPEX(leddc_off_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_OFF, 
     3721+            SSB_SPROM8_LEDDC_OFF_SHIFT); 
     3722+ 
     3723+       SPEX(txchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_TXCHAIN, 
     3724+            SSB_SPROM8_TXRXC_TXCHAIN_SHIFT); 
     3725+       SPEX(rxchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_RXCHAIN, 
     3726+            SSB_SPROM8_TXRXC_RXCHAIN_SHIFT); 
     3727+       SPEX(antswitch, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_SWITCH, 
     3728+            SSB_SPROM8_TXRXC_SWITCH_SHIFT); 
     3729+ 
     3730+       SPEX(opo, SSB_SPROM8_OFDM2GPO, 0x00ff, 0); 
     3731+ 
     3732+       SPEX_ARRAY8(mcs2gpo, SSB_SPROM8_2G_MCSPO, ~0, 0); 
     3733+       SPEX_ARRAY8(mcs5gpo, SSB_SPROM8_5G_MCSPO, ~0, 0); 
     3734+       SPEX_ARRAY8(mcs5glpo, SSB_SPROM8_5GL_MCSPO, ~0, 0); 
     3735+       SPEX_ARRAY8(mcs5ghpo, SSB_SPROM8_5GH_MCSPO, ~0, 0); 
     3736+ 
     3737+       SPEX(rawtempsense, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_RAWTEMP, 
     3738+            SSB_SPROM8_RAWTS_RAWTEMP_SHIFT); 
     3739+       SPEX(measpower, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_MEASPOWER, 
     3740+            SSB_SPROM8_RAWTS_MEASPOWER_SHIFT); 
     3741+       SPEX(tempsense_slope, SSB_SPROM8_OPT_CORRX, 
     3742+            SSB_SPROM8_OPT_CORRX_TEMP_SLOPE, 
     3743+            SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT); 
     3744+       SPEX(tempcorrx, SSB_SPROM8_OPT_CORRX, SSB_SPROM8_OPT_CORRX_TEMPCORRX, 
     3745+            SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT); 
     3746+       SPEX(tempsense_option, SSB_SPROM8_OPT_CORRX, 
     3747+            SSB_SPROM8_OPT_CORRX_TEMP_OPTION, 
     3748+            SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT); 
     3749+       SPEX(freqoffset_corr, SSB_SPROM8_HWIQ_IQSWP, 
     3750+            SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR, 
     3751+            SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT); 
     3752+       SPEX(iqcal_swp_dis, SSB_SPROM8_HWIQ_IQSWP, 
     3753+            SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP, 
     3754+            SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT); 
     3755+       SPEX(hw_iqcal_en, SSB_SPROM8_HWIQ_IQSWP, SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL, 
     3756+            SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT); 
     3757+ 
     3758+       SPEX(bw40po, SSB_SPROM8_BW40PO, ~0, 0); 
     3759+       SPEX(cddpo, SSB_SPROM8_CDDPO, ~0, 0); 
     3760+       SPEX(stbcpo, SSB_SPROM8_STBCPO, ~0, 0); 
     3761+       SPEX(bwduppo, SSB_SPROM8_BWDUPPO, ~0, 0); 
     3762+ 
     3763+       SPEX(tempthresh, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_TRESH, 
     3764+            SSB_SPROM8_THERMAL_TRESH_SHIFT); 
     3765+       SPEX(tempoffset, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_OFFSET, 
     3766+            SSB_SPROM8_THERMAL_OFFSET_SHIFT); 
     3767+       SPEX(phycal_tempdelta, SSB_SPROM8_TEMPDELTA, 
     3768+            SSB_SPROM8_TEMPDELTA_PHYCAL, 
     3769+            SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT); 
     3770+       SPEX(temps_period, SSB_SPROM8_TEMPDELTA, SSB_SPROM8_TEMPDELTA_PERIOD, 
     3771+            SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT); 
     3772+       SPEX(temps_hysteresis, SSB_SPROM8_TEMPDELTA, 
     3773+            SSB_SPROM8_TEMPDELTA_HYSTERESIS, 
     3774+            SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT); 
     3775+} 
     3776+ 
     3777+/* 
     3778+ * Indicates the presence of external SPROM. 
     3779+ */ 
     3780+static bool bcma_sprom_ext_available(struct bcma_bus *bus) 
     3781+{ 
     3782+       u32 chip_status; 
     3783+       u32 srom_control; 
     3784+       u32 present_mask; 
     3785+ 
     3786+       if (bus->drv_cc.core->id.rev >= 31) { 
     3787+               if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM)) 
     3788+                       return false; 
     3789+ 
     3790+               srom_control = bcma_read32(bus->drv_cc.core, 
     3791+                                          BCMA_CC_SROM_CONTROL); 
     3792+               return srom_control & BCMA_CC_SROM_CONTROL_PRESENT; 
     3793+       } 
     3794+ 
     3795+       /* older chipcommon revisions use chip status register */ 
     3796+       chip_status = bcma_read32(bus->drv_cc.core, BCMA_CC_CHIPSTAT); 
     3797+       switch (bus->chipinfo.id) { 
     3798+       case BCMA_CHIP_ID_BCM4313: 
     3799+               present_mask = BCMA_CC_CHIPST_4313_SPROM_PRESENT; 
     3800+               break; 
     3801+ 
     3802+       case BCMA_CHIP_ID_BCM4331: 
     3803+               present_mask = BCMA_CC_CHIPST_4331_SPROM_PRESENT; 
     3804+               break; 
    36043805  
    36053806-       bus->sprom.txpid2g[0] = (sprom[SPOFF(SSB_SPROM4_TXPID2G01)] & 
     
    36673868-       bus->sprom.fem.ghz5.antswlut = (sprom[SPOFF(SSB_SPROM8_FEM5G)] & 
    36683869-               SSB_SROM8_FEM_ANTSWLUT) >> SSB_SROM8_FEM_ANTSWLUT_SHIFT; 
    3669 +       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_TSSIPOS, 
    3670 +            SSB_SROM8_FEM_TSSIPOS_SHIFT); 
    3671 +       SPEX(fem.ghz2.extpa_gain, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_EXTPA_GAIN, 
    3672 +            SSB_SROM8_FEM_EXTPA_GAIN_SHIFT); 
    3673 +       SPEX(fem.ghz2.pdet_range, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_PDET_RANGE, 
    3674 +            SSB_SROM8_FEM_PDET_RANGE_SHIFT); 
    3675 +       SPEX(fem.ghz2.tr_iso, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_TR_ISO, 
    3676 +            SSB_SROM8_FEM_TR_ISO_SHIFT); 
    3677 +       SPEX(fem.ghz2.antswlut, SSB_SPROM8_FEM2G, SSB_SROM8_FEM_ANTSWLUT, 
    3678 +            SSB_SROM8_FEM_ANTSWLUT_SHIFT); 
    3679 + 
    3680 +       SPEX(fem.ghz5.tssipos, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_TSSIPOS, 
    3681 +            SSB_SROM8_FEM_TSSIPOS_SHIFT); 
    3682 +       SPEX(fem.ghz5.extpa_gain, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_EXTPA_GAIN, 
    3683 +            SSB_SROM8_FEM_EXTPA_GAIN_SHIFT); 
    3684 +       SPEX(fem.ghz5.pdet_range, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_PDET_RANGE, 
    3685 +            SSB_SROM8_FEM_PDET_RANGE_SHIFT); 
    3686 +       SPEX(fem.ghz5.tr_iso, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_TR_ISO, 
    3687 +            SSB_SROM8_FEM_TR_ISO_SHIFT); 
    3688 +       SPEX(fem.ghz5.antswlut, SSB_SPROM8_FEM5G, SSB_SROM8_FEM_ANTSWLUT, 
    3689 +            SSB_SROM8_FEM_ANTSWLUT_SHIFT); 
    3690 + 
    3691 +       SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A, 
    3692 +            SSB_SPROM8_ANTAVAIL_A_SHIFT); 
    3693 +       SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, 
    3694 +            SSB_SPROM8_ANTAVAIL_BG_SHIFT); 
    3695 +       SPEX(maxpwr_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_MAXP_BG_MASK, 0); 
    3696 +       SPEX(itssi_bg, SSB_SPROM8_MAXP_BG, SSB_SPROM8_ITSSI_BG, 
    3697 +            SSB_SPROM8_ITSSI_BG_SHIFT); 
    3698 +       SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); 
    3699 +       SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, 
    3700 +            SSB_SPROM8_ITSSI_A_SHIFT); 
    3701 +       SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0); 
    3702 +       SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK, 
    3703 +            SSB_SPROM8_MAXP_AL_SHIFT); 
    3704 +       SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0); 
    3705 +       SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1, 
    3706 +            SSB_SPROM8_GPIOA_P1_SHIFT); 
    3707 +       SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0); 
    3708 +       SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3, 
    3709 +            SSB_SPROM8_GPIOB_P3_SHIFT); 
    3710 +       SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0); 
    3711 +       SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G, 
    3712 +            SSB_SPROM8_TRI5G_SHIFT); 
    3713 +       SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0); 
    3714 +       SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH, 
    3715 +            SSB_SPROM8_TRI5GH_SHIFT); 
    3716 +       SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G, 
    3717 +            SSB_SPROM8_RXPO2G_SHIFT); 
    3718 +       SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G, 
    3719 +            SSB_SPROM8_RXPO5G_SHIFT); 
    3720 +       SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0); 
    3721 +       SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G, 
    3722 +            SSB_SPROM8_RSSISMC2G_SHIFT); 
    3723 +       SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G, 
    3724 +            SSB_SPROM8_RSSISAV2G_SHIFT); 
    3725 +       SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G, 
    3726 +            SSB_SPROM8_BXA2G_SHIFT); 
    3727 +       SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0); 
    3728 +       SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G, 
    3729 +            SSB_SPROM8_RSSISMC5G_SHIFT); 
    3730 +       SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G, 
    3731 +            SSB_SPROM8_RSSISAV5G_SHIFT); 
    3732 +       SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G, 
    3733 +            SSB_SPROM8_BXA5G_SHIFT); 
    3734 + 
    3735 +       SPEX(pa0b0, SSB_SPROM8_PA0B0, ~0, 0); 
    3736 +       SPEX(pa0b1, SSB_SPROM8_PA0B1, ~0, 0); 
    3737 +       SPEX(pa0b2, SSB_SPROM8_PA0B2, ~0, 0); 
    3738 +       SPEX(pa1b0, SSB_SPROM8_PA1B0, ~0, 0); 
    3739 +       SPEX(pa1b1, SSB_SPROM8_PA1B1, ~0, 0); 
    3740 +       SPEX(pa1b2, SSB_SPROM8_PA1B2, ~0, 0); 
    3741 +       SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, ~0, 0); 
    3742 +       SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, ~0, 0); 
    3743 +       SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, ~0, 0); 
    3744 +       SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, ~0, 0); 
    3745 +       SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, ~0, 0); 
    3746 +       SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, ~0, 0); 
    3747 +       SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, ~0, 0); 
    3748 +       SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, ~0, 0); 
    3749 +       SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, ~0, 0); 
    3750 +       SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, ~0, 0); 
    3751 +       SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, ~0, 0); 
    3752 + 
    3753 +       /* Extract the antenna gain values. */ 
    3754 +       SPEX(antenna_gain.a0, SSB_SPROM8_AGAIN01, 
    3755 +            SSB_SPROM8_AGAIN0, SSB_SPROM8_AGAIN0_SHIFT); 
    3756 +       SPEX(antenna_gain.a1, SSB_SPROM8_AGAIN01, 
    3757 +            SSB_SPROM8_AGAIN1, SSB_SPROM8_AGAIN1_SHIFT); 
    3758 +       SPEX(antenna_gain.a2, SSB_SPROM8_AGAIN23, 
    3759 +            SSB_SPROM8_AGAIN2, SSB_SPROM8_AGAIN2_SHIFT); 
    3760 +       SPEX(antenna_gain.a3, SSB_SPROM8_AGAIN23, 
    3761 +            SSB_SPROM8_AGAIN3, SSB_SPROM8_AGAIN3_SHIFT); 
    3762 + 
    3763 +       SPEX(leddc_on_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_ON, 
    3764 +            SSB_SPROM8_LEDDC_ON_SHIFT); 
    3765 +       SPEX(leddc_off_time, SSB_SPROM8_LEDDC, SSB_SPROM8_LEDDC_OFF, 
    3766 +            SSB_SPROM8_LEDDC_OFF_SHIFT); 
    3767 + 
    3768 +       SPEX(txchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_TXCHAIN, 
    3769 +            SSB_SPROM8_TXRXC_TXCHAIN_SHIFT); 
    3770 +       SPEX(rxchain, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_RXCHAIN, 
    3771 +            SSB_SPROM8_TXRXC_RXCHAIN_SHIFT); 
    3772 +       SPEX(antswitch, SSB_SPROM8_TXRXC, SSB_SPROM8_TXRXC_SWITCH, 
    3773 +            SSB_SPROM8_TXRXC_SWITCH_SHIFT); 
    3774 + 
    3775 +       SPEX(opo, SSB_SPROM8_OFDM2GPO, 0x00ff, 0); 
    3776 + 
    3777 +       SPEX_ARRAY8(mcs2gpo, SSB_SPROM8_2G_MCSPO, ~0, 0); 
    3778 +       SPEX_ARRAY8(mcs5gpo, SSB_SPROM8_5G_MCSPO, ~0, 0); 
    3779 +       SPEX_ARRAY8(mcs5glpo, SSB_SPROM8_5GL_MCSPO, ~0, 0); 
    3780 +       SPEX_ARRAY8(mcs5ghpo, SSB_SPROM8_5GH_MCSPO, ~0, 0); 
    3781 + 
    3782 +       SPEX(rawtempsense, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_RAWTEMP, 
    3783 +            SSB_SPROM8_RAWTS_RAWTEMP_SHIFT); 
    3784 +       SPEX(measpower, SSB_SPROM8_RAWTS, SSB_SPROM8_RAWTS_MEASPOWER, 
    3785 +            SSB_SPROM8_RAWTS_MEASPOWER_SHIFT); 
    3786 +       SPEX(tempsense_slope, SSB_SPROM8_OPT_CORRX, 
    3787 +            SSB_SPROM8_OPT_CORRX_TEMP_SLOPE, 
    3788 +            SSB_SPROM8_OPT_CORRX_TEMP_SLOPE_SHIFT); 
    3789 +       SPEX(tempcorrx, SSB_SPROM8_OPT_CORRX, SSB_SPROM8_OPT_CORRX_TEMPCORRX, 
    3790 +            SSB_SPROM8_OPT_CORRX_TEMPCORRX_SHIFT); 
    3791 +       SPEX(tempsense_option, SSB_SPROM8_OPT_CORRX, 
    3792 +            SSB_SPROM8_OPT_CORRX_TEMP_OPTION, 
    3793 +            SSB_SPROM8_OPT_CORRX_TEMP_OPTION_SHIFT); 
    3794 +       SPEX(freqoffset_corr, SSB_SPROM8_HWIQ_IQSWP, 
    3795 +            SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR, 
    3796 +            SSB_SPROM8_HWIQ_IQSWP_FREQ_CORR_SHIFT); 
    3797 +       SPEX(iqcal_swp_dis, SSB_SPROM8_HWIQ_IQSWP, 
    3798 +            SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP, 
    3799 +            SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT); 
    3800 +       SPEX(hw_iqcal_en, SSB_SPROM8_HWIQ_IQSWP, SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL, 
    3801 +            SSB_SPROM8_HWIQ_IQSWP_HW_IQCAL_SHIFT); 
    3802 + 
    3803 +       SPEX(bw40po, SSB_SPROM8_BW40PO, ~0, 0); 
    3804 +       SPEX(cddpo, SSB_SPROM8_CDDPO, ~0, 0); 
    3805 +       SPEX(stbcpo, SSB_SPROM8_STBCPO, ~0, 0); 
    3806 +       SPEX(bwduppo, SSB_SPROM8_BWDUPPO, ~0, 0); 
    3807 + 
    3808 +       SPEX(tempthresh, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_TRESH, 
    3809 +            SSB_SPROM8_THERMAL_TRESH_SHIFT); 
    3810 +       SPEX(tempoffset, SSB_SPROM8_THERMAL, SSB_SPROM8_THERMAL_OFFSET, 
    3811 +            SSB_SPROM8_THERMAL_OFFSET_SHIFT); 
    3812 +       SPEX(phycal_tempdelta, SSB_SPROM8_TEMPDELTA, 
    3813 +            SSB_SPROM8_TEMPDELTA_PHYCAL, 
    3814 +            SSB_SPROM8_TEMPDELTA_PHYCAL_SHIFT); 
    3815 +       SPEX(temps_period, SSB_SPROM8_TEMPDELTA, SSB_SPROM8_TEMPDELTA_PERIOD, 
    3816 +            SSB_SPROM8_TEMPDELTA_PERIOD_SHIFT); 
    3817 +       SPEX(temps_hysteresis, SSB_SPROM8_TEMPDELTA, 
    3818 +            SSB_SPROM8_TEMPDELTA_HYSTERESIS, 
    3819 +            SSB_SPROM8_TEMPDELTA_HYSTERESIS_SHIFT); 
    3820 +} 
    3821 + 
    3822 +/* 
    3823 + * Indicates the presence of external SPROM. 
    3824 + */ 
    3825 +static bool bcma_sprom_ext_available(struct bcma_bus *bus) 
    3826 +{ 
    3827 +       u32 chip_status; 
    3828 +       u32 srom_control; 
    3829 +       u32 present_mask; 
    3830 + 
    3831 +       if (bus->drv_cc.core->id.rev >= 31) { 
    3832 +               if (!(bus->drv_cc.capabilities & BCMA_CC_CAP_SPROM)) 
    3833 +                       return false; 
    3834 + 
    3835 +               srom_control = bcma_read32(bus->drv_cc.core, 
    3836 +                                          BCMA_CC_SROM_CONTROL); 
    3837 +               return srom_control & BCMA_CC_SROM_CONTROL_PRESENT; 
    3838 +       } 
    3839 + 
    3840 +       /* older chipcommon revisions use chip status register */ 
    3841 +       chip_status = bcma_read32(bus->drv_cc.core, BCMA_CC_CHIPSTAT); 
    3842 +       switch (bus->chipinfo.id) { 
    3843 +       case BCMA_CHIP_ID_BCM4313: 
    3844 +               present_mask = BCMA_CC_CHIPST_4313_SPROM_PRESENT; 
    3845 +               break; 
    3846 + 
    3847 +       case BCMA_CHIP_ID_BCM4331: 
    3848 +               present_mask = BCMA_CC_CHIPST_4331_SPROM_PRESENT; 
    3849 +               break; 
    3850 + 
    38513870+       default: 
    38523871+               return true; 
     
    41774196 #define BCMA_CC_IRQMASK                        0x0024 
    41784197 #define         BCMA_CC_IRQ_GPIO               0x00000001      /* gpio intr */ 
    4179 @@ -79,6 +88,22 @@ 
     4198@@ -79,6 +88,23 @@ 
    41804199 #define         BCMA_CC_IRQ_WDRESET            0x80000000      /* watchdog reset occurred */ 
    41814200 #define BCMA_CC_CHIPCTL                        0x0028          /* Rev >= 11 only */ 
     
    41974216+#define  BCMA_CC_CHIPST_4706_PCIE1_DISABLE     BIT(5) /* PCIE1 enable strap pin */ 
    41984217+#define  BCMA_CC_CHIPST_5357_NAND_BOOT         BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */ 
     4218+#define  BCMA_CC_CHIPST_4360_XTAL_40MZ         0x00000001 
    41994219 #define BCMA_CC_JCMD                   0x0030          /* Rev >= 10 only */ 
    42004220 #define  BCMA_CC_JCMD_START            0x80000000 
    42014221 #define  BCMA_CC_JCMD_BUSY             0x80000000 
    4202 @@ -108,10 +133,58 @@ 
     4222@@ -108,10 +134,58 @@ 
    42034223 #define  BCMA_CC_JCTL_EXT_EN           2               /* Enable external targets */ 
    42044224 #define  BCMA_CC_JCTL_EN               1               /* Enable Jtag master */ 
     
    42594279 #define BCMA_CC_BCAST_DATA             0x0054 
    42604280 #define BCMA_CC_GPIOPULLUP             0x0058          /* Rev >= 20 only */ 
    4261 @@ -181,6 +254,45 @@ 
     4281@@ -181,6 +255,45 @@ 
    42624282 #define BCMA_CC_FLASH_CFG              0x0128 
    42634283 #define  BCMA_CC_FLASH_CFG_DS          0x0010  /* Data size, 0=8bit, 1=16bit */ 
     
    43054325 #define BCMA_CC_HW_WORKAROUND          0x01E4 /* Hardware workaround (rev >= 20) */ 
    43064326 #define BCMA_CC_UART0_DATA             0x0300 
    4307 @@ -240,7 +352,60 @@ 
     4327@@ -240,7 +353,60 @@ 
    43084328 #define BCMA_CC_PLLCTL_ADDR            0x0660 
    43094329 #define BCMA_CC_PLLCTL_DATA            0x0664 
     
    43674387 /* Divider allocation in 4716/47162/5356 */ 
    43684388 #define BCMA_CC_PMU5_MAINPLL_CPU       1 
    4369 @@ -256,6 +421,15 @@ 
     4389@@ -256,6 +422,15 @@ 
    43704390  
    43714391 /* 4706 PMU */ 
     
    43834403 /* ALP clock on pre-PMU chips */ 
    43844404 #define BCMA_CC_PMU_ALP_CLOCK          20000000 
    4385 @@ -284,6 +458,19 @@ 
     4405@@ -284,6 +459,19 @@ 
    43864406 #define BCMA_CC_PPL_PCHI_OFF           5 
    43874407 #define BCMA_CC_PPL_PCHI_MASK          0x0000003f 
     
    44034423 #define BCMA_CHIPCTL_4331_BT_COEXIST           BIT(0)  /* 0 disable */ 
    44044424 #define BCMA_CHIPCTL_4331_SECI                 BIT(1)  /* 0 SECI is disabled (JATG functional) */ 
    4405 @@ -297,9 +484,25 @@ 
     4425@@ -297,9 +485,25 @@ 
    44064426 #define BCMA_CHIPCTL_4331_OVR_PIPEAUXPWRDOWN   BIT(9)  /* override core control on pipe_AuxPowerDown */ 
    44074427 #define BCMA_CHIPCTL_4331_PCIE_AUXCLKEN                BIT(10) /* pcie_auxclkenable */ 
     
    44294449  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 
    44304450  */ 
    4431 @@ -310,11 +513,35 @@ struct bcma_chipcommon_pmu { 
     4451@@ -310,11 +514,35 @@ struct bcma_chipcommon_pmu { 
    44324452  
    44334453 #ifdef CONFIG_BCMA_DRIVER_MIPS 
     
    44654485        void *regs; 
    44664486        unsigned long clockspeed; 
    4467 @@ -330,15 +557,30 @@ struct bcma_drv_cc { 
     4487@@ -330,15 +558,30 @@ struct bcma_drv_cc { 
    44684488        u32 capabilities; 
    44694489        u32 capabilities_ext; 
     
    44964516  
    44974517 /* Register access */ 
    4498 @@ -355,14 +597,14 @@ struct bcma_drv_cc { 
     4518@@ -355,14 +598,16 @@ struct bcma_drv_cc { 
    44994519        bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set)) 
    45004520  
     
    45104530-                                         u32 ticks); 
    45114531+extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); 
     4532+ 
     4533+extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc); 
    45124534  
    45134535 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
    45144536  
    4515 @@ -375,9 +617,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
     4537@@ -375,9 +620,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
    45164538 u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value); 
    45174539 u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
     
    45264548 extern void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, 
    45274549                                  u32 value); 
    4528 @@ -387,5 +632,6 @@ extern void bcma_chipco_chipctl_maskset( 
     4550@@ -387,5 +635,6 @@ extern void bcma_chipco_chipctl_maskset( 
    45294551                                        u32 offset, u32 mask, u32 set); 
    45304552 extern void bcma_chipco_regctl_maskset(struct bcma_drv_cc *cc, 
  • trunk/target/linux/generic/patches-3.6/020-ssb_update.patch

    r35080 r36367  
    385385 { 
    386386        struct ssb_bus *bus = cc->dev->bus; 
     387@@ -645,3 +675,32 @@ u32 ssb_pmu_get_controlclock(struct ssb_ 
     388                return 0; 
     389        } 
     390 } 
     391+ 
     392+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid) 
     393+{ 
     394+       u32 pmu_ctl = 0; 
     395+ 
     396+       switch (cc->dev->bus->chip_id) { 
     397+       case 0x4322: 
     398+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100070); 
     399+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x1014140a); 
     400+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888854); 
     401+               if (spuravoid == 1) 
     402+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05201828); 
     403+               else 
     404+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05001828); 
     405+               pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; 
     406+               break; 
     407+       case 43222: 
     408+               /* TODO: BCM43222 requires updating PLLs too */ 
     409+               return; 
     410+       default: 
     411+               ssb_printk(KERN_ERR PFX 
     412+                          "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
     413+                          cc->dev->bus->chip_id); 
     414+               return; 
     415+       } 
     416+ 
     417+       chipco_set32(cc, SSB_CHIPCO_PMU_CTL, pmu_ctl); 
     418+} 
     419+EXPORT_SYMBOL_GPL(ssb_pmu_spuravoid_pllupdate); 
    387420--- /dev/null 
    388421+++ b/drivers/ssb/driver_chipcommon_sflash.c 
     
    684717--- a/drivers/ssb/driver_mipscore.c 
    685718+++ b/drivers/ssb/driver_mipscore.c 
    686 @@ -178,9 +178,9 @@ static void ssb_mips_serial_init(struct 
     719@@ -178,9 +178,9 @@ static void ssb_mips_serial_init(struct  
    687720 { 
    688721        struct ssb_bus *bus = mcore->dev->bus; 
     
    9751008--- a/include/linux/ssb/ssb_driver_chipcommon.h 
    9761009+++ b/include/linux/ssb/ssb_driver_chipcommon.h 
    977 @@ -504,7 +504,9 @@ 
     1010@@ -219,6 +219,7 @@ 
     1011 #define SSB_CHIPCO_PMU_CTL                     0x0600 /* PMU control */ 
     1012 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV            0xFFFF0000 /* ILP div mask */ 
     1013 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT      16 
     1014+#define  SSB_CHIPCO_PMU_CTL_PLL_UPD            0x00000400 
     1015 #define  SSB_CHIPCO_PMU_CTL_NOILPONW           0x00000200 /* No ILP on wait */ 
     1016 #define  SSB_CHIPCO_PMU_CTL_HTREQEN            0x00000100 /* HT req enable */ 
     1017 #define  SSB_CHIPCO_PMU_CTL_ALPREQEN           0x00000080 /* ALP req enable */ 
     1018@@ -504,7 +505,9 @@ 
    9781019 #define SSB_CHIPCO_FLASHCTL_ST_SE      0x02D8          /* Sector Erase */ 
    9791020 #define SSB_CHIPCO_FLASHCTL_ST_BE      0x00C7          /* Bulk Erase */ 
     
    9861027 /* Status register bits for ST flashes */ 
    9871028 #define SSB_CHIPCO_FLASHSTA_ST_WIP     0x01            /* Write In Progress */ 
    988 @@ -588,7 +590,10 @@ struct ssb_chipcommon { 
     1029@@ -588,7 +591,10 @@ struct ssb_chipcommon { 
    9891030        u32 status; 
    9901031        /* Fast Powerup Delay constant */ 
     
    9971038  
    9981039 static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) 
    999 @@ -628,8 +633,7 @@ enum ssb_clkmode { 
     1040@@ -628,8 +634,7 @@ enum ssb_clkmode { 
    10001041 extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, 
    10011042                                     enum ssb_clkmode mode); 
     
    10071048 void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); 
    10081049  
    1009 @@ -642,6 +646,8 @@ u32 ssb_chipco_gpio_outen(struct ssb_chi 
     1050@@ -642,6 +647,8 @@ u32 ssb_chipco_gpio_outen(struct ssb_chi 
    10101051 u32 ssb_chipco_gpio_control(struct ssb_chipcommon *cc, u32 mask, u32 value); 
    10111052 u32 ssb_chipco_gpio_intmask(struct ssb_chipcommon *cc, u32 mask, u32 value); 
     
    10161057 #ifdef CONFIG_SSB_SERIAL 
    10171058 extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, 
     1059@@ -661,5 +668,6 @@ enum ssb_pmu_ldo_volt_id { 
     1060 void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, 
     1061                             enum ssb_pmu_ldo_volt_id id, u32 voltage); 
     1062 void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); 
     1063+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid); 
     1064  
     1065 #endif /* LINUX_SSB_CHIPCO_H_ */ 
    10181066--- a/include/linux/ssb/ssb_driver_extif.h 
    10191067+++ b/include/linux/ssb/ssb_driver_extif.h 
     
    11281176--- a/include/linux/ssb/ssb_regs.h 
    11291177+++ b/include/linux/ssb/ssb_regs.h 
     1178@@ -289,11 +289,11 @@ 
     1179 #define  SSB_SPROM4_ETHPHY_ET1A_SHIFT  5 
     1180 #define  SSB_SPROM4_ETHPHY_ET0M                (1<<14) /* MDIO for enet0 */ 
     1181 #define  SSB_SPROM4_ETHPHY_ET1M                (1<<15) /* MDIO for enet1 */ 
     1182-#define SSB_SPROM4_ANTAVAIL            0x005D  /* Antenna available bitfields */ 
     1183-#define  SSB_SPROM4_ANTAVAIL_A         0x00FF  /* A-PHY bitfield */ 
     1184-#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   0 
     1185-#define  SSB_SPROM4_ANTAVAIL_BG                0xFF00  /* B-PHY and G-PHY bitfield */ 
     1186-#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  8 
     1187+#define SSB_SPROM4_ANTAVAIL            0x005C  /* Antenna available bitfields */ 
     1188+#define  SSB_SPROM4_ANTAVAIL_BG                0x00FF  /* B-PHY and G-PHY bitfield */ 
     1189+#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  0 
     1190+#define  SSB_SPROM4_ANTAVAIL_A         0xFF00  /* A-PHY bitfield */ 
     1191+#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   8 
     1192 #define SSB_SPROM4_AGAIN01             0x005E  /* Antenna Gain (in dBm Q5.2) */ 
     1193 #define  SSB_SPROM4_AGAIN0             0x00FF  /* Antenna 0 */ 
     1194 #define  SSB_SPROM4_AGAIN0_SHIFT       0 
    11301195@@ -485,7 +485,7 @@ 
    11311196 #define  SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT 4 
     
    11591224+} 
    11601225+#endif /* LINUX_BCM47XX_WDT_H_ */ 
     1226--- a/drivers/net/wireless/b43/phy_n.c 
     1227+++ b/drivers/net/wireless/b43/phy_n.c 
     1228@@ -4583,7 +4583,8 @@ static void b43_nphy_pmu_spur_avoid(stru 
     1229 #endif 
     1230 #ifdef CONFIG_B43_SSB 
     1231        case B43_BUS_SSB: 
     1232-               /* FIXME */ 
     1233+               ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco, 
     1234+                                           avoid); 
     1235                break; 
     1236 #endif 
     1237        } 
     1238--- a/drivers/ssb/pci.c 
     1239+++ b/drivers/ssb/pci.c 
     1240@@ -339,6 +339,21 @@ static s8 r123_extract_antgain(u8 sprom_ 
     1241        return (s8)gain; 
     1242 } 
     1243  
     1244+static void sprom_extract_r23(struct ssb_sprom *out, const u16 *in) 
     1245+{ 
     1246+       SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1247+       SPEX(opo, SSB_SPROM2_OPO, SSB_SPROM2_OPO_VALUE, 0); 
     1248+       SPEX(pa1lob0, SSB_SPROM2_PA1LOB0, 0xFFFF, 0); 
     1249+       SPEX(pa1lob1, SSB_SPROM2_PA1LOB1, 0xFFFF, 0); 
     1250+       SPEX(pa1lob2, SSB_SPROM2_PA1LOB2, 0xFFFF, 0); 
     1251+       SPEX(pa1hib0, SSB_SPROM2_PA1HIB0, 0xFFFF, 0); 
     1252+       SPEX(pa1hib1, SSB_SPROM2_PA1HIB1, 0xFFFF, 0); 
     1253+       SPEX(pa1hib2, SSB_SPROM2_PA1HIB2, 0xFFFF, 0); 
     1254+       SPEX(maxpwr_ah, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_HI, 0); 
     1255+       SPEX(maxpwr_al, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_LO, 
     1256+            SSB_SPROM2_MAXP_A_LO_SHIFT); 
     1257+} 
     1258+ 
     1259 static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in) 
     1260 { 
     1261        int i; 
     1262@@ -398,8 +413,7 @@ static void sprom_extract_r123(struct ss 
     1263             SSB_SPROM1_ITSSI_A_SHIFT); 
     1264        SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0); 
     1265        SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0); 
     1266-       if (out->revision >= 2) 
     1267-               SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1268+ 
     1269        SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8); 
     1270        SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0); 
     1271  
     1272@@ -410,6 +424,8 @@ static void sprom_extract_r123(struct ss 
     1273        out->antenna_gain.a1 = r123_extract_antgain(out->revision, in, 
     1274                                                    SSB_SPROM1_AGAIN_A, 
     1275                                                    SSB_SPROM1_AGAIN_A_SHIFT); 
     1276+       if (out->revision >= 2) 
     1277+               sprom_extract_r23(out, in); 
     1278 } 
     1279  
     1280 /* Revs 4 5 and 8 have partially shared layout */ 
  • trunk/target/linux/generic/patches-3.6/025-bcma_backport.patch

    r35080 r36367  
    127127  
    128128 static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset, 
    129 @@ -22,20 +25,119 @@ static inline u32 bcma_cc_write32_masked 
     129@@ -22,20 +25,120 @@ static inline u32 bcma_cc_write32_masked 
    130130        return value; 
    131131 } 
    132132  
    133133-void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) 
    134 +static u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     134+u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
    135135 { 
    136136-       u32 leddc_on = 10; 
     
    142142+       return 20000000; 
    143143+} 
     144+EXPORT_SYMBOL_GPL(bcma_chipco_get_alp_clock); 
    144145+ 
    145146+static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc) 
     
    251252                bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0); 
    252253                bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0); 
    253 @@ -56,15 +158,33 @@ void bcma_core_chipcommon_init(struct bc 
     254@@ -56,15 +159,33 @@ void bcma_core_chipcommon_init(struct bc 
    254255                        ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | 
    255256                         (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT))); 
     
    288289  
    289290 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value) 
    290 @@ -84,28 +204,97 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_ 
     291@@ -84,28 +205,99 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_ 
    291292  
    292293 u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     
    302303+       return res; 
    303304 } 
     305+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out); 
    304306  
    305307 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     
    315317+       return res; 
    316318 } 
     319+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen); 
    317320  
    318321+/* 
     
    391394  
    392395 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    393 @@ -118,8 +307,7 @@ void bcma_chipco_serial_init(struct bcma 
     396@@ -118,8 +310,7 @@ void bcma_chipco_serial_init(struct bcma 
    394397        struct bcma_serial_port *ports = cc->serial_ports; 
    395398  
     
    505508                bcma_cc_mask32(cc, BCMA_CC_PMU_CTL, 
    506509                              ~BCMA_CC_PMU_CTL_NOILPONW); 
    507 @@ -162,7 +169,7 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
     510@@ -162,24 +169,40 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
    508511        bcma_pmu_workarounds(cc); 
    509512 } 
     
    514517        struct bcma_bus *bus = cc->core->bus; 
    515518  
    516 @@ -190,7 +197,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
     519        switch (bus->chipinfo.id) { 
     520+       case BCMA_CHIP_ID_BCM4313: 
     521+       case BCMA_CHIP_ID_BCM43224: 
     522+       case BCMA_CHIP_ID_BCM43225: 
     523+       case BCMA_CHIP_ID_BCM43227: 
     524+       case BCMA_CHIP_ID_BCM43228: 
     525+       case BCMA_CHIP_ID_BCM4331: 
     526+       case BCMA_CHIP_ID_BCM43421: 
     527+       case BCMA_CHIP_ID_BCM43428: 
     528+       case BCMA_CHIP_ID_BCM43431: 
     529        case BCMA_CHIP_ID_BCM4716: 
     530-       case BCMA_CHIP_ID_BCM4748: 
     531        case BCMA_CHIP_ID_BCM47162: 
     532-       case BCMA_CHIP_ID_BCM4313: 
     533-       case BCMA_CHIP_ID_BCM5357: 
     534+       case BCMA_CHIP_ID_BCM4748: 
     535        case BCMA_CHIP_ID_BCM4749: 
     536+       case BCMA_CHIP_ID_BCM5357: 
     537        case BCMA_CHIP_ID_BCM53572: 
     538+       case BCMA_CHIP_ID_BCM6362: 
     539                /* always 20Mhz */ 
     540                return 20000 * 1000; 
     541-       case BCMA_CHIP_ID_BCM5356: 
     542        case BCMA_CHIP_ID_BCM4706: 
     543+       case BCMA_CHIP_ID_BCM5356: 
     544                /* always 25Mhz */ 
     545                return 25000 * 1000; 
     546+       case BCMA_CHIP_ID_BCM43460: 
     547+       case BCMA_CHIP_ID_BCM4352: 
     548+       case BCMA_CHIP_ID_BCM4360: 
     549+               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
     550+                       return 40000 * 1000; 
     551+               else 
     552+                       return 20000 * 1000; 
     553        default: 
     554                bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n", 
     555                          bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
     556@@ -190,7 +213,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
    517557 /* Find the output of the "m" pll divider given pll controls that start with 
    518558  * pllreg "pll0" i.e. 12 for main 6 for phy, 0 for misc. 
     
    523563        u32 tmp, div, ndiv, p1, p2, fc; 
    524564        struct bcma_bus *bus = cc->core->bus; 
    525 @@ -219,14 +226,14 @@ static u32 bcma_pmu_clock(struct bcma_dr 
     565@@ -219,14 +242,14 @@ static u32 bcma_pmu_clock(struct bcma_dr 
    526566        ndiv = (tmp & BCMA_CC_PPL_NDIV_MASK) >> BCMA_CC_PPL_NDIV_SHIFT; 
    527567  
     
    540580        u32 tmp, ndiv, p1div, p2div; 
    541581        u32 clock; 
    542 @@ -257,7 +264,7 @@ static u32 bcma_pmu_clock_bcm4706(struct 
     582@@ -257,7 +280,7 @@ static u32 bcma_pmu_clock_bcm4706(struct 
    543583 } 
    544584  
     
    549589        struct bcma_bus *bus = cc->core->bus; 
    550590  
    551 @@ -265,40 +272,42 @@ u32 bcma_pmu_get_clockcontrol(struct bcm 
     591@@ -265,40 +288,42 @@ u32 bcma_pmu_get_clockcontrol(struct bcm 
    552592        case BCMA_CHIP_ID_BCM4716: 
    553593        case BCMA_CHIP_ID_BCM4748: 
     
    603643                                                BCMA_CC_PMU5_MAINPLL_CPU); 
    604644                case BCMA_CHIP_ID_BCM5356: 
    605 @@ -313,10 +322,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr 
     645@@ -313,10 +338,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr 
    606646                        break; 
    607647                } 
     
    617657  
    618658 static void bcma_pmu_spuravoid_pll_write(struct bcma_drv_cc *cc, u32 offset, 
     659@@ -362,7 +388,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     660                tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT; 
     661                bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
     662  
     663-               tmp = 1 << 10; 
     664+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     665                break; 
     666  
     667        case BCMA_CHIP_ID_BCM4331: 
     668@@ -383,7 +409,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     669                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2, 
     670                                                     0x03000a08); 
     671                } 
     672-               tmp = 1 << 10; 
     673+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     674                break; 
     675  
     676        case BCMA_CHIP_ID_BCM43224: 
     677@@ -416,7 +442,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     678                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     679                                                     0x88888815); 
     680                } 
     681-               tmp = 1 << 10; 
     682+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     683                break; 
     684  
     685        case BCMA_CHIP_ID_BCM4716: 
     686@@ -450,7 +476,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     687                                                     0x88888815); 
     688                } 
     689  
     690-               tmp = 3 << 9; 
     691+               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
     692                break; 
     693  
     694        case BCMA_CHIP_ID_BCM43227: 
     695@@ -486,7 +512,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     696                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     697                                                     0x88888815); 
     698                } 
     699-               tmp = 1 << 10; 
     700+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     701                break; 
     702        default: 
     703                bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
    619704--- a/drivers/bcma/driver_chipcommon_sflash.c 
    620705+++ b/drivers/bcma/driver_chipcommon_sflash.c 
     
    9911076                printk(" %s%s", irq_name[i], i == irq ? "*" : " "); 
    9921077        printk("\n"); 
    993 @@ -171,7 +194,7 @@ u32 bcma_cpu_clock(struct bcma_drv_mips 
     1078@@ -171,7 +194,7 @@ u32 bcma_cpu_clock(struct bcma_drv_mips  
    9941079        struct bcma_bus *bus = mcore->core->bus; 
    9951080  
     
    11771262        pcicore_write32(pc, BCMA_CORE_PCI_MDIO_CONTROL, 0); 
    11781263        return ret; 
    1179 @@ -132,7 +132,7 @@ static void bcma_pcie_mdio_write(struct 
     1264@@ -132,7 +132,7 @@ static void bcma_pcie_mdio_write(struct  
    11801265                v = pcicore_read32(pc, BCMA_CORE_PCI_MDIO_CONTROL); 
    11811266                if (v & BCMA_CORE_PCI_MDIOCTL_ACCESS_DONE) 
     
    16141699 #define BCMA_CC_ID                     0x0000 
    16151700 #define  BCMA_CC_ID_ID                 0x0000FFFF 
    1616 @@ -100,6 +103,7 @@ 
     1701@@ -100,6 +103,8 @@ 
    16171702 #define  BCMA_CC_CHIPST_4706_SFLASH_TYPE       BIT(2) /* 0: 8b-p/ST-s flash, 1: 16b-p/Atmal-s flash */ 
    16181703 #define  BCMA_CC_CHIPST_4706_MIPS_BENDIAN      BIT(3) /* 0: little, 1: big endian */ 
    16191704 #define  BCMA_CC_CHIPST_4706_PCIE1_DISABLE     BIT(5) /* PCIE1 enable strap pin */ 
    16201705+#define  BCMA_CC_CHIPST_5357_NAND_BOOT         BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */ 
     1706+#define  BCMA_CC_CHIPST_4360_XTAL_40MZ         0x00000001 
    16211707 #define BCMA_CC_JCMD                   0x0030          /* Rev >= 10 only */ 
    16221708 #define  BCMA_CC_JCMD_START            0x80000000 
    16231709 #define  BCMA_CC_JCMD_BUSY             0x80000000 
    1624 @@ -266,6 +270,29 @@ 
     1710@@ -266,6 +271,29 @@ 
    16251711 #define  BCMA_CC_SROM_CONTROL_SIZE_16K 0x00000004 
    16261712 #define  BCMA_CC_SROM_CONTROL_SIZE_SHIFT       1 
     
    16521738 #define BCMA_CC_HW_WORKAROUND          0x01E4 /* Hardware workaround (rev >= 20) */ 
    16531739 #define BCMA_CC_UART0_DATA             0x0300 
    1654 @@ -325,6 +352,60 @@ 
     1740@@ -325,6 +353,60 @@ 
    16551741 #define BCMA_CC_PLLCTL_ADDR            0x0660 
    16561742 #define BCMA_CC_PLLCTL_DATA            0x0664 
     
    17131799 /* Divider allocation in 4716/47162/5356 */ 
    17141800 #define BCMA_CC_PMU5_MAINPLL_CPU       1 
    1715 @@ -415,6 +496,13 @@ 
     1801@@ -415,6 +497,13 @@ 
    17161802 /* 4313 Chip specific ChipControl register bits */ 
    17171803 #define BCMA_CCTRL_4313_12MA_LED_DRIVE         0x00000007      /* 12 mA drive strengh for later 4313 */ 
     
    17271813  * Check availability with ((struct bcma_chipcommon)->capabilities & BCMA_CC_CAP_PMU) 
    17281814  */ 
    1729 @@ -425,11 +513,35 @@ struct bcma_chipcommon_pmu { 
     1815@@ -425,11 +514,35 @@ struct bcma_chipcommon_pmu { 
    17301816  
    17311817 #ifdef CONFIG_BCMA_DRIVER_MIPS 
     
    17631849        void *regs; 
    17641850        unsigned long clockspeed; 
    1765 @@ -445,15 +557,30 @@ struct bcma_drv_cc { 
     1851@@ -445,15 +558,30 @@ struct bcma_drv_cc { 
    17661852        u32 capabilities; 
    17671853        u32 capabilities_ext; 
     
    17941880  
    17951881 /* Register access */ 
    1796 @@ -470,14 +597,14 @@ struct bcma_drv_cc { 
     1882@@ -470,14 +598,16 @@ struct bcma_drv_cc { 
    17971883        bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set)) 
    17981884  
     
    18081894-                                         u32 ticks); 
    18091895+extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); 
     1896+ 
     1897+extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc); 
    18101898  
    18111899 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
    18121900  
    1813 @@ -490,9 +617,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
     1901@@ -490,9 +620,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
    18141902 u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value); 
    18151903 u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
  • trunk/target/linux/generic/patches-3.7/020-ssb_update.patch

    r35080 r36367  
    385385 { 
    386386        struct ssb_bus *bus = cc->dev->bus; 
     387@@ -645,3 +675,32 @@ u32 ssb_pmu_get_controlclock(struct ssb_ 
     388                return 0; 
     389        } 
     390 } 
     391+ 
     392+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid) 
     393+{ 
     394+       u32 pmu_ctl = 0; 
     395+ 
     396+       switch (cc->dev->bus->chip_id) { 
     397+       case 0x4322: 
     398+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100070); 
     399+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x1014140a); 
     400+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888854); 
     401+               if (spuravoid == 1) 
     402+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05201828); 
     403+               else 
     404+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05001828); 
     405+               pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; 
     406+               break; 
     407+       case 43222: 
     408+               /* TODO: BCM43222 requires updating PLLs too */ 
     409+               return; 
     410+       default: 
     411+               ssb_printk(KERN_ERR PFX 
     412+                          "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
     413+                          cc->dev->bus->chip_id); 
     414+               return; 
     415+       } 
     416+ 
     417+       chipco_set32(cc, SSB_CHIPCO_PMU_CTL, pmu_ctl); 
     418+} 
     419+EXPORT_SYMBOL_GPL(ssb_pmu_spuravoid_pllupdate); 
    387420--- /dev/null 
    388421+++ b/drivers/ssb/driver_chipcommon_sflash.c 
     
    684717--- a/drivers/ssb/driver_mipscore.c 
    685718+++ b/drivers/ssb/driver_mipscore.c 
    686 @@ -178,9 +178,9 @@ static void ssb_mips_serial_init(struct 
     719@@ -178,9 +178,9 @@ static void ssb_mips_serial_init(struct  
    687720 { 
    688721        struct ssb_bus *bus = mcore->dev->bus; 
     
    9741007--- a/include/linux/ssb/ssb_driver_chipcommon.h 
    9751008+++ b/include/linux/ssb/ssb_driver_chipcommon.h 
    976 @@ -590,7 +590,10 @@ struct ssb_chipcommon { 
     1009@@ -219,6 +219,7 @@ 
     1010 #define SSB_CHIPCO_PMU_CTL                     0x0600 /* PMU control */ 
     1011 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV            0xFFFF0000 /* ILP div mask */ 
     1012 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT      16 
     1013+#define  SSB_CHIPCO_PMU_CTL_PLL_UPD            0x00000400 
     1014 #define  SSB_CHIPCO_PMU_CTL_NOILPONW           0x00000200 /* No ILP on wait */ 
     1015 #define  SSB_CHIPCO_PMU_CTL_HTREQEN            0x00000100 /* HT req enable */ 
     1016 #define  SSB_CHIPCO_PMU_CTL_ALPREQEN           0x00000080 /* ALP req enable */ 
     1017@@ -590,7 +591,10 @@ struct ssb_chipcommon { 
    9771018        u32 status; 
    9781019        /* Fast Powerup Delay constant */ 
     
    9851026  
    9861027 static inline bool ssb_chipco_available(struct ssb_chipcommon *cc) 
    987 @@ -630,8 +633,7 @@ enum ssb_clkmode { 
     1028@@ -630,8 +634,7 @@ enum ssb_clkmode { 
    9881029 extern void ssb_chipco_set_clockmode(struct ssb_chipcommon *cc, 
    9891030                                     enum ssb_clkmode mode); 
     
    9951036 void ssb_chipco_irq_mask(struct ssb_chipcommon *cc, u32 mask, u32 value); 
    9961037  
    997 @@ -644,6 +646,8 @@ u32 ssb_chipco_gpio_outen(struct ssb_chi 
     1038@@ -644,6 +647,8 @@ u32 ssb_chipco_gpio_outen(struct ssb_chi 
    9981039 u32 ssb_chipco_gpio_control(struct ssb_chipcommon *cc, u32 mask, u32 value); 
    9991040 u32 ssb_chipco_gpio_intmask(struct ssb_chipcommon *cc, u32 mask, u32 value); 
     
    10041045 #ifdef CONFIG_SSB_SERIAL 
    10051046 extern int ssb_chipco_serial_init(struct ssb_chipcommon *cc, 
     1047@@ -663,5 +668,6 @@ enum ssb_pmu_ldo_volt_id { 
     1048 void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, 
     1049                             enum ssb_pmu_ldo_volt_id id, u32 voltage); 
     1050 void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); 
     1051+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid); 
     1052  
     1053 #endif /* LINUX_SSB_CHIPCO_H_ */ 
    10061054--- a/include/linux/ssb/ssb_driver_extif.h 
    10071055+++ b/include/linux/ssb/ssb_driver_extif.h 
     
    11161164--- a/include/linux/ssb/ssb_regs.h 
    11171165+++ b/include/linux/ssb/ssb_regs.h 
     1166@@ -289,11 +289,11 @@ 
     1167 #define  SSB_SPROM4_ETHPHY_ET1A_SHIFT  5 
     1168 #define  SSB_SPROM4_ETHPHY_ET0M                (1<<14) /* MDIO for enet0 */ 
     1169 #define  SSB_SPROM4_ETHPHY_ET1M                (1<<15) /* MDIO for enet1 */ 
     1170-#define SSB_SPROM4_ANTAVAIL            0x005D  /* Antenna available bitfields */ 
     1171-#define  SSB_SPROM4_ANTAVAIL_A         0x00FF  /* A-PHY bitfield */ 
     1172-#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   0 
     1173-#define  SSB_SPROM4_ANTAVAIL_BG                0xFF00  /* B-PHY and G-PHY bitfield */ 
     1174-#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  8 
     1175+#define SSB_SPROM4_ANTAVAIL            0x005C  /* Antenna available bitfields */ 
     1176+#define  SSB_SPROM4_ANTAVAIL_BG                0x00FF  /* B-PHY and G-PHY bitfield */ 
     1177+#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  0 
     1178+#define  SSB_SPROM4_ANTAVAIL_A         0xFF00  /* A-PHY bitfield */ 
     1179+#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   8 
     1180 #define SSB_SPROM4_AGAIN01             0x005E  /* Antenna Gain (in dBm Q5.2) */ 
     1181 #define  SSB_SPROM4_AGAIN0             0x00FF  /* Antenna 0 */ 
     1182 #define  SSB_SPROM4_AGAIN0_SHIFT       0 
    11181183@@ -485,7 +485,7 @@ 
    11191184 #define  SSB_SPROM8_HWIQ_IQSWP_IQCAL_SWP_SHIFT 4 
     
    11471212+} 
    11481213+#endif /* LINUX_BCM47XX_WDT_H_ */ 
     1214--- a/drivers/net/wireless/b43/phy_n.c 
     1215+++ b/drivers/net/wireless/b43/phy_n.c 
     1216@@ -5165,7 +5165,8 @@ static void b43_nphy_pmu_spur_avoid(stru 
     1217 #endif 
     1218 #ifdef CONFIG_B43_SSB 
     1219        case B43_BUS_SSB: 
     1220-               /* FIXME */ 
     1221+               ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco, 
     1222+                                           avoid); 
     1223                break; 
     1224 #endif 
     1225        } 
     1226--- a/drivers/ssb/pci.c 
     1227+++ b/drivers/ssb/pci.c 
     1228@@ -339,6 +339,21 @@ static s8 r123_extract_antgain(u8 sprom_ 
     1229        return (s8)gain; 
     1230 } 
     1231  
     1232+static void sprom_extract_r23(struct ssb_sprom *out, const u16 *in) 
     1233+{ 
     1234+       SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1235+       SPEX(opo, SSB_SPROM2_OPO, SSB_SPROM2_OPO_VALUE, 0); 
     1236+       SPEX(pa1lob0, SSB_SPROM2_PA1LOB0, 0xFFFF, 0); 
     1237+       SPEX(pa1lob1, SSB_SPROM2_PA1LOB1, 0xFFFF, 0); 
     1238+       SPEX(pa1lob2, SSB_SPROM2_PA1LOB2, 0xFFFF, 0); 
     1239+       SPEX(pa1hib0, SSB_SPROM2_PA1HIB0, 0xFFFF, 0); 
     1240+       SPEX(pa1hib1, SSB_SPROM2_PA1HIB1, 0xFFFF, 0); 
     1241+       SPEX(pa1hib2, SSB_SPROM2_PA1HIB2, 0xFFFF, 0); 
     1242+       SPEX(maxpwr_ah, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_HI, 0); 
     1243+       SPEX(maxpwr_al, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_LO, 
     1244+            SSB_SPROM2_MAXP_A_LO_SHIFT); 
     1245+} 
     1246+ 
     1247 static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in) 
     1248 { 
     1249        int i; 
     1250@@ -398,8 +413,7 @@ static void sprom_extract_r123(struct ss 
     1251             SSB_SPROM1_ITSSI_A_SHIFT); 
     1252        SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0); 
     1253        SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0); 
     1254-       if (out->revision >= 2) 
     1255-               SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     1256+ 
     1257        SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8); 
     1258        SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0); 
     1259  
     1260@@ -410,6 +424,8 @@ static void sprom_extract_r123(struct ss 
     1261        out->antenna_gain.a1 = r123_extract_antgain(out->revision, in, 
     1262                                                    SSB_SPROM1_AGAIN_A, 
     1263                                                    SSB_SPROM1_AGAIN_A_SHIFT); 
     1264+       if (out->revision >= 2) 
     1265+               sprom_extract_r23(out, in); 
     1266 } 
     1267  
     1268 /* Revs 4 5 and 8 have partially shared layout */ 
  • trunk/target/linux/generic/patches-3.7/025-bcma_backport.patch

    r35216 r36367  
    8888  
    8989 static inline u32 bcma_cc_write32_masked(struct bcma_drv_cc *cc, u16 offset, 
    90 @@ -22,20 +25,119 @@ static inline u32 bcma_cc_write32_masked 
     90@@ -22,20 +25,120 @@ static inline u32 bcma_cc_write32_masked 
    9191        return value; 
    9292 } 
    9393  
    9494-void bcma_core_chipcommon_init(struct bcma_drv_cc *cc) 
    95 +static u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     95+u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
    9696 { 
    9797-       u32 leddc_on = 10; 
     
    103103+       return 20000000; 
    104104+} 
     105+EXPORT_SYMBOL_GPL(bcma_chipco_get_alp_clock); 
    105106+ 
    106107+static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc) 
     
    212213                bcma_cc_write32(cc, BCMA_CC_GPIOPULLUP, 0); 
    213214                bcma_cc_write32(cc, BCMA_CC_GPIOPULLDOWN, 0); 
    214 @@ -56,15 +158,33 @@ void bcma_core_chipcommon_init(struct bc 
     215@@ -56,15 +159,33 @@ void bcma_core_chipcommon_init(struct bc 
    215216                        ((leddc_on << BCMA_CC_GPIOTIMER_ONTIME_SHIFT) | 
    216217                         (leddc_off << BCMA_CC_GPIOTIMER_OFFTIME_SHIFT))); 
     
    249250  
    250251 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value) 
    251 @@ -84,28 +204,97 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_ 
     252@@ -84,28 +205,99 @@ u32 bcma_chipco_gpio_in(struct bcma_drv_ 
    252253  
    253254 u32 bcma_chipco_gpio_out(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     
    263264+       return res; 
    264265 } 
     266+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out); 
    265267  
    266268 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     
    276278+       return res; 
    277279 } 
     280+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen); 
    278281  
    279282+/* 
     
    352355  
    353356 #ifdef CONFIG_BCMA_DRIVER_MIPS 
    354 @@ -118,8 +307,7 @@ void bcma_chipco_serial_init(struct bcma 
     357@@ -118,8 +310,7 @@ void bcma_chipco_serial_init(struct bcma 
    355358        struct bcma_serial_port *ports = cc->serial_ports; 
    356359  
     
    364367--- a/drivers/bcma/driver_chipcommon_nflash.c 
    365368+++ b/drivers/bcma/driver_chipcommon_nflash.c 
    366 @@ -32,6 +32,9 @@ int bcma_nflash_init(struct bcma_drv_cc 
     369@@ -32,6 +32,9 @@ int bcma_nflash_init(struct bcma_drv_cc  
    367370        } 
    368371  
     
    391394 void bcma_chipco_pll_write(struct bcma_drv_cc *cc, u32 offset, u32 value) 
    392395 { 
    393 @@ -144,7 +145,7 @@ static void bcma_pmu_workarounds(struct 
     396@@ -144,7 +145,7 @@ static void bcma_pmu_workarounds(struct  
    394397        } 
    395398 } 
     
    411414                bcma_cc_mask32(cc, BCMA_CC_PMU_CTL, 
    412415                              ~BCMA_CC_PMU_CTL_NOILPONW); 
    413 @@ -165,7 +169,7 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
     416@@ -165,24 +169,40 @@ void bcma_pmu_init(struct bcma_drv_cc *c 
    414417        bcma_pmu_workarounds(cc); 
    415418 } 
     
    420423        struct bcma_bus *bus = cc->core->bus; 
    421424  
    422 @@ -193,7 +197,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
     425        switch (bus->chipinfo.id) { 
     426+       case BCMA_CHIP_ID_BCM4313: 
     427+       case BCMA_CHIP_ID_BCM43224: 
     428+       case BCMA_CHIP_ID_BCM43225: 
     429+       case BCMA_CHIP_ID_BCM43227: 
     430+       case BCMA_CHIP_ID_BCM43228: 
     431+       case BCMA_CHIP_ID_BCM4331: 
     432+       case BCMA_CHIP_ID_BCM43421: 
     433+       case BCMA_CHIP_ID_BCM43428: 
     434+       case BCMA_CHIP_ID_BCM43431: 
     435        case BCMA_CHIP_ID_BCM4716: 
     436-       case BCMA_CHIP_ID_BCM4748: 
     437        case BCMA_CHIP_ID_BCM47162: 
     438-       case BCMA_CHIP_ID_BCM4313: 
     439-       case BCMA_CHIP_ID_BCM5357: 
     440+       case BCMA_CHIP_ID_BCM4748: 
     441        case BCMA_CHIP_ID_BCM4749: 
     442+       case BCMA_CHIP_ID_BCM5357: 
     443        case BCMA_CHIP_ID_BCM53572: 
     444+       case BCMA_CHIP_ID_BCM6362: 
     445                /* always 20Mhz */ 
     446                return 20000 * 1000; 
     447-       case BCMA_CHIP_ID_BCM5356: 
     448        case BCMA_CHIP_ID_BCM4706: 
     449+       case BCMA_CHIP_ID_BCM5356: 
     450                /* always 25Mhz */ 
     451                return 25000 * 1000; 
     452+       case BCMA_CHIP_ID_BCM43460: 
     453+       case BCMA_CHIP_ID_BCM4352: 
     454+       case BCMA_CHIP_ID_BCM4360: 
     455+               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
     456+                       return 40000 * 1000; 
     457+               else 
     458+                       return 20000 * 1000; 
     459        default: 
     460                bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n", 
     461                          bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
     462@@ -193,7 +213,7 @@ u32 bcma_pmu_alp_clock(struct bcma_drv_c 
    423463 /* Find the output of the "m" pll divider given pll controls that start with 
    424464  * pllreg "pll0" i.e. 12 for main 6 for phy, 0 for misc. 
     
    429469        u32 tmp, div, ndiv, p1, p2, fc; 
    430470        struct bcma_bus *bus = cc->core->bus; 
    431 @@ -222,14 +226,14 @@ static u32 bcma_pmu_clock(struct bcma_dr 
     471@@ -222,14 +242,14 @@ static u32 bcma_pmu_clock(struct bcma_dr 
    432472        ndiv = (tmp & BCMA_CC_PPL_NDIV_MASK) >> BCMA_CC_PPL_NDIV_SHIFT; 
    433473  
     
    446486        u32 tmp, ndiv, p1div, p2div; 
    447487        u32 clock; 
    448 @@ -260,7 +264,7 @@ static u32 bcma_pmu_clock_bcm4706(struct 
     488@@ -260,7 +280,7 @@ static u32 bcma_pmu_clock_bcm4706(struct 
    449489 } 
    450490  
     
    455495        struct bcma_bus *bus = cc->core->bus; 
    456496  
    457 @@ -268,40 +272,42 @@ static u32 bcma_pmu_get_clockcontrol(str 
     497@@ -268,40 +288,42 @@ static u32 bcma_pmu_get_clockcontrol(str 
    458498        case BCMA_CHIP_ID_BCM4716: 
    459499        case BCMA_CHIP_ID_BCM4748: 
     
    509549                                                BCMA_CC_PMU5_MAINPLL_CPU); 
    510550                case BCMA_CHIP_ID_BCM5356: 
    511 @@ -316,10 +322,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr 
     551@@ -316,10 +338,11 @@ u32 bcma_pmu_get_clockcpu(struct bcma_dr 
    512552                        break; 
    513553                } 
     
    523563  
    524564 static void bcma_pmu_spuravoid_pll_write(struct bcma_drv_cc *cc, u32 offset, 
     565@@ -365,7 +388,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     566                tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT; 
     567                bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
     568  
     569-               tmp = 1 << 10; 
     570+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     571                break; 
     572  
     573        case BCMA_CHIP_ID_BCM4331: 
     574@@ -386,7 +409,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     575                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2, 
     576                                                     0x03000a08); 
     577                } 
     578-               tmp = 1 << 10; 
     579+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     580                break; 
     581  
     582        case BCMA_CHIP_ID_BCM43224: 
     583@@ -419,7 +442,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     584                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     585                                                     0x88888815); 
     586                } 
     587-               tmp = 1 << 10; 
     588+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     589                break; 
     590  
     591        case BCMA_CHIP_ID_BCM4716: 
     592@@ -453,7 +476,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     593                                                     0x88888815); 
     594                } 
     595  
     596-               tmp = 3 << 9; 
     597+               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
     598                break; 
     599  
     600        case BCMA_CHIP_ID_BCM43227: 
     601@@ -489,7 +512,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     602                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     603                                                     0x88888815); 
     604                } 
     605-               tmp = 1 << 10; 
     606+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     607                break; 
     608        default: 
     609                bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
    525610--- a/drivers/bcma/driver_chipcommon_sflash.c 
    526611+++ b/drivers/bcma/driver_chipcommon_sflash.c 
     
    578663 }; 
    579664  
    580 @@ -84,6 +111,8 @@ int bcma_sflash_init(struct bcma_drv_cc 
     665@@ -84,6 +111,8 @@ int bcma_sflash_init(struct bcma_drv_cc  
    581666                                        break; 
    582667                        } 
     
    587672                        for (e = bcma_sflash_st_tbl; e->name; e++) { 
    588673                                if (e->id == id) 
    589 @@ -116,7 +145,7 @@ int bcma_sflash_init(struct bcma_drv_cc 
     674@@ -116,7 +145,7 @@ int bcma_sflash_init(struct bcma_drv_cc  
    590675                return -ENOTSUPP; 
    591676        } 
     
    801886                printk(" %s%s", irq_name[i], i == irq ? "*" : " "); 
    802887        printk("\n"); 
    803 @@ -171,7 +194,7 @@ u32 bcma_cpu_clock(struct bcma_drv_mips 
     888@@ -171,7 +194,7 @@ u32 bcma_cpu_clock(struct bcma_drv_mips  
    804889        struct bcma_bus *bus = mcore->core->bus; 
    805890  
     
    12531338 #define BCMA_CC_ID                     0x0000 
    12541339 #define  BCMA_CC_ID_ID                 0x0000FFFF 
    1255 @@ -510,6 +513,7 @@ struct bcma_chipcommon_pmu { 
     1340@@ -101,6 +104,7 @@ 
     1341 #define  BCMA_CC_CHIPST_4706_MIPS_BENDIAN      BIT(3) /* 0: little, 1: big endian */ 
     1342 #define  BCMA_CC_CHIPST_4706_PCIE1_DISABLE     BIT(5) /* PCIE1 enable strap pin */ 
     1343 #define  BCMA_CC_CHIPST_5357_NAND_BOOT         BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */ 
     1344+#define  BCMA_CC_CHIPST_4360_XTAL_40MZ         0x00000001 
     1345 #define BCMA_CC_JCMD                   0x0030          /* Rev >= 10 only */ 
     1346 #define  BCMA_CC_JCMD_START            0x80000000 
     1347 #define  BCMA_CC_JCMD_BUSY             0x80000000 
     1348@@ -510,6 +514,7 @@ struct bcma_chipcommon_pmu { 
    12561349  
    12571350 #ifdef CONFIG_BCMA_DRIVER_MIPS 
     
    12611354        u32 window; 
    12621355        u32 window_size; 
    1263 @@ -532,6 +536,7 @@ struct mtd_info; 
     1356@@ -532,6 +537,7 @@ struct mtd_info; 
    12641357  
    12651358 struct bcma_nflash { 
     
    12691362        struct mtd_info *mtd; 
    12701363 }; 
    1271 @@ -552,6 +557,7 @@ struct bcma_drv_cc { 
     1364@@ -552,6 +558,7 @@ struct bcma_drv_cc { 
    12721365        u32 capabilities; 
    12731366        u32 capabilities_ext; 
     
    12771370        u16 fast_pwrup_delay; 
    12781371        struct bcma_chipcommon_pmu pmu; 
    1279 @@ -567,6 +573,14 @@ struct bcma_drv_cc { 
     1372@@ -567,6 +574,14 @@ struct bcma_drv_cc { 
    12801373        int nr_serial_ports; 
    12811374        struct bcma_serial_port serial_ports[4]; 
     
    12921385  
    12931386 /* Register access */ 
    1294 @@ -583,14 +597,14 @@ struct bcma_drv_cc { 
     1387@@ -583,14 +598,16 @@ struct bcma_drv_cc { 
    12951388        bcma_cc_write32(cc, offset, (bcma_cc_read32(cc, offset) & (mask)) | (set)) 
    12961389  
     
    13061399-                                         u32 ticks); 
    13071400+extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); 
     1401+ 
     1402+extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc); 
    13081403  
    13091404 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
    13101405  
    1311 @@ -603,9 +617,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
     1406@@ -603,9 +620,12 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
    13121407 u32 bcma_chipco_gpio_control(struct bcma_drv_cc *cc, u32 mask, u32 value); 
    13131408 u32 bcma_chipco_gpio_intmask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
  • trunk/target/linux/generic/patches-3.8/020-ssb_update.patch

    r35632 r36367  
    168168--- a/drivers/ssb/driver_gpio.c 
    169169+++ b/drivers/ssb/driver_gpio.c 
    170 @@ -74,6 +74,16 @@ static void ssb_gpio_chipco_free(struct 
     170@@ -74,6 +74,16 @@ static void ssb_gpio_chipco_free(struct  
    171171        ssb_chipco_gpio_pullup(&bus->chipco, 1 << gpio, 0); 
    172172 } 
     
    254254 static inline u32 mips_read32(struct ssb_mipscore *mcore, 
    255255                              u16 offset) 
    256 @@ -189,34 +209,43 @@ static void ssb_mips_serial_init(struct 
     256@@ -189,34 +209,43 @@ static void ssb_mips_serial_init(struct  
    257257 static void ssb_mips_flash_detect(struct ssb_mipscore *mcore) 
    258258 { 
     
    364364  
    365365 #endif /* LINUX_SSB_MIPSCORE_H_ */ 
     366--- a/drivers/net/wireless/b43/phy_n.c 
     367+++ b/drivers/net/wireless/b43/phy_n.c 
     368@@ -5165,7 +5165,8 @@ static void b43_nphy_pmu_spur_avoid(stru 
     369 #endif 
     370 #ifdef CONFIG_B43_SSB 
     371        case B43_BUS_SSB: 
     372-               /* FIXME */ 
     373+               ssb_pmu_spuravoid_pllupdate(&dev->dev->sdev->bus->chipco, 
     374+                                           avoid); 
     375                break; 
     376 #endif 
     377        } 
     378--- a/drivers/ssb/driver_chipcommon_pmu.c 
     379+++ b/drivers/ssb/driver_chipcommon_pmu.c 
     380@@ -675,3 +675,32 @@ u32 ssb_pmu_get_controlclock(struct ssb_ 
     381                return 0; 
     382        } 
     383 } 
     384+ 
     385+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid) 
     386+{ 
     387+       u32 pmu_ctl = 0; 
     388+ 
     389+       switch (cc->dev->bus->chip_id) { 
     390+       case 0x4322: 
     391+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL0, 0x11100070); 
     392+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL1, 0x1014140a); 
     393+               ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL5, 0x88888854); 
     394+               if (spuravoid == 1) 
     395+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05201828); 
     396+               else 
     397+                       ssb_chipco_pll_write(cc, SSB_PMU1_PLLCTL2, 0x05001828); 
     398+               pmu_ctl = SSB_CHIPCO_PMU_CTL_PLL_UPD; 
     399+               break; 
     400+       case 43222: 
     401+               /* TODO: BCM43222 requires updating PLLs too */ 
     402+               return; 
     403+       default: 
     404+               ssb_printk(KERN_ERR PFX 
     405+                          "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
     406+                          cc->dev->bus->chip_id); 
     407+               return; 
     408+       } 
     409+ 
     410+       chipco_set32(cc, SSB_CHIPCO_PMU_CTL, pmu_ctl); 
     411+} 
     412+EXPORT_SYMBOL_GPL(ssb_pmu_spuravoid_pllupdate); 
     413--- a/drivers/ssb/pci.c 
     414+++ b/drivers/ssb/pci.c 
     415@@ -339,6 +339,21 @@ static s8 r123_extract_antgain(u8 sprom_ 
     416        return (s8)gain; 
     417 } 
     418  
     419+static void sprom_extract_r23(struct ssb_sprom *out, const u16 *in) 
     420+{ 
     421+       SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     422+       SPEX(opo, SSB_SPROM2_OPO, SSB_SPROM2_OPO_VALUE, 0); 
     423+       SPEX(pa1lob0, SSB_SPROM2_PA1LOB0, 0xFFFF, 0); 
     424+       SPEX(pa1lob1, SSB_SPROM2_PA1LOB1, 0xFFFF, 0); 
     425+       SPEX(pa1lob2, SSB_SPROM2_PA1LOB2, 0xFFFF, 0); 
     426+       SPEX(pa1hib0, SSB_SPROM2_PA1HIB0, 0xFFFF, 0); 
     427+       SPEX(pa1hib1, SSB_SPROM2_PA1HIB1, 0xFFFF, 0); 
     428+       SPEX(pa1hib2, SSB_SPROM2_PA1HIB2, 0xFFFF, 0); 
     429+       SPEX(maxpwr_ah, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_HI, 0); 
     430+       SPEX(maxpwr_al, SSB_SPROM2_MAXP_A, SSB_SPROM2_MAXP_A_LO, 
     431+            SSB_SPROM2_MAXP_A_LO_SHIFT); 
     432+} 
     433+ 
     434 static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in) 
     435 { 
     436        int i; 
     437@@ -398,8 +413,7 @@ static void sprom_extract_r123(struct ss 
     438             SSB_SPROM1_ITSSI_A_SHIFT); 
     439        SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0); 
     440        SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0); 
     441-       if (out->revision >= 2) 
     442-               SPEX(boardflags_hi, SSB_SPROM2_BFLHI, 0xFFFF, 0); 
     443+ 
     444        SPEX(alpha2[0], SSB_SPROM1_CCODE, 0xff00, 8); 
     445        SPEX(alpha2[1], SSB_SPROM1_CCODE, 0x00ff, 0); 
     446  
     447@@ -410,6 +424,8 @@ static void sprom_extract_r123(struct ss 
     448        out->antenna_gain.a1 = r123_extract_antgain(out->revision, in, 
     449                                                    SSB_SPROM1_AGAIN_A, 
     450                                                    SSB_SPROM1_AGAIN_A_SHIFT); 
     451+       if (out->revision >= 2) 
     452+               sprom_extract_r23(out, in); 
     453 } 
     454  
     455 /* Revs 4 5 and 8 have partially shared layout */ 
     456--- a/include/linux/ssb/ssb_driver_chipcommon.h 
     457+++ b/include/linux/ssb/ssb_driver_chipcommon.h 
     458@@ -219,6 +219,7 @@ 
     459 #define SSB_CHIPCO_PMU_CTL                     0x0600 /* PMU control */ 
     460 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV            0xFFFF0000 /* ILP div mask */ 
     461 #define  SSB_CHIPCO_PMU_CTL_ILP_DIV_SHIFT      16 
     462+#define  SSB_CHIPCO_PMU_CTL_PLL_UPD            0x00000400 
     463 #define  SSB_CHIPCO_PMU_CTL_NOILPONW           0x00000200 /* No ILP on wait */ 
     464 #define  SSB_CHIPCO_PMU_CTL_HTREQEN            0x00000100 /* HT req enable */ 
     465 #define  SSB_CHIPCO_PMU_CTL_ALPREQEN           0x00000080 /* ALP req enable */ 
     466@@ -667,5 +668,6 @@ enum ssb_pmu_ldo_volt_id { 
     467 void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc, 
     468                             enum ssb_pmu_ldo_volt_id id, u32 voltage); 
     469 void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on); 
     470+void ssb_pmu_spuravoid_pllupdate(struct ssb_chipcommon *cc, int spuravoid); 
     471  
     472 #endif /* LINUX_SSB_CHIPCO_H_ */ 
     473--- a/include/linux/ssb/ssb_regs.h 
     474+++ b/include/linux/ssb/ssb_regs.h 
     475@@ -289,11 +289,11 @@ 
     476 #define  SSB_SPROM4_ETHPHY_ET1A_SHIFT  5 
     477 #define  SSB_SPROM4_ETHPHY_ET0M                (1<<14) /* MDIO for enet0 */ 
     478 #define  SSB_SPROM4_ETHPHY_ET1M                (1<<15) /* MDIO for enet1 */ 
     479-#define SSB_SPROM4_ANTAVAIL            0x005D  /* Antenna available bitfields */ 
     480-#define  SSB_SPROM4_ANTAVAIL_A         0x00FF  /* A-PHY bitfield */ 
     481-#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   0 
     482-#define  SSB_SPROM4_ANTAVAIL_BG                0xFF00  /* B-PHY and G-PHY bitfield */ 
     483-#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  8 
     484+#define SSB_SPROM4_ANTAVAIL            0x005C  /* Antenna available bitfields */ 
     485+#define  SSB_SPROM4_ANTAVAIL_BG                0x00FF  /* B-PHY and G-PHY bitfield */ 
     486+#define  SSB_SPROM4_ANTAVAIL_BG_SHIFT  0 
     487+#define  SSB_SPROM4_ANTAVAIL_A         0xFF00  /* A-PHY bitfield */ 
     488+#define  SSB_SPROM4_ANTAVAIL_A_SHIFT   8 
     489 #define SSB_SPROM4_AGAIN01             0x005E  /* Antenna Gain (in dBm Q5.2) */ 
     490 #define  SSB_SPROM4_AGAIN0             0x00FF  /* Antenna 0 */ 
     491 #define  SSB_SPROM4_AGAIN0_SHIFT       0 
  • trunk/target/linux/generic/patches-3.8/025-bcma_backport.patch

    r35632 r36367  
    3131--- a/drivers/bcma/driver_chipcommon.c 
    3232+++ b/drivers/bcma/driver_chipcommon.c 
    33 @@ -329,7 +329,7 @@ void bcma_chipco_serial_init(struct bcma 
     33@@ -25,13 +25,14 @@ static inline u32 bcma_cc_write32_masked 
     34        return value; 
     35 } 
     36  
     37-static u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     38+u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc) 
     39 { 
     40        if (cc->capabilities & BCMA_CC_CAP_PMU) 
     41                return bcma_pmu_get_alp_clock(cc); 
     42  
     43        return 20000000; 
     44 } 
     45+EXPORT_SYMBOL_GPL(bcma_chipco_get_alp_clock); 
     46  
     47 static u32 bcma_chipco_watchdog_get_max_timer(struct bcma_drv_cc *cc) 
     48 { 
     49@@ -213,6 +214,7 @@ u32 bcma_chipco_gpio_out(struct bcma_drv 
     50  
     51        return res; 
     52 } 
     53+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_out); 
     54  
     55 u32 bcma_chipco_gpio_outen(struct bcma_drv_cc *cc, u32 mask, u32 value) 
     56 { 
     57@@ -225,6 +227,7 @@ u32 bcma_chipco_gpio_outen(struct bcma_d 
     58  
     59        return res; 
     60 } 
     61+EXPORT_SYMBOL_GPL(bcma_chipco_gpio_outen); 
     62  
     63 /* 
     64  * If the bit is set to 0, chipcommon controlls this GPIO, 
     65@@ -329,7 +332,7 @@ void bcma_chipco_serial_init(struct bcma 
    3466                return; 
    3567        } 
     
    527559  
    528560        /* check if the capability pointer field exists */ 
    529 @@ -426,7 +429,7 @@ void bcma_core_pci_hostmode_init(struct 
     561@@ -426,7 +429,7 @@ void bcma_core_pci_hostmode_init(struct  
    530562        /* Reset RC */ 
    531563        usleep_range(3000, 5000); 
     
    536568                        BCMA_CORE_PCI_CTL_RST_OE); 
    537569  
    538 @@ -488,6 +491,17 @@ void bcma_core_pci_hostmode_init(struct 
     570@@ -488,6 +491,17 @@ void bcma_core_pci_hostmode_init(struct  
    539571  
    540572        bcma_core_pci_enable_crs(pc); 
     
    563595  
    564596        return 0; 
    565 @@ -595,6 +609,6 @@ int bcma_core_pci_pcibios_map_irq(const 
     597@@ -595,6 +609,6 @@ int bcma_core_pci_pcibios_map_irq(const  
    566598  
    567599        pc_host = container_of(dev->bus->ops, struct bcma_drv_pci_host, 
     
    610642 #define  BCMA_CC_CAP_PLLT              0x00038000      /* PLL Type */ 
    611643 #define   BCMA_PLLTYPE_NONE            0x00000000 
     644@@ -104,6 +104,7 @@ 
     645 #define  BCMA_CC_CHIPST_4706_MIPS_BENDIAN      BIT(3) /* 0: little, 1: big endian */ 
     646 #define  BCMA_CC_CHIPST_4706_PCIE1_DISABLE     BIT(5) /* PCIE1 enable strap pin */ 
     647 #define  BCMA_CC_CHIPST_5357_NAND_BOOT         BIT(4) /* NAND boot, valid for CC rev 38 and/or BCM5357 */ 
     648+#define  BCMA_CC_CHIPST_4360_XTAL_40MZ         0x00000001 
     649 #define BCMA_CC_JCMD                   0x0030          /* Rev >= 10 only */ 
     650 #define  BCMA_CC_JCMD_START            0x80000000 
     651 #define  BCMA_CC_JCMD_BUSY             0x80000000 
     652@@ -606,6 +607,8 @@ void bcma_chipco_bcm4331_ext_pa_lines_ct 
     653  
     654 extern u32 bcma_chipco_watchdog_timer_set(struct bcma_drv_cc *cc, u32 ticks); 
     655  
     656+extern u32 bcma_chipco_get_alp_clock(struct bcma_drv_cc *cc); 
     657+ 
     658 void bcma_chipco_irq_mask(struct bcma_drv_cc *cc, u32 mask, u32 value); 
     659  
     660 u32 bcma_chipco_irq_status(struct bcma_drv_cc *cc, u32 mask); 
    612661--- a/include/linux/bcma/bcma_driver_mips.h 
    613662+++ b/include/linux/bcma/bcma_driver_mips.h 
     
    658707 #define BCMA_CORE_PCI_RC_CRS_VISIBILITY                0x0001 
    659708  
     709--- a/drivers/bcma/driver_chipcommon_pmu.c 
     710+++ b/drivers/bcma/driver_chipcommon_pmu.c 
     711@@ -174,19 +174,35 @@ u32 bcma_pmu_get_alp_clock(struct bcma_d 
     712        struct bcma_bus *bus = cc->core->bus; 
     713  
     714        switch (bus->chipinfo.id) { 
     715+       case BCMA_CHIP_ID_BCM4313: 
     716+       case BCMA_CHIP_ID_BCM43224: 
     717+       case BCMA_CHIP_ID_BCM43225: 
     718+       case BCMA_CHIP_ID_BCM43227: 
     719+       case BCMA_CHIP_ID_BCM43228: 
     720+       case BCMA_CHIP_ID_BCM4331: 
     721+       case BCMA_CHIP_ID_BCM43421: 
     722+       case BCMA_CHIP_ID_BCM43428: 
     723+       case BCMA_CHIP_ID_BCM43431: 
     724        case BCMA_CHIP_ID_BCM4716: 
     725-       case BCMA_CHIP_ID_BCM4748: 
     726        case BCMA_CHIP_ID_BCM47162: 
     727-       case BCMA_CHIP_ID_BCM4313: 
     728-       case BCMA_CHIP_ID_BCM5357: 
     729+       case BCMA_CHIP_ID_BCM4748: 
     730        case BCMA_CHIP_ID_BCM4749: 
     731+       case BCMA_CHIP_ID_BCM5357: 
     732        case BCMA_CHIP_ID_BCM53572: 
     733+       case BCMA_CHIP_ID_BCM6362: 
     734                /* always 20Mhz */ 
     735                return 20000 * 1000; 
     736-       case BCMA_CHIP_ID_BCM5356: 
     737        case BCMA_CHIP_ID_BCM4706: 
     738+       case BCMA_CHIP_ID_BCM5356: 
     739                /* always 25Mhz */ 
     740                return 25000 * 1000; 
     741+       case BCMA_CHIP_ID_BCM43460: 
     742+       case BCMA_CHIP_ID_BCM4352: 
     743+       case BCMA_CHIP_ID_BCM4360: 
     744+               if (cc->status & BCMA_CC_CHIPST_4360_XTAL_40MZ) 
     745+                       return 40000 * 1000; 
     746+               else 
     747+                       return 20000 * 1000; 
     748        default: 
     749                bcma_warn(bus, "No ALP clock specified for %04X device, pmu rev. %d, using default %d Hz\n", 
     750                          bus->chipinfo.id, cc->pmu.rev, BCMA_CC_PMU_ALP_CLOCK); 
     751@@ -372,7 +388,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     752                tmp |= (bcm5357_bcm43236_ndiv[spuravoid]) << BCMA_CC_PMU1_PLL0_PC2_NDIV_INT_SHIFT; 
     753                bcma_cc_write32(cc, BCMA_CC_PLLCTL_DATA, tmp); 
     754  
     755-               tmp = 1 << 10; 
     756+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     757                break; 
     758  
     759        case BCMA_CHIP_ID_BCM4331: 
     760@@ -393,7 +409,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     761                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL2, 
     762                                                     0x03000a08); 
     763                } 
     764-               tmp = 1 << 10; 
     765+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     766                break; 
     767  
     768        case BCMA_CHIP_ID_BCM43224: 
     769@@ -426,7 +442,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     770                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     771                                                     0x88888815); 
     772                } 
     773-               tmp = 1 << 10; 
     774+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     775                break; 
     776  
     777        case BCMA_CHIP_ID_BCM4716: 
     778@@ -460,7 +476,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     779                                                     0x88888815); 
     780                } 
     781  
     782-               tmp = 3 << 9; 
     783+               tmp = BCMA_CC_PMU_CTL_PLL_UPD | BCMA_CC_PMU_CTL_NOILPONW; 
     784                break; 
     785  
     786        case BCMA_CHIP_ID_BCM43227: 
     787@@ -496,7 +512,7 @@ void bcma_pmu_spuravoid_pllupdate(struct 
     788                        bcma_pmu_spuravoid_pll_write(cc, BCMA_CC_PMU_PLL_CTL5, 
     789                                                     0x88888815); 
     790                } 
     791-               tmp = 1 << 10; 
     792+               tmp = BCMA_CC_PMU_CTL_PLL_UPD; 
     793                break; 
     794        default: 
     795                bcma_err(bus, "Unknown spuravoidance settings for chip 0x%04X, not changing PLL\n", 
Note: See TracChangeset for help on using the changeset viewer.