Changeset 30345


Ignore:
Timestamp:
2012-02-07T12:28:06+01:00 (6 years ago)
Author:
nbd
Message:

kernel: add a recent upstream commit (post-3.3) to the ssb update patch, required for the next mac80211 update

Location:
trunk/target/linux/generic
Files:
1 added
10 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic/patches-2.6.30/941-ssb_update.patch

    r29574 r30345  
    226226  * 
    227227  * Licensed under the GNU/GPL. See COPYING for details. 
    228 @@ -28,6 +28,21 @@ static void ssb_chipco_pll_write(struct 
     228@@ -28,6 +28,21 @@ static void ssb_chipco_pll_write(struct  
    229229        chipco_write32(cc, SSB_CHIPCO_PLLCTL_DATA, value); 
    230230 } 
     
    290290  
    291291        if (!(cc->capabilities & SSB_CHIPCO_CAP_PMU)) 
    292 @@ -494,15 +518,91 @@ void ssb_pmu_init(struct ssb_chipcommon 
     292@@ -494,15 +518,91 @@ void ssb_pmu_init(struct ssb_chipcommon  
    293293        ssb_dprintk(KERN_DEBUG PFX "Found rev %u PMU (capabilities 0x%08X)\n", 
    294294                    cc->pmu.rev, pmucap); 
     
    17211721 static inline u8 ssb_crc8(u8 crc, u8 data) 
    17221722 { 
    1723 @@ -247,7 +254,7 @@ static int sprom_do_read(struct ssb_bus 
     1723@@ -247,7 +254,7 @@ static int sprom_do_read(struct ssb_bus  
    17241724        int i; 
    17251725  
     
    18011801        SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A, 
    18021802             SSB_SPROM4_ANTAVAIL_A_SHIFT); 
    1803 @@ -464,6 +515,8 @@ static void sprom_extract_r45(struct ssb 
     1803@@ -464,22 +515,32 @@ static void sprom_extract_r45(struct ssb 
    18041804        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    18051805               sizeof(out->antenna_gain.ghz5)); 
     
    18101810 } 
    18111811  
    1812 @@ -474,12 +527,14 @@ static void sprom_extract_r8(struct ssb_ 
     1812 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     1813 { 
     1814        int i; 
     1815-       u16 v; 
     1816+       u16 v, o; 
     1817+       u16 pwr_info_offset[] = { 
     1818+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     1819+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     1820+       }; 
     1821+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     1822+                       ARRAY_SIZE(out->core_pwr_info)); 
    18131823  
    18141824        /* extract the MAC address */ 
     
    18261836             SSB_SPROM8_ANTAVAIL_A_SHIFT); 
    18271837        SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, 
    1828 @@ -490,12 +545,55 @@ static void sprom_extract_r8(struct ssb_ 
     1838@@ -490,12 +551,55 @@ static void sprom_extract_r8(struct ssb_ 
    18291839        SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); 
    18301840        SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, 
     
    18821892        /* Extract the antenna gain values. */ 
    18831893        SPEX(antenna_gain.ghz24.a0, SSB_SPROM8_AGAIN01, 
    1884 @@ -509,6 +607,31 @@ static void sprom_extract_r8(struct ssb_ 
     1894@@ -509,6 +613,63 @@ static void sprom_extract_r8(struct ssb_ 
    18851895        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    18861896               sizeof(out->antenna_gain.ghz5)); 
    18871897  
     1898+       /* Extract cores power info info */ 
     1899+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     1900+               o = pwr_info_offset[i]; 
     1901+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     1902+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     1903+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     1904+                       SSB_SPROM8_2G_MAXP, 0); 
     1905+ 
     1906+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     1907+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     1908+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     1909+ 
     1910+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     1911+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     1912+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     1913+                       SSB_SPROM8_5G_MAXP, 0); 
     1914+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     1915+                       SSB_SPROM8_5GH_MAXP, 0); 
     1916+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     1917+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     1918+ 
     1919+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     1920+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     1921+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     1922+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     1923+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     1924+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     1925+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     1926+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     1927+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     1928+       } 
     1929+ 
    18881930+       /* Extract FEM info */ 
    18891931+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    19141956 } 
    19151957  
    1916 @@ -521,36 +644,34 @@ static int sprom_extract(struct ssb_bus 
     1958@@ -521,36 +682,34 @@ static int sprom_extract(struct ssb_bus  
    19171959        ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision); 
    19181960        memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */ 
     
    19722014  
    19732015        if (out->boardflags_lo == 0xFFFF) 
    1974 @@ -564,13 +685,34 @@ static int sprom_extract(struct ssb_bus 
     2016@@ -564,13 +723,34 @@ static int sprom_extract(struct ssb_bus  
    19752017 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    19762018                             struct ssb_sprom *sprom) 
     
    20102052        sprom_do_read(bus, buf); 
    20112053        err = sprom_check_crc(buf, bus->sprom_size); 
    2012 @@ -580,17 +722,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
     2054@@ -580,17 +760,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
    20132055                buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
    20142056                              GFP_KERNEL); 
     
    20402082                                goto out_free; 
    20412083                        } 
    2042 @@ -602,19 +751,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
     2084@@ -602,19 +789,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
    20432085  
    20442086 out_free: 
     
    24522494        bus->mmio = NULL; 
    24532495        bus->mapped_device = NULL; 
    2454 @@ -230,6 +241,10 @@ static void __iomem *ssb_ioremap(struct 
     2496@@ -230,6 +241,10 @@ static void __iomem *ssb_ioremap(struct  
    24552497                SSB_BUG_ON(1); /* Can't reach this code. */ 
    24562498 #endif 
     
    33923434--- a/include/linux/ssb/ssb.h 
    33933435+++ b/include/linux/ssb/ssb.h 
    3394 @@ -25,26 +25,62 @@ struct ssb_sprom { 
     3436@@ -16,6 +16,12 @@ struct pcmcia_device; 
     3437 struct ssb_bus; 
     3438 struct ssb_driver; 
     3439  
     3440+struct ssb_sprom_core_pwr_info { 
     3441+       u8 itssi_2g, itssi_5g; 
     3442+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     3443+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     3444+}; 
     3445+ 
     3446 struct ssb_sprom { 
     3447        u8 revision; 
     3448        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     3449@@ -25,26 +31,64 @@ struct ssb_sprom { 
    33953450        u8 et1phyaddr;          /* MII address for enet1 */ 
    33963451        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    34593514+       u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
    34603515+       /* TODO store board flags in a single u64 */ 
     3516+ 
     3517+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
    34613518  
    34623519        /* Antenna gain values for up to 4 antennas 
    34633520         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
    3464 @@ -58,14 +94,23 @@ struct ssb_sprom { 
     3521@@ -58,14 +102,23 @@ struct ssb_sprom { 
    34653522                } ghz5;         /* 5GHz band */ 
    34663523        } antenna_gain; 
     
    34883545  
    34893546  
    3490 @@ -137,7 +182,7 @@ struct ssb_device { 
     3547@@ -137,7 +190,7 @@ struct ssb_device { 
    34913548         * is an optimization. */ 
    34923549        const struct ssb_bus_ops *ops; 
     
    34973554        struct ssb_bus *bus; 
    34983555        struct ssb_device_id id; 
    3499 @@ -195,10 +240,9 @@ struct ssb_driver { 
     3556@@ -195,10 +248,9 @@ struct ssb_driver { 
    35003557 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    35013558  
     
    35113568  
    35123569  
    3513 @@ -208,6 +252,7 @@ enum ssb_bustype { 
     3570@@ -208,6 +260,7 @@ enum ssb_bustype { 
    35143571        SSB_BUSTYPE_SSB,        /* This SSB bus is the system bus */ 
    35153572        SSB_BUSTYPE_PCI,        /* SSB is connected to PCI bus */ 
     
    35193576  
    35203577 /* board_vendor */ 
    3521 @@ -238,20 +283,33 @@ struct ssb_bus { 
     3578@@ -238,20 +291,33 @@ struct ssb_bus { 
    35223579  
    35233580        const struct ssb_bus_ops *ops; 
     
    35613618 #ifdef CONFIG_SSB_SPROM 
    35623619        /* Mutex to protect the SPROM writing. */ 
    3563 @@ -260,7 +318,8 @@ struct ssb_bus { 
     3620@@ -260,7 +326,8 @@ struct ssb_bus { 
    35643621  
    35653622        /* ID information about the Chip. */ 
     
    35713628        u8 chip_package; 
    35723629  
    3573 @@ -306,6 +365,11 @@ struct ssb_bus { 
     3630@@ -306,6 +373,11 @@ struct ssb_bus { 
    35743631 #endif /* DEBUG */ 
    35753632 }; 
     
    35833640 struct ssb_init_invariants { 
    35843641        /* Versioning information about the PCB. */ 
    3585 @@ -336,12 +400,23 @@ extern int ssb_bus_pcmciabus_register(st 
     3642@@ -336,12 +408,23 @@ extern int ssb_bus_pcmciabus_register(st 
    35863643                                      struct pcmcia_device *pcmcia_dev, 
    35873644                                      unsigned long baseaddr); 
     
    36083665 /* Suspend a SSB bus. 
    36093666  * Call this from the parent bus suspend routine. */ 
    3610 @@ -612,6 +687,7 @@ extern int ssb_bus_may_powerdown(struct 
     3667@@ -612,6 +695,7 @@ extern int ssb_bus_may_powerdown(struct  
    36113668  * Otherwise static always-on powercontrol will be used. */ 
    36123669 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
     
    38773934 #define  SSB_SPROM3_CCKPO_2M           0x00F0  /* 2M Rate PO */ 
    38783935 #define  SSB_SPROM3_CCKPO_2M_SHIFT     4 
    3879 @@ -264,104 +267,257 @@ 
     3936@@ -264,104 +267,291 @@ 
    38803937 #define  SSB_SPROM3_OFDMGPO            0x107A  /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ 
    38813938  
     
    41184175+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    41194176+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     4177+ 
     4178+/* There are 4 blocks with power info sharing the same layout */ 
     4179+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     4180+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     4181+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     4182+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     4183+ 
     4184+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     4185+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     4186+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     4187+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     4188+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     4189+#define SSB_SROM8_2G_PA_1              0x04 
     4190+#define SSB_SROM8_2G_PA_2              0x06 
     4191+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     4192+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     4193+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     4194+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     4195+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     4196+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     4197+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     4198+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     4199+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     4200+#define SSB_SROM8_5G_PA_1              0x0E 
     4201+#define SSB_SROM8_5G_PA_2              0x10 
     4202+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     4203+#define SSB_SROM8_5GL_PA_1             0x14 
     4204+#define SSB_SROM8_5GL_PA_2             0x16 
     4205+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     4206+#define SSB_SROM8_5GH_PA_1             0x1A 
     4207+#define SSB_SROM8_5GH_PA_2             0x1C 
     4208+ 
     4209+/* TODO: Make it deprecated */ 
    41204210+#define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    41214211+#define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
     
    41444234+#define SSB_SPROM8_PA1HIB1             0x00DA 
    41454235+#define SSB_SPROM8_PA1HIB2             0x00DC 
     4236+ 
    41464237+#define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
    41474238+#define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-2.6.31/941-ssb_update.patch

    r29574 r30345  
    226226  * 
    227227  * Licensed under the GNU/GPL. See COPYING for details. 
    228 @@ -28,6 +28,21 @@ static void ssb_chipco_pll_write(struct 
     228@@ -28,6 +28,21 @@ static void ssb_chipco_pll_write(struct  
    229229        chipco_write32(cc, SSB_CHIPCO_PLLCTL_DATA, value); 
    230230 } 
     
    290290  
    291291        if (!(cc->capabilities & SSB_CHIPCO_CAP_PMU)) 
    292 @@ -494,15 +518,91 @@ void ssb_pmu_init(struct ssb_chipcommon 
     292@@ -494,15 +518,91 @@ void ssb_pmu_init(struct ssb_chipcommon  
    293293        ssb_dprintk(KERN_DEBUG PFX "Found rev %u PMU (capabilities 0x%08X)\n", 
    294294                    cc->pmu.rev, pmucap); 
     
    15781578 static inline u8 ssb_crc8(u8 crc, u8 data) 
    15791579 { 
    1580 @@ -247,7 +254,7 @@ static int sprom_do_read(struct ssb_bus 
     1580@@ -247,7 +254,7 @@ static int sprom_do_read(struct ssb_bus  
    15811581        int i; 
    15821582  
     
    16581658        SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A, 
    16591659             SSB_SPROM4_ANTAVAIL_A_SHIFT); 
    1660 @@ -464,6 +515,8 @@ static void sprom_extract_r45(struct ssb 
     1660@@ -464,22 +515,32 @@ static void sprom_extract_r45(struct ssb 
    16611661        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    16621662               sizeof(out->antenna_gain.ghz5)); 
     
    16671667 } 
    16681668  
    1669 @@ -474,12 +527,14 @@ static void sprom_extract_r8(struct ssb_ 
     1669 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     1670 { 
     1671        int i; 
     1672-       u16 v; 
     1673+       u16 v, o; 
     1674+       u16 pwr_info_offset[] = { 
     1675+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     1676+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     1677+       }; 
     1678+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     1679+                       ARRAY_SIZE(out->core_pwr_info)); 
    16701680  
    16711681        /* extract the MAC address */ 
     
    16831693             SSB_SPROM8_ANTAVAIL_A_SHIFT); 
    16841694        SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG, 
    1685 @@ -490,12 +545,55 @@ static void sprom_extract_r8(struct ssb_ 
     1695@@ -490,12 +551,55 @@ static void sprom_extract_r8(struct ssb_ 
    16861696        SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0); 
    16871697        SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A, 
     
    17391749        /* Extract the antenna gain values. */ 
    17401750        SPEX(antenna_gain.ghz24.a0, SSB_SPROM8_AGAIN01, 
    1741 @@ -509,6 +607,31 @@ static void sprom_extract_r8(struct ssb_ 
     1751@@ -509,6 +613,63 @@ static void sprom_extract_r8(struct ssb_ 
    17421752        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    17431753               sizeof(out->antenna_gain.ghz5)); 
    17441754  
     1755+       /* Extract cores power info info */ 
     1756+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     1757+               o = pwr_info_offset[i]; 
     1758+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     1759+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     1760+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     1761+                       SSB_SPROM8_2G_MAXP, 0); 
     1762+ 
     1763+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     1764+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     1765+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     1766+ 
     1767+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     1768+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     1769+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     1770+                       SSB_SPROM8_5G_MAXP, 0); 
     1771+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     1772+                       SSB_SPROM8_5GH_MAXP, 0); 
     1773+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     1774+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     1775+ 
     1776+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     1777+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     1778+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     1779+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     1780+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     1781+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     1782+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     1783+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     1784+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     1785+       } 
     1786+ 
    17451787+       /* Extract FEM info */ 
    17461788+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    17711813 } 
    17721814  
    1773 @@ -521,36 +644,34 @@ static int sprom_extract(struct ssb_bus 
     1815@@ -521,36 +682,34 @@ static int sprom_extract(struct ssb_bus  
    17741816        ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision); 
    17751817        memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */ 
     
    18291871  
    18301872        if (out->boardflags_lo == 0xFFFF) 
    1831 @@ -564,13 +685,34 @@ static int sprom_extract(struct ssb_bus 
     1873@@ -564,13 +723,34 @@ static int sprom_extract(struct ssb_bus  
    18321874 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    18331875                             struct ssb_sprom *sprom) 
     
    18671909        sprom_do_read(bus, buf); 
    18681910        err = sprom_check_crc(buf, bus->sprom_size); 
    1869 @@ -580,17 +722,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
     1911@@ -580,17 +760,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
    18701912                buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
    18711913                              GFP_KERNEL); 
     
    18971939                                goto out_free; 
    18981940                        } 
    1899 @@ -602,19 +751,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
     1941@@ -602,19 +789,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
    19001942  
    19011943 out_free: 
     
    22932335        bus->mmio = NULL; 
    22942336        bus->mapped_device = NULL; 
    2295 @@ -230,6 +241,10 @@ static void __iomem *ssb_ioremap(struct 
     2337@@ -230,6 +241,10 @@ static void __iomem *ssb_ioremap(struct  
    22962338                SSB_BUG_ON(1); /* Can't reach this code. */ 
    22972339 #endif 
     
    32003242--- a/include/linux/ssb/ssb.h 
    32013243+++ b/include/linux/ssb/ssb.h 
    3202 @@ -25,26 +25,62 @@ struct ssb_sprom { 
     3244@@ -16,6 +16,12 @@ struct pcmcia_device; 
     3245 struct ssb_bus; 
     3246 struct ssb_driver; 
     3247  
     3248+struct ssb_sprom_core_pwr_info { 
     3249+       u8 itssi_2g, itssi_5g; 
     3250+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     3251+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     3252+}; 
     3253+ 
     3254 struct ssb_sprom { 
     3255        u8 revision; 
     3256        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     3257@@ -25,26 +31,64 @@ struct ssb_sprom { 
    32033258        u8 et1phyaddr;          /* MII address for enet1 */ 
    32043259        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    32673322+       u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
    32683323+       /* TODO store board flags in a single u64 */ 
     3324+ 
     3325+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
    32693326  
    32703327        /* Antenna gain values for up to 4 antennas 
    32713328         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
    3272 @@ -58,14 +94,23 @@ struct ssb_sprom { 
     3329@@ -58,14 +102,23 @@ struct ssb_sprom { 
    32733330                } ghz5;         /* 5GHz band */ 
    32743331        } antenna_gain; 
     
    32963353  
    32973354  
    3298 @@ -137,7 +182,7 @@ struct ssb_device { 
     3355@@ -137,7 +190,7 @@ struct ssb_device { 
    32993356         * is an optimization. */ 
    33003357        const struct ssb_bus_ops *ops; 
     
    33053362        struct ssb_bus *bus; 
    33063363        struct ssb_device_id id; 
    3307 @@ -195,10 +240,9 @@ struct ssb_driver { 
     3364@@ -195,10 +248,9 @@ struct ssb_driver { 
    33083365 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    33093366  
     
    33193376  
    33203377  
    3321 @@ -208,6 +252,7 @@ enum ssb_bustype { 
     3378@@ -208,6 +260,7 @@ enum ssb_bustype { 
    33223379        SSB_BUSTYPE_SSB,        /* This SSB bus is the system bus */ 
    33233380        SSB_BUSTYPE_PCI,        /* SSB is connected to PCI bus */ 
     
    33273384  
    33283385 /* board_vendor */ 
    3329 @@ -238,20 +283,33 @@ struct ssb_bus { 
     3386@@ -238,20 +291,33 @@ struct ssb_bus { 
    33303387  
    33313388        const struct ssb_bus_ops *ops; 
     
    33693426 #ifdef CONFIG_SSB_SPROM 
    33703427        /* Mutex to protect the SPROM writing. */ 
    3371 @@ -260,7 +318,8 @@ struct ssb_bus { 
     3428@@ -260,7 +326,8 @@ struct ssb_bus { 
    33723429  
    33733430        /* ID information about the Chip. */ 
     
    33793436        u8 chip_package; 
    33803437  
    3381 @@ -306,6 +365,11 @@ struct ssb_bus { 
     3438@@ -306,6 +373,11 @@ struct ssb_bus { 
    33823439 #endif /* DEBUG */ 
    33833440 }; 
     
    33913448 struct ssb_init_invariants { 
    33923449        /* Versioning information about the PCB. */ 
    3393 @@ -336,12 +400,23 @@ extern int ssb_bus_pcmciabus_register(st 
     3450@@ -336,12 +408,23 @@ extern int ssb_bus_pcmciabus_register(st 
    33943451                                      struct pcmcia_device *pcmcia_dev, 
    33953452                                      unsigned long baseaddr); 
     
    34163473 /* Suspend a SSB bus. 
    34173474  * Call this from the parent bus suspend routine. */ 
    3418 @@ -612,6 +687,7 @@ extern int ssb_bus_may_powerdown(struct 
     3475@@ -612,6 +695,7 @@ extern int ssb_bus_may_powerdown(struct  
    34193476  * Otherwise static always-on powercontrol will be used. */ 
    34203477 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
     
    36853742 #define  SSB_SPROM3_CCKPO_2M           0x00F0  /* 2M Rate PO */ 
    36863743 #define  SSB_SPROM3_CCKPO_2M_SHIFT     4 
    3687 @@ -264,104 +267,257 @@ 
     3744@@ -264,104 +267,291 @@ 
    36883745 #define  SSB_SPROM3_OFDMGPO            0x107A  /* G-PHY OFDM Power Offset (4 bytes, BigEndian) */ 
    36893746  
     
    39263983+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    39273984+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     3985+ 
     3986+/* There are 4 blocks with power info sharing the same layout */ 
     3987+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     3988+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     3989+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     3990+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     3991+ 
     3992+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     3993+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     3994+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     3995+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     3996+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     3997+#define SSB_SROM8_2G_PA_1              0x04 
     3998+#define SSB_SROM8_2G_PA_2              0x06 
     3999+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     4000+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     4001+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     4002+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     4003+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     4004+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     4005+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     4006+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     4007+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     4008+#define SSB_SROM8_5G_PA_1              0x0E 
     4009+#define SSB_SROM8_5G_PA_2              0x10 
     4010+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     4011+#define SSB_SROM8_5GL_PA_1             0x14 
     4012+#define SSB_SROM8_5GL_PA_2             0x16 
     4013+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     4014+#define SSB_SROM8_5GH_PA_1             0x1A 
     4015+#define SSB_SROM8_5GH_PA_2             0x1C 
     4016+ 
     4017+/* TODO: Make it deprecated */ 
    39284018+#define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    39294019+#define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
     
    39524042+#define SSB_SPROM8_PA1HIB1             0x00DA 
    39534043+#define SSB_SPROM8_PA1HIB2             0x00DC 
     4044+ 
    39544045+#define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
    39554046+#define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-2.6.32/975-ssb_update.patch

    r29574 r30345  
    207207  
    208208        if (!(cc->capabilities & SSB_CHIPCO_CAP_PMU)) 
    209 @@ -509,15 +518,12 @@ void ssb_pmu_init(struct ssb_chipcommon 
     209@@ -509,15 +518,12 @@ void ssb_pmu_init(struct ssb_chipcommon  
    210210        ssb_dprintk(KERN_DEBUG PFX "Found rev %u PMU (capabilities 0x%08X)\n", 
    211211                    cc->pmu.rev, pmucap); 
     
    13821382        SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A, 
    13831383             SSB_SPROM4_ANTAVAIL_A_SHIFT); 
    1384 @@ -470,6 +515,8 @@ static void sprom_extract_r45(struct ssb 
     1384@@ -470,13 +515,21 @@ static void sprom_extract_r45(struct ssb 
    13851385        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    13861386               sizeof(out->antenna_gain.ghz5)); 
     
    13911391 } 
    13921392  
    1393 @@ -560,6 +607,31 @@ static void sprom_extract_r8(struct ssb_ 
     1393 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     1394 { 
     1395        int i; 
     1396-       u16 v; 
     1397+       u16 v, o; 
     1398+       u16 pwr_info_offset[] = { 
     1399+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     1400+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     1401+       }; 
     1402+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     1403+                       ARRAY_SIZE(out->core_pwr_info)); 
     1404  
     1405        /* extract the MAC address */ 
     1406        for (i = 0; i < 3; i++) { 
     1407@@ -560,6 +613,63 @@ static void sprom_extract_r8(struct ssb_ 
    13941408        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    13951409               sizeof(out->antenna_gain.ghz5)); 
    13961410  
     1411+       /* Extract cores power info info */ 
     1412+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     1413+               o = pwr_info_offset[i]; 
     1414+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     1415+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     1416+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     1417+                       SSB_SPROM8_2G_MAXP, 0); 
     1418+ 
     1419+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     1420+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     1421+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     1422+ 
     1423+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     1424+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     1425+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     1426+                       SSB_SPROM8_5G_MAXP, 0); 
     1427+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     1428+                       SSB_SPROM8_5GH_MAXP, 0); 
     1429+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     1430+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     1431+ 
     1432+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     1433+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     1434+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     1435+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     1436+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     1437+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     1438+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     1439+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     1440+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     1441+       } 
     1442+ 
    13971443+       /* Extract FEM info */ 
    13981444+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    14231469 } 
    14241470  
    1425 @@ -572,37 +644,34 @@ static int sprom_extract(struct ssb_bus 
     1471@@ -572,37 +682,34 @@ static int sprom_extract(struct ssb_bus  
    14261472        ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision); 
    14271473        memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */ 
     
    14821528  
    14831529        if (out->boardflags_lo == 0xFFFF) 
    1484 @@ -616,15 +685,14 @@ static int sprom_extract(struct ssb_bus 
     1530@@ -616,15 +723,14 @@ static int sprom_extract(struct ssb_bus  
    14851531 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    14861532                             struct ssb_sprom *sprom) 
     
    15001546                 * get SPROM offset: SSB_SPROM_BASE1 except for 
    15011547                 * chipcommon rev >= 31 or chip ID is 0x4312 and 
    1502 @@ -644,7 +712,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
     1548@@ -644,7 +750,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
    15031549  
    15041550        buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); 
     
    15091555        sprom_do_read(bus, buf); 
    15101556        err = sprom_check_crc(buf, bus->sprom_size); 
    1511 @@ -654,17 +722,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
     1557@@ -654,17 +760,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
    15121558                buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
    15131559                              GFP_KERNEL); 
     
    15391585                                goto out_free; 
    15401586                        } 
    1541 @@ -676,19 +751,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
     1587@@ -676,19 +789,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
    15421588  
    15431589 out_free: 
     
    21162162--- a/include/linux/ssb/ssb.h 
    21172163+++ b/include/linux/ssb/ssb.h 
    2118 @@ -25,8 +25,10 @@ struct ssb_sprom { 
     2164@@ -16,6 +16,12 @@ struct pcmcia_device; 
     2165 struct ssb_bus; 
     2166 struct ssb_driver; 
     2167  
     2168+struct ssb_sprom_core_pwr_info { 
     2169+       u8 itssi_2g, itssi_5g; 
     2170+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     2171+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     2172+}; 
     2173+ 
     2174 struct ssb_sprom { 
     2175        u8 revision; 
     2176        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     2177@@ -25,8 +31,10 @@ struct ssb_sprom { 
    21192178        u8 et1phyaddr;          /* MII address for enet1 */ 
    21202179        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    21282187        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
    21292188        u16 pa0b0; 
    2130 @@ -55,6 +57,10 @@ struct ssb_sprom { 
     2189@@ -55,6 +63,10 @@ struct ssb_sprom { 
    21312190        u8 tri5gl;              /* 5.2GHz TX isolation */ 
    21322191        u8 tri5g;               /* 5.3GHz TX isolation */ 
     
    21392198        u8 rxpo5g;              /* 5GHz RX power offset */ 
    21402199        u8 rssisav2g;           /* 2GHz RSSI params */ 
    2141 @@ -88,6 +94,15 @@ struct ssb_sprom { 
     2200@@ -76,6 +88,8 @@ struct ssb_sprom { 
     2201        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     2202        /* TODO store board flags in a single u64 */ 
     2203  
     2204+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     2205+ 
     2206        /* Antenna gain values for up to 4 antennas 
     2207         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     2208         * loss in the connectors is bigger than the gain. */ 
     2209@@ -88,6 +102,15 @@ struct ssb_sprom { 
    21422210                } ghz5;         /* 5GHz band */ 
    21432211        } antenna_gain; 
     
    21552223 }; 
    21562224  
    2157 @@ -95,7 +110,7 @@ struct ssb_sprom { 
     2225@@ -95,7 +118,7 @@ struct ssb_sprom { 
    21582226 struct ssb_boardinfo { 
    21592227        u16 vendor; 
     
    21642232  
    21652233  
    2166 @@ -167,7 +182,7 @@ struct ssb_device { 
     2234@@ -167,7 +190,7 @@ struct ssb_device { 
    21672235         * is an optimization. */ 
    21682236        const struct ssb_bus_ops *ops; 
     
    21732241        struct ssb_bus *bus; 
    21742242        struct ssb_device_id id; 
    2175 @@ -225,10 +240,9 @@ struct ssb_driver { 
     2243@@ -225,10 +248,9 @@ struct ssb_driver { 
    21762244 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    21772245  
     
    21872255  
    21882256  
    2189 @@ -269,7 +283,8 @@ struct ssb_bus { 
     2257@@ -269,7 +291,8 @@ struct ssb_bus { 
    21902258  
    21912259        const struct ssb_bus_ops *ops; 
     
    21972265        union { 
    21982266                /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */ 
    2199 @@ -281,14 +296,17 @@ struct ssb_bus { 
     2267@@ -281,14 +304,17 @@ struct ssb_bus { 
    22002268         * On PCMCIA-host busses this is used to protect the whole MMIO access. */ 
    22012269        spinlock_t bar_lock; 
     
    22222290        /* See enum ssb_quirks */ 
    22232291        unsigned int quirks; 
    2224 @@ -300,7 +318,7 @@ struct ssb_bus { 
     2292@@ -300,7 +326,7 @@ struct ssb_bus { 
    22252293  
    22262294        /* ID information about the Chip. */ 
     
    22312299        u16 sprom_size;         /* number of words in sprom */ 
    22322300        u8 chip_package; 
    2233 @@ -396,7 +414,9 @@ extern bool ssb_is_sprom_available(struc 
     2301@@ -396,7 +422,9 @@ extern bool ssb_is_sprom_available(struc 
    22342302  
    22352303 /* Set a fallback SPROM. 
     
    22422310 /* Suspend a SSB bus. 
    22432311  * Call this from the parent bus suspend routine. */ 
    2244 @@ -667,6 +687,7 @@ extern int ssb_bus_may_powerdown(struct 
     2312@@ -667,6 +695,7 @@ extern int ssb_bus_may_powerdown(struct  
    22452313  * Otherwise static always-on powercontrol will be used. */ 
    22462314 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
     
    26082676 #define  SSB_SPROM8_RSSISMC5G          0x00F0 
    26092677 #define  SSB_SPROM8_RSSISMC5G_SHIFT    4 
    2610 @@ -374,47 +420,104 @@ 
     2678@@ -374,47 +420,138 @@ 
    26112679 #define  SSB_SPROM8_RSSISAV5G_SHIFT    8 
    26122680 #define  SSB_SPROM8_BXA5G              0x1800 
     
    26452713+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    26462714+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     2715+ 
     2716+/* There are 4 blocks with power info sharing the same layout */ 
     2717+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     2718+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     2719+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     2720+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     2721+ 
     2722+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     2723+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     2724+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     2725+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     2726+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     2727+#define SSB_SROM8_2G_PA_1              0x04 
     2728+#define SSB_SROM8_2G_PA_2              0x06 
     2729+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     2730+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     2731+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     2732+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     2733+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     2734+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     2735+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     2736+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     2737+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     2738+#define SSB_SROM8_5G_PA_1              0x0E 
     2739+#define SSB_SROM8_5G_PA_2              0x10 
     2740+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     2741+#define SSB_SROM8_5GL_PA_1             0x14 
     2742+#define SSB_SROM8_5GL_PA_2             0x16 
     2743+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     2744+#define SSB_SROM8_5GH_PA_1             0x1A 
     2745+#define SSB_SROM8_5GH_PA_2             0x1C 
     2746+ 
     2747+/* TODO: Make it deprecated */ 
    26472748+#define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    26482749 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
     
    26882789+#define SSB_SPROM8_PA1HIB1             0x00DA 
    26892790+#define SSB_SPROM8_PA1HIB2             0x00DC 
     2791+ 
    26902792+#define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
    26912793+#define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-2.6.36/941-ssb_update.patch

    r29574 r30345  
    418418        SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A, 
    419419             SSB_SPROM4_ANTAVAIL_A_SHIFT); 
    420 @@ -471,6 +515,8 @@ static void sprom_extract_r45(struct ssb 
     420@@ -471,13 +515,21 @@ static void sprom_extract_r45(struct ssb 
    421421        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    422422               sizeof(out->antenna_gain.ghz5)); 
     
    427427 } 
    428428  
    429 @@ -561,6 +607,31 @@ static void sprom_extract_r8(struct ssb_ 
     429 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     430 { 
     431        int i; 
     432-       u16 v; 
     433+       u16 v, o; 
     434+       u16 pwr_info_offset[] = { 
     435+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     436+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     437+       }; 
     438+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     439+                       ARRAY_SIZE(out->core_pwr_info)); 
     440  
     441        /* extract the MAC address */ 
     442        for (i = 0; i < 3; i++) { 
     443@@ -561,6 +613,63 @@ static void sprom_extract_r8(struct ssb_ 
    430444        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    431445               sizeof(out->antenna_gain.ghz5)); 
    432446  
     447+       /* Extract cores power info info */ 
     448+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     449+               o = pwr_info_offset[i]; 
     450+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     451+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     452+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     453+                       SSB_SPROM8_2G_MAXP, 0); 
     454+ 
     455+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     456+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     457+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     458+ 
     459+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     460+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     461+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     462+                       SSB_SPROM8_5G_MAXP, 0); 
     463+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     464+                       SSB_SPROM8_5GH_MAXP, 0); 
     465+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     466+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     467+ 
     468+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     469+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     470+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     471+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     472+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     473+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     474+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     475+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     476+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     477+       } 
     478+ 
    433479+       /* Extract FEM info */ 
    434480+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    459505 } 
    460506  
    461 @@ -573,37 +644,34 @@ static int sprom_extract(struct ssb_bus 
     507@@ -573,37 +682,34 @@ static int sprom_extract(struct ssb_bus  
    462508        ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision); 
    463509        memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */ 
     
    518564  
    519565        if (out->boardflags_lo == 0xFFFF) 
    520 @@ -617,15 +685,14 @@ static int sprom_extract(struct ssb_bus 
     566@@ -617,15 +723,14 @@ static int sprom_extract(struct ssb_bus  
    521567 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    522568                             struct ssb_sprom *sprom) 
     
    536582                 * get SPROM offset: SSB_SPROM_BASE1 except for 
    537583                 * chipcommon rev >= 31 or chip ID is 0x4312 and 
    538 @@ -645,7 +712,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
     584@@ -645,7 +750,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
    539585  
    540586        buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); 
     
    545591        sprom_do_read(bus, buf); 
    546592        err = sprom_check_crc(buf, bus->sprom_size); 
    547 @@ -655,17 +722,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
     593@@ -655,17 +760,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
    548594                buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
    549595                              GFP_KERNEL); 
     
    575621                                goto out_free; 
    576622                        } 
    577 @@ -677,19 +751,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
     623@@ -677,19 +789,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
    578624  
    579625 out_free: 
     
    712758--- a/include/linux/ssb/ssb.h 
    713759+++ b/include/linux/ssb/ssb.h 
    714 @@ -25,8 +25,10 @@ struct ssb_sprom { 
     760@@ -16,6 +16,12 @@ struct pcmcia_device; 
     761 struct ssb_bus; 
     762 struct ssb_driver; 
     763  
     764+struct ssb_sprom_core_pwr_info { 
     765+       u8 itssi_2g, itssi_5g; 
     766+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     767+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     768+}; 
     769+ 
     770 struct ssb_sprom { 
     771        u8 revision; 
     772        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     773@@ -25,8 +31,10 @@ struct ssb_sprom { 
    715774        u8 et1phyaddr;          /* MII address for enet1 */ 
    716775        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    724783        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
    725784        u16 pa0b0; 
    726 @@ -55,6 +57,10 @@ struct ssb_sprom { 
     785@@ -55,6 +63,10 @@ struct ssb_sprom { 
    727786        u8 tri5gl;              /* 5.2GHz TX isolation */ 
    728787        u8 tri5g;               /* 5.3GHz TX isolation */ 
     
    735794        u8 rxpo5g;              /* 5GHz RX power offset */ 
    736795        u8 rssisav2g;           /* 2GHz RSSI params */ 
    737 @@ -88,6 +94,15 @@ struct ssb_sprom { 
     796@@ -76,6 +88,8 @@ struct ssb_sprom { 
     797        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     798        /* TODO store board flags in a single u64 */ 
     799  
     800+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     801+ 
     802        /* Antenna gain values for up to 4 antennas 
     803         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     804         * loss in the connectors is bigger than the gain. */ 
     805@@ -88,6 +102,15 @@ struct ssb_sprom { 
    738806                } ghz5;         /* 5GHz band */ 
    739807        } antenna_gain; 
     
    751819 }; 
    752820  
    753 @@ -95,7 +110,7 @@ struct ssb_sprom { 
     821@@ -95,7 +118,7 @@ struct ssb_sprom { 
    754822 struct ssb_boardinfo { 
    755823        u16 vendor; 
     
    760828  
    761829  
    762 @@ -225,10 +240,9 @@ struct ssb_driver { 
     830@@ -225,10 +248,9 @@ struct ssb_driver { 
    763831 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    764832  
     
    774842  
    775843  
    776 @@ -304,7 +318,7 @@ struct ssb_bus { 
     844@@ -304,7 +326,7 @@ struct ssb_bus { 
    777845  
    778846        /* ID information about the Chip. */ 
     
    783851        u16 sprom_size;         /* number of words in sprom */ 
    784852        u8 chip_package; 
    785 @@ -400,7 +414,9 @@ extern bool ssb_is_sprom_available(struc 
     853@@ -400,7 +422,9 @@ extern bool ssb_is_sprom_available(struc 
    786854  
    787855 /* Set a fallback SPROM. 
     
    794862 /* Suspend a SSB bus. 
    795863  * Call this from the parent bus suspend routine. */ 
    796 @@ -514,6 +530,7 @@ extern int ssb_bus_may_powerdown(struct 
     864@@ -514,6 +538,7 @@ extern int ssb_bus_may_powerdown(struct  
    797865  * Otherwise static always-on powercontrol will be used. */ 
    798866 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
     
    917985 #define SSB_SPROM5_GPIOA               0x0076  /* Gen. Purpose IO # 0 and 1 */ 
    918986 #define  SSB_SPROM5_GPIOA_P0           0x00FF  /* Pin 0 */ 
    919 @@ -386,6 +432,23 @@ 
     987@@ -386,6 +432,56 @@ 
    920988 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    921989 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    9381006+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    9391007+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     1008+ 
     1009+/* There are 4 blocks with power info sharing the same layout */ 
     1010+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     1011+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     1012+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     1013+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     1014+ 
     1015+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     1016+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     1017+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     1018+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     1019+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     1020+#define SSB_SROM8_2G_PA_1              0x04 
     1021+#define SSB_SROM8_2G_PA_2              0x06 
     1022+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     1023+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     1024+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     1025+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     1026+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     1027+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     1028+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     1029+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     1030+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     1031+#define SSB_SROM8_5G_PA_1              0x0E 
     1032+#define SSB_SROM8_5G_PA_2              0x10 
     1033+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     1034+#define SSB_SROM8_5GL_PA_1             0x14 
     1035+#define SSB_SROM8_5GL_PA_2             0x16 
     1036+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     1037+#define SSB_SROM8_5GH_PA_1             0x1A 
     1038+#define SSB_SROM8_5GH_PA_2             0x1C 
     1039+ 
     1040+/* TODO: Make it deprecated */ 
    9401041 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    9411042 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    9421043 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    943 @@ -416,6 +479,46 @@ 
     1044@@ -410,12 +506,53 @@ 
     1045 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     1046 #define SSB_SPROM8_PA1HIB1             0x00DA 
     1047 #define SSB_SPROM8_PA1HIB2             0x00DC 
     1048+ 
     1049 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     1050 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     1051 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
    9441052 #define SSB_SPROM8_OFDM5GLPO           0x014A  /* 5.2GHz OFDM power offset */ 
    9451053 #define SSB_SPROM8_OFDM5GHPO           0x014E  /* 5.8GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-2.6.37/020-ssb_update.patch

    r29574 r30345  
    418418        SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A, 
    419419             SSB_SPROM4_ANTAVAIL_A_SHIFT); 
    420 @@ -471,6 +515,8 @@ static void sprom_extract_r45(struct ssb 
     420@@ -471,13 +515,21 @@ static void sprom_extract_r45(struct ssb 
    421421        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    422422               sizeof(out->antenna_gain.ghz5)); 
     
    427427 } 
    428428  
    429 @@ -561,6 +607,31 @@ static void sprom_extract_r8(struct ssb_ 
     429 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     430 { 
     431        int i; 
     432-       u16 v; 
     433+       u16 v, o; 
     434+       u16 pwr_info_offset[] = { 
     435+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     436+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     437+       }; 
     438+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     439+                       ARRAY_SIZE(out->core_pwr_info)); 
     440  
     441        /* extract the MAC address */ 
     442        for (i = 0; i < 3; i++) { 
     443@@ -561,6 +613,63 @@ static void sprom_extract_r8(struct ssb_ 
    430444        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    431445               sizeof(out->antenna_gain.ghz5)); 
    432446  
     447+       /* Extract cores power info info */ 
     448+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     449+               o = pwr_info_offset[i]; 
     450+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     451+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     452+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     453+                       SSB_SPROM8_2G_MAXP, 0); 
     454+ 
     455+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     456+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     457+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     458+ 
     459+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     460+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     461+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     462+                       SSB_SPROM8_5G_MAXP, 0); 
     463+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     464+                       SSB_SPROM8_5GH_MAXP, 0); 
     465+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     466+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     467+ 
     468+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     469+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     470+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     471+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     472+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     473+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     474+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     475+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     476+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     477+       } 
     478+ 
    433479+       /* Extract FEM info */ 
    434480+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    459505 } 
    460506  
    461 @@ -573,37 +644,34 @@ static int sprom_extract(struct ssb_bus 
     507@@ -573,37 +682,34 @@ static int sprom_extract(struct ssb_bus  
    462508        ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision); 
    463509        memset(out->et0mac, 0xFF, 6);           /* preset et0 and et1 mac */ 
     
    518564  
    519565        if (out->boardflags_lo == 0xFFFF) 
    520 @@ -617,15 +685,14 @@ static int sprom_extract(struct ssb_bus 
     566@@ -617,15 +723,14 @@ static int sprom_extract(struct ssb_bus  
    521567 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    522568                             struct ssb_sprom *sprom) 
     
    536582                 * get SPROM offset: SSB_SPROM_BASE1 except for 
    537583                 * chipcommon rev >= 31 or chip ID is 0x4312 and 
    538 @@ -645,7 +712,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
     584@@ -645,7 +750,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
    539585  
    540586        buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); 
     
    545591        sprom_do_read(bus, buf); 
    546592        err = sprom_check_crc(buf, bus->sprom_size); 
    547 @@ -655,17 +722,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
     593@@ -655,17 +760,24 @@ static int ssb_pci_sprom_get(struct ssb_ 
    548594                buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16), 
    549595                              GFP_KERNEL); 
     
    575621                                goto out_free; 
    576622                        } 
    577 @@ -677,19 +751,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
     623@@ -677,19 +789,15 @@ static int ssb_pci_sprom_get(struct ssb_ 
    578624  
    579625 out_free: 
     
    712758--- a/include/linux/ssb/ssb.h 
    713759+++ b/include/linux/ssb/ssb.h 
    714 @@ -25,8 +25,10 @@ struct ssb_sprom { 
     760@@ -16,6 +16,12 @@ struct pcmcia_device; 
     761 struct ssb_bus; 
     762 struct ssb_driver; 
     763  
     764+struct ssb_sprom_core_pwr_info { 
     765+       u8 itssi_2g, itssi_5g; 
     766+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     767+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     768+}; 
     769+ 
     770 struct ssb_sprom { 
     771        u8 revision; 
     772        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     773@@ -25,8 +31,10 @@ struct ssb_sprom { 
    715774        u8 et1phyaddr;          /* MII address for enet1 */ 
    716775        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    724783        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
    725784        u16 pa0b0; 
    726 @@ -55,6 +57,10 @@ struct ssb_sprom { 
     785@@ -55,6 +63,10 @@ struct ssb_sprom { 
    727786        u8 tri5gl;              /* 5.2GHz TX isolation */ 
    728787        u8 tri5g;               /* 5.3GHz TX isolation */ 
     
    735794        u8 rxpo5g;              /* 5GHz RX power offset */ 
    736795        u8 rssisav2g;           /* 2GHz RSSI params */ 
    737 @@ -88,6 +94,15 @@ struct ssb_sprom { 
     796@@ -76,6 +88,8 @@ struct ssb_sprom { 
     797        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     798        /* TODO store board flags in a single u64 */ 
     799  
     800+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     801+ 
     802        /* Antenna gain values for up to 4 antennas 
     803         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     804         * loss in the connectors is bigger than the gain. */ 
     805@@ -88,6 +102,15 @@ struct ssb_sprom { 
    738806                } ghz5;         /* 5GHz band */ 
    739807        } antenna_gain; 
     
    751819 }; 
    752820  
    753 @@ -95,7 +110,7 @@ struct ssb_sprom { 
     821@@ -95,7 +118,7 @@ struct ssb_sprom { 
    754822 struct ssb_boardinfo { 
    755823        u16 vendor; 
     
    760828  
    761829  
    762 @@ -225,10 +240,9 @@ struct ssb_driver { 
     830@@ -225,10 +248,9 @@ struct ssb_driver { 
    763831 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    764832  
     
    774842  
    775843  
    776 @@ -304,7 +318,7 @@ struct ssb_bus { 
     844@@ -304,7 +326,7 @@ struct ssb_bus { 
    777845  
    778846        /* ID information about the Chip. */ 
     
    783851        u16 sprom_size;         /* number of words in sprom */ 
    784852        u8 chip_package; 
    785 @@ -400,7 +414,9 @@ extern bool ssb_is_sprom_available(struc 
     853@@ -400,7 +422,9 @@ extern bool ssb_is_sprom_available(struc 
    786854  
    787855 /* Set a fallback SPROM. 
     
    794862 /* Suspend a SSB bus. 
    795863  * Call this from the parent bus suspend routine. */ 
    796 @@ -514,6 +530,7 @@ extern int ssb_bus_may_powerdown(struct 
     864@@ -514,6 +538,7 @@ extern int ssb_bus_may_powerdown(struct  
    797865  * Otherwise static always-on powercontrol will be used. */ 
    798866 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
     
    889957 #define SSB_SPROM5_GPIOA               0x0076  /* Gen. Purpose IO # 0 and 1 */ 
    890958 #define  SSB_SPROM5_GPIOA_P0           0x00FF  /* Pin 0 */ 
    891 @@ -387,6 +432,23 @@ 
     959@@ -387,6 +432,56 @@ 
    892960 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    893961 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    910978+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    911979+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     980+ 
     981+/* There are 4 blocks with power info sharing the same layout */ 
     982+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     983+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     984+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     985+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     986+ 
     987+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     988+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     989+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     990+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     991+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     992+#define SSB_SROM8_2G_PA_1              0x04 
     993+#define SSB_SROM8_2G_PA_2              0x06 
     994+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     995+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     996+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     997+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     998+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     999+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     1000+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     1001+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     1002+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     1003+#define SSB_SROM8_5G_PA_1              0x0E 
     1004+#define SSB_SROM8_5G_PA_2              0x10 
     1005+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     1006+#define SSB_SROM8_5GL_PA_1             0x14 
     1007+#define SSB_SROM8_5GL_PA_2             0x16 
     1008+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     1009+#define SSB_SROM8_5GH_PA_1             0x1A 
     1010+#define SSB_SROM8_5GH_PA_2             0x1C 
     1011+ 
     1012+/* TODO: Make it deprecated */ 
    9121013 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    9131014 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    9141015 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    915 @@ -417,6 +479,46 @@ 
     1016@@ -411,12 +506,53 @@ 
     1017 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     1018 #define SSB_SPROM8_PA1HIB1             0x00DA 
     1019 #define SSB_SPROM8_PA1HIB2             0x00DC 
     1020+ 
     1021 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     1022 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     1023 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
    9161024 #define SSB_SPROM8_OFDM5GLPO           0x014A  /* 5.2GHz OFDM power offset */ 
    9171025 #define SSB_SPROM8_OFDM5GHPO           0x014E  /* 5.8GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-2.6.38/020-ssb_update.patch

    r29574 r30345  
    327327        SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A, 
    328328             SSB_SPROM4_ANTAVAIL_A_SHIFT); 
    329 @@ -603,6 +607,29 @@ static void sprom_extract_r8(struct ssb_ 
     329@@ -519,7 +523,13 @@ static void sprom_extract_r45(struct ssb 
     330 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     331 { 
     332        int i; 
     333-       u16 v; 
     334+       u16 v, o; 
     335+       u16 pwr_info_offset[] = { 
     336+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     337+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     338+       }; 
     339+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     340+                       ARRAY_SIZE(out->core_pwr_info)); 
     341  
     342        /* extract the MAC address */ 
     343        for (i = 0; i < 3; i++) { 
     344@@ -603,6 +613,61 @@ static void sprom_extract_r8(struct ssb_ 
    330345        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    331346               sizeof(out->antenna_gain.ghz5)); 
    332347  
     348+       /* Extract cores power info info */ 
     349+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     350+               o = pwr_info_offset[i]; 
     351+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     352+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     353+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     354+                       SSB_SPROM8_2G_MAXP, 0); 
     355+ 
     356+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     357+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     358+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     359+ 
     360+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     361+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     362+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     363+                       SSB_SPROM8_5G_MAXP, 0); 
     364+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     365+                       SSB_SPROM8_5GH_MAXP, 0); 
     366+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     367+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     368+ 
     369+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     370+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     371+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     372+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     373+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     374+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     375+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     376+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     377+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     378+       } 
     379+ 
    333380+       /* Extract FEM info */ 
    334381+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    357404  
    358405        /* TODO - get remaining rev 8 stuff needed */ 
    359 @@ -641,7 +668,7 @@ static int sprom_extract(struct ssb_bus 
     406@@ -641,7 +706,7 @@ static int sprom_extract(struct ssb_bus  
    360407                break; 
    361408        default: 
     
    366413                out->revision = 1; 
    367414                sprom_extract_r123(out, in); 
    368 @@ -658,7 +685,6 @@ static int sprom_extract(struct ssb_bus 
     415@@ -658,7 +723,6 @@ static int sprom_extract(struct ssb_bus  
    369416 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    370417                             struct ssb_sprom *sprom) 
     
    374421        u16 *buf; 
    375422  
    376 @@ -666,7 +692,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
     423@@ -666,7 +730,7 @@ static int ssb_pci_sprom_get(struct ssb_ 
    377424                ssb_printk(KERN_ERR PFX "No SPROM available!\n"); 
    378425                return -ENODEV; 
     
    383430                 * get SPROM offset: SSB_SPROM_BASE1 except for 
    384431                 * chipcommon rev >= 31 or chip ID is 0x4312 and 
    385 @@ -703,10 +729,17 @@ static int ssb_pci_sprom_get(struct ssb_ 
     432@@ -703,10 +767,17 @@ static int ssb_pci_sprom_get(struct ssb_ 
    386433                if (err) { 
    387434                        /* All CRC attempts failed. 
     
    405452                                goto out_free; 
    406453                        } 
    407 @@ -724,12 +757,9 @@ out_free: 
     454@@ -724,12 +795,9 @@ out_free: 
    408455 static void ssb_pci_get_boardinfo(struct ssb_bus *bus, 
    409456                                  struct ssb_boardinfo *bi) 
     
    461508 #define SSB_SPROM5_GPIOA               0x0076  /* Gen. Purpose IO # 0 and 1 */ 
    462509 #define  SSB_SPROM5_GPIOA_P0           0x00FF  /* Pin 0 */ 
    463 @@ -427,6 +432,23 @@ 
     510@@ -427,6 +432,56 @@ 
    464511 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    465512 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    482529+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    483530+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     531+ 
     532+/* There are 4 blocks with power info sharing the same layout */ 
     533+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     534+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     535+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     536+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     537+ 
     538+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     539+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     540+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     541+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     542+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     543+#define SSB_SROM8_2G_PA_1              0x04 
     544+#define SSB_SROM8_2G_PA_2              0x06 
     545+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     546+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     547+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     548+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     549+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     550+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     551+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     552+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     553+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     554+#define SSB_SROM8_5G_PA_1              0x0E 
     555+#define SSB_SROM8_5G_PA_2              0x10 
     556+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     557+#define SSB_SROM8_5GL_PA_1             0x14 
     558+#define SSB_SROM8_5GL_PA_2             0x16 
     559+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     560+#define SSB_SROM8_5GH_PA_1             0x1A 
     561+#define SSB_SROM8_5GH_PA_2             0x1C 
     562+ 
     563+/* TODO: Make it deprecated */ 
    484564 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    485565 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    486566 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    487 @@ -457,6 +479,46 @@ 
     567@@ -451,12 +506,53 @@ 
     568 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     569 #define SSB_SPROM8_PA1HIB1             0x00DA 
     570 #define SSB_SPROM8_PA1HIB2             0x00DC 
     571+ 
     572 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     573 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     574 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
    488575 #define SSB_SPROM8_OFDM5GLPO           0x014A  /* 5.2GHz OFDM power offset */ 
    489576 #define SSB_SPROM8_OFDM5GHPO           0x014E  /* 5.8GHz OFDM power offset */ 
     
    12491336--- a/include/linux/ssb/ssb.h 
    12501337+++ b/include/linux/ssb/ssb.h 
    1251 @@ -25,8 +25,10 @@ struct ssb_sprom { 
     1338@@ -16,6 +16,12 @@ struct pcmcia_device; 
     1339 struct ssb_bus; 
     1340 struct ssb_driver; 
     1341  
     1342+struct ssb_sprom_core_pwr_info { 
     1343+       u8 itssi_2g, itssi_5g; 
     1344+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     1345+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     1346+}; 
     1347+ 
     1348 struct ssb_sprom { 
     1349        u8 revision; 
     1350        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     1351@@ -25,8 +31,10 @@ struct ssb_sprom { 
    12521352        u8 et1phyaddr;          /* MII address for enet1 */ 
    12531353        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    12611361        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
    12621362        u16 pa0b0; 
    1263 @@ -92,6 +94,15 @@ struct ssb_sprom { 
     1363@@ -80,6 +88,8 @@ struct ssb_sprom { 
     1364        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     1365        /* TODO store board flags in a single u64 */ 
     1366  
     1367+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     1368+ 
     1369        /* Antenna gain values for up to 4 antennas 
     1370         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     1371         * loss in the connectors is bigger than the gain. */ 
     1372@@ -92,6 +102,15 @@ struct ssb_sprom { 
    12641373                } ghz5;         /* 5GHz band */ 
    12651374        } antenna_gain; 
     
    12771386 }; 
    12781387  
    1279 @@ -99,7 +110,7 @@ struct ssb_sprom { 
     1388@@ -99,7 +118,7 @@ struct ssb_sprom { 
    12801389 struct ssb_boardinfo { 
    12811390        u16 vendor; 
     
    12861395  
    12871396  
    1288 @@ -229,10 +240,9 @@ struct ssb_driver { 
     1397@@ -229,10 +248,9 @@ struct ssb_driver { 
    12891398 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    12901399  
     
    13001409  
    13011410  
    1302 @@ -308,7 +318,7 @@ struct ssb_bus { 
     1411@@ -308,7 +326,7 @@ struct ssb_bus { 
    13031412  
    13041413        /* ID information about the Chip. */ 
     
    13091418        u16 sprom_size;         /* number of words in sprom */ 
    13101419        u8 chip_package; 
    1311 @@ -404,7 +414,9 @@ extern bool ssb_is_sprom_available(struc 
     1420@@ -404,7 +422,9 @@ extern bool ssb_is_sprom_available(struc 
    13121421  
    13131422 /* Set a fallback SPROM. 
     
    13201429 /* Suspend a SSB bus. 
    13211430  * Call this from the parent bus suspend routine. */ 
    1322 @@ -518,6 +530,7 @@ extern int ssb_bus_may_powerdown(struct 
     1431@@ -518,6 +538,7 @@ extern int ssb_bus_may_powerdown(struct  
    13231432  * Otherwise static always-on powercontrol will be used. */ 
    13241433 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
  • trunk/target/linux/generic/patches-2.6.39/020-ssb_update.patch

    r29574 r30345  
    788788  * Copyright (C) 2005 Stefano Brivio <st3@riseup.net> 
    789789  * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org> 
    790 @@ -607,6 +607,29 @@ static void sprom_extract_r8(struct ssb_ 
     790@@ -523,7 +523,13 @@ static void sprom_extract_r45(struct ssb 
     791 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     792 { 
     793        int i; 
     794-       u16 v; 
     795+       u16 v, o; 
     796+       u16 pwr_info_offset[] = { 
     797+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     798+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     799+       }; 
     800+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     801+                       ARRAY_SIZE(out->core_pwr_info)); 
     802  
     803        /* extract the MAC address */ 
     804        for (i = 0; i < 3; i++) { 
     805@@ -607,6 +613,61 @@ static void sprom_extract_r8(struct ssb_ 
    791806        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    792807               sizeof(out->antenna_gain.ghz5)); 
    793808  
     809+       /* Extract cores power info info */ 
     810+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     811+               o = pwr_info_offset[i]; 
     812+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     813+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     814+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     815+                       SSB_SPROM8_2G_MAXP, 0); 
     816+ 
     817+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     818+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     819+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     820+ 
     821+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     822+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     823+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     824+                       SSB_SPROM8_5G_MAXP, 0); 
     825+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     826+                       SSB_SPROM8_5GH_MAXP, 0); 
     827+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     828+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     829+ 
     830+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     831+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     832+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     833+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     834+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     835+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     836+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     837+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     838+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     839+       } 
     840+ 
    794841+       /* Extract FEM info */ 
    795842+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    818865  
    819866        /* TODO - get remaining rev 8 stuff needed */ 
    820 @@ -662,7 +685,6 @@ static int sprom_extract(struct ssb_bus 
     867@@ -662,7 +723,6 @@ static int sprom_extract(struct ssb_bus  
    821868 static int ssb_pci_sprom_get(struct ssb_bus *bus, 
    822869                             struct ssb_sprom *sprom) 
     
    826873        u16 *buf; 
    827874  
    828 @@ -707,10 +729,17 @@ static int ssb_pci_sprom_get(struct ssb_ 
     875@@ -707,10 +767,17 @@ static int ssb_pci_sprom_get(struct ssb_ 
    829876                if (err) { 
    830877                        /* All CRC attempts failed. 
     
    848895                                goto out_free; 
    849896                        } 
    850 @@ -728,12 +757,9 @@ out_free: 
     897@@ -728,12 +795,9 @@ out_free: 
    851898 static void ssb_pci_get_boardinfo(struct ssb_bus *bus, 
    852899                                  struct ssb_boardinfo *bi) 
     
    10251072--- a/include/linux/ssb/ssb.h 
    10261073+++ b/include/linux/ssb/ssb.h 
    1027 @@ -25,8 +25,10 @@ struct ssb_sprom { 
     1074@@ -16,6 +16,12 @@ struct pcmcia_device; 
     1075 struct ssb_bus; 
     1076 struct ssb_driver; 
     1077  
     1078+struct ssb_sprom_core_pwr_info { 
     1079+       u8 itssi_2g, itssi_5g; 
     1080+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     1081+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     1082+}; 
     1083+ 
     1084 struct ssb_sprom { 
     1085        u8 revision; 
     1086        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     1087@@ -25,8 +31,10 @@ struct ssb_sprom { 
    10281088        u8 et1phyaddr;          /* MII address for enet1 */ 
    10291089        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    10371097        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
    10381098        u16 pa0b0; 
    1039 @@ -92,6 +94,15 @@ struct ssb_sprom { 
     1099@@ -80,6 +88,8 @@ struct ssb_sprom { 
     1100        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     1101        /* TODO store board flags in a single u64 */ 
     1102  
     1103+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     1104+ 
     1105        /* Antenna gain values for up to 4 antennas 
     1106         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     1107         * loss in the connectors is bigger than the gain. */ 
     1108@@ -92,6 +102,15 @@ struct ssb_sprom { 
    10401109                } ghz5;         /* 5GHz band */ 
    10411110        } antenna_gain; 
     
    10531122 }; 
    10541123  
    1055 @@ -99,7 +110,7 @@ struct ssb_sprom { 
     1124@@ -99,7 +118,7 @@ struct ssb_sprom { 
    10561125 struct ssb_boardinfo { 
    10571126        u16 vendor; 
     
    10621131  
    10631132  
    1064 @@ -229,10 +240,9 @@ struct ssb_driver { 
     1133@@ -229,10 +248,9 @@ struct ssb_driver { 
    10651134 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    10661135  
     
    10761145  
    10771146  
    1078 @@ -308,7 +318,7 @@ struct ssb_bus { 
     1147@@ -308,7 +326,7 @@ struct ssb_bus { 
    10791148  
    10801149        /* ID information about the Chip. */ 
     
    10851154        u16 sprom_size;         /* number of words in sprom */ 
    10861155        u8 chip_package; 
    1087 @@ -404,7 +414,9 @@ extern bool ssb_is_sprom_available(struc 
     1156@@ -404,7 +422,9 @@ extern bool ssb_is_sprom_available(struc 
    10881157  
    10891158 /* Set a fallback SPROM. 
     
    10961165 /* Suspend a SSB bus. 
    10971166  * Call this from the parent bus suspend routine. */ 
    1098 @@ -518,6 +530,7 @@ extern int ssb_bus_may_powerdown(struct 
     1167@@ -518,6 +538,7 @@ extern int ssb_bus_may_powerdown(struct  
    10991168  * Otherwise static always-on powercontrol will be used. */ 
    11001169 extern int ssb_bus_powerup(struct ssb_bus *bus, bool dynamic_pctl); 
     
    11581227 #define  SSB_TMSLOW_CLOCK      0x00010000 /* Clock Enable */ 
    11591228 #define  SSB_TMSLOW_FGC                0x00020000 /* Force Gated Clocks On */ 
    1160 @@ -432,6 +432,23 @@ 
     1229@@ -432,6 +432,56 @@ 
    11611230 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    11621231 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    11791248+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    11801249+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     1250+ 
     1251+/* There are 4 blocks with power info sharing the same layout */ 
     1252+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     1253+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     1254+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     1255+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     1256+ 
     1257+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     1258+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     1259+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     1260+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     1261+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     1262+#define SSB_SROM8_2G_PA_1              0x04 
     1263+#define SSB_SROM8_2G_PA_2              0x06 
     1264+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     1265+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     1266+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     1267+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     1268+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     1269+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     1270+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     1271+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     1272+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     1273+#define SSB_SROM8_5G_PA_1              0x0E 
     1274+#define SSB_SROM8_5G_PA_2              0x10 
     1275+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     1276+#define SSB_SROM8_5GL_PA_1             0x14 
     1277+#define SSB_SROM8_5GL_PA_2             0x16 
     1278+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     1279+#define SSB_SROM8_5GH_PA_1             0x1A 
     1280+#define SSB_SROM8_5GH_PA_2             0x1C 
     1281+ 
     1282+/* TODO: Make it deprecated */ 
    11811283 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    11821284 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    11831285 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    1184 @@ -462,6 +479,46 @@ 
     1286@@ -456,12 +506,53 @@ 
     1287 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     1288 #define SSB_SPROM8_PA1HIB1             0x00DA 
     1289 #define SSB_SPROM8_PA1HIB2             0x00DC 
     1290+ 
     1291 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     1292 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     1293 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
    11851294 #define SSB_SPROM8_OFDM5GLPO           0x014A  /* 5.2GHz OFDM power offset */ 
    11861295 #define SSB_SPROM8_OFDM5GHPO           0x014E  /* 5.8GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-3.0/020-ssb_update.patch

    r29725 r30345  
    323323  * Copyright (C) 2005 Stefano Brivio <st3@riseup.net> 
    324324  * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org> 
    325 @@ -607,6 +607,29 @@ static void sprom_extract_r8(struct ssb_ 
     325@@ -523,7 +523,13 @@ static void sprom_extract_r45(struct ssb 
     326 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     327 { 
     328        int i; 
     329-       u16 v; 
     330+       u16 v, o; 
     331+       u16 pwr_info_offset[] = { 
     332+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     333+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     334+       }; 
     335+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     336+                       ARRAY_SIZE(out->core_pwr_info)); 
     337  
     338        /* extract the MAC address */ 
     339        for (i = 0; i < 3; i++) { 
     340@@ -607,6 +613,61 @@ static void sprom_extract_r8(struct ssb_ 
    326341        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    327342               sizeof(out->antenna_gain.ghz5)); 
    328343  
     344+       /* Extract cores power info info */ 
     345+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     346+               o = pwr_info_offset[i]; 
     347+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     348+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     349+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     350+                       SSB_SPROM8_2G_MAXP, 0); 
     351+ 
     352+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     353+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     354+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     355+ 
     356+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     357+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     358+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     359+                       SSB_SPROM8_5G_MAXP, 0); 
     360+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     361+                       SSB_SPROM8_5GH_MAXP, 0); 
     362+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     363+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     364+ 
     365+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     366+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     367+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     368+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     369+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     370+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     371+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     372+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     373+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     374+       } 
     375+ 
    329376+       /* Extract FEM info */ 
    330377+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    353400  
    354401        /* TODO - get remaining rev 8 stuff needed */ 
    355 @@ -734,12 +757,9 @@ out_free: 
     402@@ -734,12 +795,9 @@ out_free: 
    356403 static void ssb_pci_get_boardinfo(struct ssb_bus *bus, 
    357404                                  struct ssb_boardinfo *bi) 
     
    456503--- a/include/linux/ssb/ssb.h 
    457504+++ b/include/linux/ssb/ssb.h 
    458 @@ -25,8 +25,10 @@ struct ssb_sprom { 
     505@@ -16,6 +16,12 @@ struct pcmcia_device; 
     506 struct ssb_bus; 
     507 struct ssb_driver; 
     508  
     509+struct ssb_sprom_core_pwr_info { 
     510+       u8 itssi_2g, itssi_5g; 
     511+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     512+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     513+}; 
     514+ 
     515 struct ssb_sprom { 
     516        u8 revision; 
     517        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     518@@ -25,8 +31,10 @@ struct ssb_sprom { 
    459519        u8 et1phyaddr;          /* MII address for enet1 */ 
    460520        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    468528        u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */ 
    469529        u16 pa0b0; 
    470 @@ -92,6 +94,15 @@ struct ssb_sprom { 
     530@@ -80,6 +88,8 @@ struct ssb_sprom { 
     531        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     532        /* TODO store board flags in a single u64 */ 
     533  
     534+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     535+ 
     536        /* Antenna gain values for up to 4 antennas 
     537         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     538         * loss in the connectors is bigger than the gain. */ 
     539@@ -92,6 +102,15 @@ struct ssb_sprom { 
    471540                } ghz5;         /* 5GHz band */ 
    472541        } antenna_gain; 
     
    484553 }; 
    485554  
    486 @@ -99,7 +110,7 @@ struct ssb_sprom { 
     555@@ -99,7 +118,7 @@ struct ssb_sprom { 
    487556 struct ssb_boardinfo { 
    488557        u16 vendor; 
     
    493562  
    494563  
    495 @@ -229,10 +240,9 @@ struct ssb_driver { 
     564@@ -229,10 +248,9 @@ struct ssb_driver { 
    496565 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    497566  
     
    520589--- a/include/linux/ssb/ssb_regs.h 
    521590+++ b/include/linux/ssb/ssb_regs.h 
    522 @@ -432,6 +432,23 @@ 
     591@@ -432,6 +432,56 @@ 
    523592 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    524593 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    541610+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    542611+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     612+ 
     613+/* There are 4 blocks with power info sharing the same layout */ 
     614+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     615+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     616+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     617+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     618+ 
     619+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     620+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     621+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     622+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     623+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     624+#define SSB_SROM8_2G_PA_1              0x04 
     625+#define SSB_SROM8_2G_PA_2              0x06 
     626+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     627+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     628+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     629+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     630+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     631+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     632+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     633+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     634+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     635+#define SSB_SROM8_5G_PA_1              0x0E 
     636+#define SSB_SROM8_5G_PA_2              0x10 
     637+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     638+#define SSB_SROM8_5GL_PA_1             0x14 
     639+#define SSB_SROM8_5GL_PA_2             0x16 
     640+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     641+#define SSB_SROM8_5GH_PA_1             0x1A 
     642+#define SSB_SROM8_5GH_PA_2             0x1C 
     643+ 
     644+/* TODO: Make it deprecated */ 
    543645 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    544646 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    545647 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    546 @@ -462,6 +479,46 @@ 
     648@@ -456,12 +506,53 @@ 
     649 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     650 #define SSB_SPROM8_PA1HIB1             0x00DA 
     651 #define SSB_SPROM8_PA1HIB2             0x00DC 
     652+ 
     653 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     654 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     655 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
    547656 #define SSB_SPROM8_OFDM5GLPO           0x014A  /* 5.2GHz OFDM power offset */ 
    548657 #define SSB_SPROM8_OFDM5GHPO           0x014E  /* 5.8GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-3.1/020-ssb_update.patch

    r29726 r30345  
    5959--- a/drivers/ssb/pci.c 
    6060+++ b/drivers/ssb/pci.c 
    61 @@ -607,6 +607,29 @@ static void sprom_extract_r8(struct ssb_ 
     61@@ -523,7 +523,13 @@ static void sprom_extract_r45(struct ssb 
     62 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     63 { 
     64        int i; 
     65-       u16 v; 
     66+       u16 v, o; 
     67+       u16 pwr_info_offset[] = { 
     68+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     69+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     70+       }; 
     71+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     72+                       ARRAY_SIZE(out->core_pwr_info)); 
     73  
     74        /* extract the MAC address */ 
     75        for (i = 0; i < 3; i++) { 
     76@@ -607,6 +613,61 @@ static void sprom_extract_r8(struct ssb_ 
    6277        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    6378               sizeof(out->antenna_gain.ghz5)); 
    6479  
     80+       /* Extract cores power info info */ 
     81+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     82+               o = pwr_info_offset[i]; 
     83+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     84+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     85+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     86+                       SSB_SPROM8_2G_MAXP, 0); 
     87+ 
     88+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     89+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     90+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     91+ 
     92+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     93+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     94+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     95+                       SSB_SPROM8_5G_MAXP, 0); 
     96+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     97+                       SSB_SPROM8_5GH_MAXP, 0); 
     98+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     99+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     100+ 
     101+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     102+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     103+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     104+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     105+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     106+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     107+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     108+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     109+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     110+       } 
     111+ 
    65112+       /* Extract FEM info */ 
    66113+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    91138--- a/include/linux/ssb/ssb.h 
    92139+++ b/include/linux/ssb/ssb.h 
    93 @@ -25,7 +25,7 @@ struct ssb_sprom { 
     140@@ -16,6 +16,12 @@ struct pcmcia_device; 
     141 struct ssb_bus; 
     142 struct ssb_driver; 
     143  
     144+struct ssb_sprom_core_pwr_info { 
     145+       u8 itssi_2g, itssi_5g; 
     146+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     147+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     148+}; 
     149+ 
     150 struct ssb_sprom { 
     151        u8 revision; 
     152        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     153@@ -25,7 +31,7 @@ struct ssb_sprom { 
    94154        u8 et1phyaddr;          /* MII address for enet1 */ 
    95155        u8 et0mdcport;          /* MDIO for enet0 */ 
     
    100160        u16 leddc_on_time;      /* LED Powersave Duty Cycle On Count */ 
    101161        u16 leddc_off_time;     /* LED Powersave Duty Cycle Off Count */ 
    102 @@ -94,6 +94,15 @@ struct ssb_sprom { 
     162@@ -82,6 +88,8 @@ struct ssb_sprom { 
     163        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     164        /* TODO store board flags in a single u64 */ 
     165  
     166+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     167+ 
     168        /* Antenna gain values for up to 4 antennas 
     169         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     170         * loss in the connectors is bigger than the gain. */ 
     171@@ -94,6 +102,15 @@ struct ssb_sprom { 
    103172                } ghz5;         /* 5GHz band */ 
    104173        } antenna_gain; 
     
    116185 }; 
    117186  
    118 @@ -231,10 +240,9 @@ struct ssb_driver { 
     187@@ -231,10 +248,9 @@ struct ssb_driver { 
    119188 #define drv_to_ssb_drv(_drv) container_of(_drv, struct ssb_driver, drv) 
    120189  
     
    132201--- a/include/linux/ssb/ssb_regs.h 
    133202+++ b/include/linux/ssb/ssb_regs.h 
    134 @@ -432,6 +432,23 @@ 
     203@@ -432,6 +432,56 @@ 
    135204 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    136205 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    153222+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    154223+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     224+ 
     225+/* There are 4 blocks with power info sharing the same layout */ 
     226+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     227+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     228+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     229+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     230+ 
     231+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     232+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     233+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     234+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     235+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     236+#define SSB_SROM8_2G_PA_1              0x04 
     237+#define SSB_SROM8_2G_PA_2              0x06 
     238+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     239+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     240+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     241+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     242+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     243+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     244+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     245+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     246+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     247+#define SSB_SROM8_5G_PA_1              0x0E 
     248+#define SSB_SROM8_5G_PA_2              0x10 
     249+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     250+#define SSB_SROM8_5GL_PA_1             0x14 
     251+#define SSB_SROM8_5GL_PA_2             0x16 
     252+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     253+#define SSB_SROM8_5GH_PA_1             0x1A 
     254+#define SSB_SROM8_5GH_PA_2             0x1C 
     255+ 
     256+/* TODO: Make it deprecated */ 
    155257 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    156258 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    157259 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    158 @@ -462,6 +479,46 @@ 
     260@@ -456,12 +506,53 @@ 
     261 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     262 #define SSB_SPROM8_PA1HIB1             0x00DA 
     263 #define SSB_SPROM8_PA1HIB2             0x00DC 
     264+ 
     265 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     266 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     267 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
    159268 #define SSB_SPROM8_OFDM5GLPO           0x014A  /* 5.2GHz OFDM power offset */ 
    160269 #define SSB_SPROM8_OFDM5GHPO           0x014E  /* 5.8GHz OFDM power offset */ 
  • trunk/target/linux/generic/patches-3.2/020-ssb_update.patch

    r29730 r30345  
    11--- a/drivers/ssb/pci.c 
    22+++ b/drivers/ssb/pci.c 
    3 @@ -607,6 +607,29 @@ static void sprom_extract_r8(struct ssb_ 
     3@@ -523,7 +523,13 @@ static void sprom_extract_r45(struct ssb 
     4 static void sprom_extract_r8(struct ssb_sprom *out, const u16 *in) 
     5 { 
     6        int i; 
     7-       u16 v; 
     8+       u16 v, o; 
     9+       u16 pwr_info_offset[] = { 
     10+               SSB_SROM8_PWR_INFO_CORE0, SSB_SROM8_PWR_INFO_CORE1, 
     11+               SSB_SROM8_PWR_INFO_CORE2, SSB_SROM8_PWR_INFO_CORE3 
     12+       }; 
     13+       BUILD_BUG_ON(ARRAY_SIZE(pwr_info_offset) != 
     14+                       ARRAY_SIZE(out->core_pwr_info)); 
     15  
     16        /* extract the MAC address */ 
     17        for (i = 0; i < 3; i++) { 
     18@@ -607,6 +613,61 @@ static void sprom_extract_r8(struct ssb_ 
    419        memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24, 
    520               sizeof(out->antenna_gain.ghz5)); 
    621  
     22+       /* Extract cores power info info */ 
     23+       for (i = 0; i < ARRAY_SIZE(pwr_info_offset); i++) { 
     24+               o = pwr_info_offset[i]; 
     25+               SPEX(core_pwr_info[i].itssi_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     26+                       SSB_SPROM8_2G_ITSSI, SSB_SPROM8_2G_ITSSI_SHIFT); 
     27+               SPEX(core_pwr_info[i].maxpwr_2g, o + SSB_SROM8_2G_MAXP_ITSSI, 
     28+                       SSB_SPROM8_2G_MAXP, 0); 
     29+ 
     30+               SPEX(core_pwr_info[i].pa_2g[0], o + SSB_SROM8_2G_PA_0, ~0, 0); 
     31+               SPEX(core_pwr_info[i].pa_2g[1], o + SSB_SROM8_2G_PA_1, ~0, 0); 
     32+               SPEX(core_pwr_info[i].pa_2g[2], o + SSB_SROM8_2G_PA_2, ~0, 0); 
     33+ 
     34+               SPEX(core_pwr_info[i].itssi_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     35+                       SSB_SPROM8_5G_ITSSI, SSB_SPROM8_5G_ITSSI_SHIFT); 
     36+               SPEX(core_pwr_info[i].maxpwr_5g, o + SSB_SROM8_5G_MAXP_ITSSI, 
     37+                       SSB_SPROM8_5G_MAXP, 0); 
     38+               SPEX(core_pwr_info[i].maxpwr_5gh, o + SSB_SPROM8_5GHL_MAXP, 
     39+                       SSB_SPROM8_5GH_MAXP, 0); 
     40+               SPEX(core_pwr_info[i].maxpwr_5gl, o + SSB_SPROM8_5GHL_MAXP, 
     41+                       SSB_SPROM8_5GL_MAXP, SSB_SPROM8_5GL_MAXP_SHIFT); 
     42+ 
     43+               SPEX(core_pwr_info[i].pa_5gl[0], o + SSB_SROM8_5GL_PA_0, ~0, 0); 
     44+               SPEX(core_pwr_info[i].pa_5gl[1], o + SSB_SROM8_5GL_PA_1, ~0, 0); 
     45+               SPEX(core_pwr_info[i].pa_5gl[2], o + SSB_SROM8_5GL_PA_2, ~0, 0); 
     46+               SPEX(core_pwr_info[i].pa_5g[0], o + SSB_SROM8_5G_PA_0, ~0, 0); 
     47+               SPEX(core_pwr_info[i].pa_5g[1], o + SSB_SROM8_5G_PA_1, ~0, 0); 
     48+               SPEX(core_pwr_info[i].pa_5g[2], o + SSB_SROM8_5G_PA_2, ~0, 0); 
     49+               SPEX(core_pwr_info[i].pa_5gh[0], o + SSB_SROM8_5GH_PA_0, ~0, 0); 
     50+               SPEX(core_pwr_info[i].pa_5gh[1], o + SSB_SROM8_5GH_PA_1, ~0, 0); 
     51+               SPEX(core_pwr_info[i].pa_5gh[2], o + SSB_SROM8_5GH_PA_2, ~0, 0); 
     52+       } 
     53+ 
    754+       /* Extract FEM info */ 
    855+       SPEX(fem.ghz2.tssipos, SSB_SPROM8_FEM2G, 
     
    3380--- a/include/linux/ssb/ssb.h 
    3481+++ b/include/linux/ssb/ssb.h 
    35 @@ -94,6 +94,15 @@ struct ssb_sprom { 
     82@@ -16,6 +16,12 @@ struct pcmcia_device; 
     83 struct ssb_bus; 
     84 struct ssb_driver; 
     85  
     86+struct ssb_sprom_core_pwr_info { 
     87+       u8 itssi_2g, itssi_5g; 
     88+       u8 maxpwr_2g, maxpwr_5gl, maxpwr_5g, maxpwr_5gh; 
     89+       u16 pa_2g[3], pa_5gl[3], pa_5g[3], pa_5gh[3]; 
     90+}; 
     91+ 
     92 struct ssb_sprom { 
     93        u8 revision; 
     94        u8 il0mac[6];           /* MAC address for 802.11b/g */ 
     95@@ -82,6 +88,8 @@ struct ssb_sprom { 
     96        u16 boardflags2_hi;     /* Board flags (bits 48-63) */ 
     97        /* TODO store board flags in a single u64 */ 
     98  
     99+       struct ssb_sprom_core_pwr_info core_pwr_info[4]; 
     100+ 
     101        /* Antenna gain values for up to 4 antennas 
     102         * on each band. Values in dBm/4 (Q5.2). Negative gain means the 
     103         * loss in the connectors is bigger than the gain. */ 
     104@@ -94,6 +102,15 @@ struct ssb_sprom { 
    36105                } ghz5;         /* 5GHz band */ 
    37106        } antenna_gain; 
     
    51120--- a/include/linux/ssb/ssb_regs.h 
    52121+++ b/include/linux/ssb/ssb_regs.h 
    53 @@ -432,6 +432,23 @@ 
     122@@ -432,6 +432,56 @@ 
    54123 #define  SSB_SPROM8_RXPO2G             0x00FF  /* 2GHz RX power offset */ 
    55124 #define  SSB_SPROM8_RXPO5G             0xFF00  /* 5GHz RX power offset */ 
     
    72141+#define SSB_SPROM8_FOC_HWIQ_IQSWP      0x00B8 
    73142+#define SSB_SPROM8_PHYCAL_TEMPDELTA    0x00BA 
     143+ 
     144+/* There are 4 blocks with power info sharing the same layout */ 
     145+#define SSB_SROM8_PWR_INFO_CORE0       0x00C0 
     146+#define SSB_SROM8_PWR_INFO_CORE1       0x00E0 
     147+#define SSB_SROM8_PWR_INFO_CORE2       0x0100 
     148+#define SSB_SROM8_PWR_INFO_CORE3       0x0120 
     149+ 
     150+#define SSB_SROM8_2G_MAXP_ITSSI                0x00 
     151+#define  SSB_SPROM8_2G_MAXP            0x00FF 
     152+#define  SSB_SPROM8_2G_ITSSI           0xFF00 
     153+#define  SSB_SPROM8_2G_ITSSI_SHIFT     8 
     154+#define SSB_SROM8_2G_PA_0              0x02    /* 2GHz power amp settings */ 
     155+#define SSB_SROM8_2G_PA_1              0x04 
     156+#define SSB_SROM8_2G_PA_2              0x06 
     157+#define SSB_SROM8_5G_MAXP_ITSSI                0x08    /* 5GHz ITSSI and 5.3GHz Max Power */ 
     158+#define  SSB_SPROM8_5G_MAXP            0x00FF 
     159+#define  SSB_SPROM8_5G_ITSSI           0xFF00 
     160+#define  SSB_SPROM8_5G_ITSSI_SHIFT     8 
     161+#define SSB_SPROM8_5GHL_MAXP           0x0A    /* 5.2GHz and 5.8GHz Max Power */ 
     162+#define  SSB_SPROM8_5GH_MAXP           0x00FF 
     163+#define  SSB_SPROM8_5GL_MAXP           0xFF00 
     164+#define  SSB_SPROM8_5GL_MAXP_SHIFT     8 
     165+#define SSB_SROM8_5G_PA_0              0x0C    /* 5.3GHz power amp settings */ 
     166+#define SSB_SROM8_5G_PA_1              0x0E 
     167+#define SSB_SROM8_5G_PA_2              0x10 
     168+#define SSB_SROM8_5GL_PA_0             0x12    /* 5.2GHz power amp settings */ 
     169+#define SSB_SROM8_5GL_PA_1             0x14 
     170+#define SSB_SROM8_5GL_PA_2             0x16 
     171+#define SSB_SROM8_5GH_PA_0             0x18    /* 5.8GHz power amp settings */ 
     172+#define SSB_SROM8_5GH_PA_1             0x1A 
     173+#define SSB_SROM8_5GH_PA_2             0x1C 
     174+ 
     175+/* TODO: Make it deprecated */ 
    74176 #define SSB_SPROM8_MAXP_BG             0x00C0  /* Max Power 2GHz in path 1 */ 
    75177 #define  SSB_SPROM8_MAXP_BG_MASK       0x00FF  /* Mask for Max Power 2GHz */ 
    76178 #define  SSB_SPROM8_ITSSI_BG           0xFF00  /* Mask for path 1 itssi_bg */ 
    77 @@ -464,6 +481,46 @@ 
    78   
    79  /* Values for boardflags_lo read from SPROM */ 
    80  #define SSB_BFL_BTCOEXIST              0x0001  /* implements Bluetooth coexistance */ 
     179@@ -456,6 +506,7 @@ 
     180 #define SSB_SPROM8_PA1HIB0             0x00D8  /* 5.8GHz power amp settings */ 
     181 #define SSB_SPROM8_PA1HIB1             0x00DA 
     182 #define SSB_SPROM8_PA1HIB2             0x00DC 
     183+ 
     184 #define SSB_SPROM8_CCK2GPO             0x0140  /* CCK power offset */ 
     185 #define SSB_SPROM8_OFDM2GPO            0x0142  /* 2.4GHz OFDM power offset */ 
     186 #define SSB_SPROM8_OFDM5GPO            0x0146  /* 5.3GHz OFDM power offset */ 
     187@@ -502,6 +553,46 @@ 
     188 #define SSB_BFL2_SPUR_WAR              0x0200  /* has a workaround for clock-harmonic spurs */ 
     189 #define SSB_BFL2_GPLL_WAR              0x0400  /* altenative G-band PLL settings implemented */ 
     190  
     191+/* Values for boardflags_lo read from SPROM */ 
     192+#define SSB_BFL_BTCOEXIST              0x0001  /* implements Bluetooth coexistance */ 
    81193+#define SSB_BFL_PACTRL                 0x0002  /* GPIO 9 controlling the PA */ 
    82194+#define SSB_BFL_AIRLINEMODE            0x0004  /* implements GPIO 13 radio disable indication */ 
     
    117229+#define SSB_BFL2_GPLL_WAR              0x0400  /* altenative G-band PLL settings implemented */ 
    118230+ 
    119 +/* Values for boardflags_lo read from SPROM */ 
    120 +#define SSB_BFL_BTCOEXIST              0x0001  /* implements Bluetooth coexistance */ 
    121  #define SSB_BFL_PACTRL                 0x0002  /* GPIO 9 controlling the PA */ 
    122  #define SSB_BFL_AIRLINEMODE            0x0004  /* implements GPIO 13 radio disable indication */ 
    123  #define SSB_BFL_RSSI                   0x0008  /* software calculates nrssi slope. */ 
     231 /* Values for SSB_SPROM1_BINF_CCODE */ 
     232 enum { 
     233        SSB_SPROM1CCODE_WORLD = 0, 
Note: See TracChangeset for help on using the changeset viewer.