Applied jogo corrections:
Renamed bcma.c to sprom_bcma.c
Changed sprom structures to a different format.
Compile only if BCMA enabled.

Signed-off-by: Álvaro Fernández Rojas <[email protected]>

Index: target/linux/brcm63xx/config-3.3
===================================================================
--- target/linux/brcm63xx/config-3.3    (revisión: 32793)
+++ target/linux/brcm63xx/config-3.3    (copia de trabajo)
@@ -15,6 +15,12 @@
 CONFIG_BCM63XX_ENET=y
 CONFIG_BCM63XX_PHY=y
 CONFIG_BCM63XX_WDT=y
+CONFIG_BCMA=y
+CONFIG_BCMA_DEBUG=y
+CONFIG_BCMA_DRIVER_MIPS=y
+CONFIG_BCMA_DRIVER_PCI_HOSTMODE=y
+CONFIG_BCMA_HOST_PCI=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
 CONFIG_BCMA_POSSIBLE=y
 CONFIG_BOARD_BCM963XX=y
 # CONFIG_BOARD_LIVEBOX is not set
Index: target/linux/brcm63xx/patches-3.3/901-bcm63xx_bcma_sprom.patch
===================================================================
--- target/linux/brcm63xx/patches-3.3/901-bcm63xx_bcma_sprom.patch      
(revisión: 0)
+++ target/linux/brcm63xx/patches-3.3/901-bcm63xx_bcma_sprom.patch      
(revisión: 0)
@@ -0,0 +1,873 @@
+--- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
++++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
+@@ -34,6 +34,7 @@
+ #include <bcm63xx_dev_spi.h>
+ #include <bcm63xx_dev_usb_ohci.h>
+ #include <bcm63xx_dev_usb_ehci.h>
++#include <bcm63xx_sprom_bcma.h>
+ #include <board_bcm963xx.h>
+ #include <bcm_tag.h>
+ #include <pci_ath9k_fixup.h>
+@@ -2934,6 +2935,14 @@ int __init board_register_devices(void)
+                       pr_err(PFX "failed to register fallback SPROM\n");
+       }
+ #endif
++
++#ifdef CONFIG_BCMA_HOST_PCI
++      if (!board.has_caldata) {
++              if 
(bcma_arch_register_fallback_sprom(&bcm63xx_get_bcma_fallback_sprom) < 0)
++                      pr_err(PFX "failed to register BCMA fallback SPROM\n");
++      }
++#endif
++
+       bcm63xx_hsspi_register();
+ 
+       bcm63xx_spi_register();
+--- a/arch/mips/bcm63xx/Makefile
++++ b/arch/mips/bcm63xx/Makefile
+@@ -3,5 +3,6 @@ obj-y          += clk.o cpu.o cs.o gpio.o irq.o
+                  dev-pcmcia.o dev-rng.o dev-spi.o dev-uart.o dev-usb-ehci.o \
+                  dev-usb-ohci.o dev-wdt.o pci-ath9k-fixup.o
+ obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
++obj-$(CONFIG_BCMA)                    += sprom_bcma.o
+ 
+ obj-y         += boards/
+--- /dev/null
++++ b/arch/mips/bcm63xx/sprom_bcma.c
+@@ -0,0 +1,65 @@
++/*
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file "COPYING" in the main directory of this archive
++ * for more details.
++ *
++ * Copyright (C) 2012 Álvaro Fernández Rojas <[email protected]>
++ */
++
++#include <linux/if_ether.h>
++
++#include <bcm63xx_sprom_bcma.h>
++#include <bcm63xx_sprom_bcma_defs.h>
++#include <bcm63xx_nvram.h>
++
++int bcm63xx_get_bcma_fallback_sprom(struct bcma_bus *bus, struct ssb_sprom 
*out)
++{
++      if (bus->hosttype == BCMA_HOSTTYPE_PCI) {
++              //Copy SPROM params.
++              switch(bus->chipinfo.id) {
++                      case BCMA_CHIP_ID_BCM4313:
++                              memcpy(out, &bcm4313_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM4331:
++                              memcpy(out, &bcm4331_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM6362:
++                              memcpy(out, &bcm6362_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM43224:
++                              memcpy(out, &bcm43224_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM43225:
++                              memcpy(out, &bcm43225_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM43227:
++                              memcpy(out, &bcm43227_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM43228:
++                              memcpy(out, &bcm43228_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      case BCMA_CHIP_ID_BCM43428:
++                              memcpy(out, &bcm43428_sprom, sizeof(struct 
ssb_sprom));
++                              break;
++                      default:
++                              printk("bcm63xx_sprom_bcma: unable to fill BCMA 
fallback SPROM for chip id 0x%x\n", bus->chipinfo.id);
++                              return -EINVAL;
++              }
++
++              printk("bcm63xx_sprom_bcma: filled BCMA SPROM for chip id 
0x%x\n", bus->chipinfo.id);
++
++              //Get MAC address.
++              if(bcm63xx_nvram_get_mac_address(out->il0mac)) {
++                      printk("bcm63xx_sprom_bcma: failed to get bcm63xx_nvram 
mac address\n");
++                      return -EINVAL;
++              }
++              memcpy(out->et0mac, out->il0mac, ETH_ALEN);
++              memcpy(out->et1mac, out->il0mac, ETH_ALEN);
++
++              return 0;
++      }
++      else {
++              printk("bcm63xx_sprom_bcma: unable to fill BCMA fallback SPROM 
for given hosttype\n");
++              return -EINVAL;
++      }
++}
+--- /dev/null
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_sprom_bcma_defs.h
+@@ -0,0 +1,757 @@
++#ifndef BCM63XX_BCMA_SPROMS_H_
++#define BCM63XX_BCMA_SPROMS_H_
++
++static struct ssb_sprom bcm4313_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1215,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .boardflags_lo          = 0x2a00,
++      .boardflags_hi          = 0x800,
++      .boardflags2_lo         = 0x800,
++      .core_pwr_info = {
++              {
++                      .maxpwr_2g      = 0x44,
++                      .pa_2g          = {0x1684,0xfd0d,0xff35,0xffff},
++              },
++              {
++                      .maxpwr_2g      = 0x48,
++                      .pa_2g          = {0xfed2,0x15d9,0xfac6,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .tr_iso         = 0x2,
++              },
++      },
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x44,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0xff,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0x88,
++      .rssismf2g                      = 0xa,
++      .rssismc2g                      = 0x7,
++      .pa0b0                          = 0x1684,
++      .pa0b1                          = 0xfd0d,
++      .pa0b2                          = 0xff35,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0xff,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x1,
++      .rxchain                        = 0x1,
++      .rawtempsense           = 0xa,
++      .measpower                      = 0x3e,
++      .tempsense_slope        = 0x98,
++      .tempsense_option       = 0x3,
++      .freqoffset_corr        = 0x8,
++      .tempthresh                     = 0x78,
++};
++
++static struct ssb_sprom bcm4331_sprom = {
++      .revision                       = 0x9,
++      .board_rev                      = 0x1104,
++      .txpid2g                        = {0x0,0x80,0x2,0x0},
++      .txpid5gl                       = {0x0,0x18,0x0,0x0},
++      .txpid5g                        = {0x0,0x0,0x30,0x1f},
++      .txpid5gh                       = {0x0,0x0,0xff,0xff},
++      .boardflags_lo          = 0x200,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x48,
++                      .pa_2g          = {0xfe56,0x16f2,0xfa44,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x3c,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x3c,
++                      .pa_5gl         = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5g          = {0xfe77,0x1657,0xfa75,0xffff},
++                      .pa_5gh         = {0xfe76,0x15da,0xfa85,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x48,
++                      .pa_2g          = {0xfe5c,0x16b5,0xfa56,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x3c,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x3c,
++                      .pa_5gl         = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5g          = {0xfe7c,0x169d,0xfa6b,0xffff},
++                      .pa_5gh         = {0xfe7a,0x1597,0xfa97,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x48,
++                      .pa_2g          = {0xfe68,0x1734,0xfa46,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x3c,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x3c,
++                      .pa_5gl         = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5g          = {0xfe7f,0x15e4,0xfa94,0xffff},
++                      .pa_5gh         = {0xfe7d,0x1582,0xfa9f,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x4,
++                      .tr_iso         = 0x3,
++              },
++              .ghz5 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x4,
++                      .tr_iso         = 0x3,
++              },
++      },
++      .ant_available_a        = 0x7,
++      .ant_available_bg       = 0x7,
++      .maxpwr_bg                      = 0x48,
++      .itssi_bg                       = 0x20,
++      .maxpwr_a                       = 0x3c,
++      .itssi_a                        = 0x3e,
++      .maxpwr_ah                      = 0x3c,
++      .maxpwr_al                      = 0x3c,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0xff,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0x88,
++      .tri2g                          = 0xff,
++      .tri5g                          = 0xff,
++      .tri5gl                         = 0xff,
++      .tri5gh                         = 0xff,
++      .rxpo2g                         = 0xff,
++      .rxpo5g                         = 0xff,
++      .rssismf2g                      = 0xf,
++      .rssismc2g                      = 0xf,
++      .rssisav2g                      = 0x7,
++      .bxa2g                          = 0x3,
++      .rssismf5g                      = 0xf,
++      .rssismc5g                      = 0xf,
++      .rssisav5g                      = 0x7,
++      .bxa5g                          = 0x3,
++      .pa0b0                          = 0xfe56,
++      .pa0b1                          = 0x16f2,
++      .pa0b2                          = 0xfa44,
++      .pa1b0                          = 0xfe77,
++      .pa1b1                          = 0x1657,
++      .pa1b2                          = 0xfa75,
++      .pa1lob0                        = 0xffff,
++      .pa1lob1                        = 0xffff,
++      .pa1lob2                        = 0xffff,
++      .pa1hib0                        = 0xfe76,
++      .pa1hib1                        = 0x15da,
++      .pa1hib2                        = 0xfa85,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0x2,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x7,
++      .rxchain                        = 0x7,
++      .rawtempsense           = 0x1ff,
++      .measpower                      = 0x7f,
++      .tempsense_slope        = 0xff,
++      .tempcorrx                      = 0x3f,
++      .tempsense_option       = 0x3,
++      .freqoffset_corr        = 0xf,
++      .iqcal_swp_dis          = 0x1,
++      .hw_iqcal_en            = 0x1,
++      .bwduppo                        = 0xffff,
++      .tempthresh                     = 0xff,
++      .tempoffset                     = 0xff,
++      .phycal_tempdelta       = 0xff,
++      .temps_period           = 0xf,
++      .temps_hysteresis       = 0xf,
++};
++
++static struct ssb_sprom bcm6362_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1102,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .txpid5gh                       = {0,0,0xff,0xff},
++      .boardflags_lo          = 0x200,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x54,
++                      .pa_2g          = {0xfe97,0x189e,0xfa0c,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x30,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x40,
++                      .pa_5gl         = {0xfea2,0x149a,0xfafc,0xffff},
++                      .pa_5g          = {0xff43,0x1317,0xfb23,0xffff},
++                      .pa_5gh         = {0xff43,0x1317,0xfb23,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x54,
++                      .pa_2g          = {0xfe8b,0x187b,0xfa0a,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x30,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x40,
++                      .pa_5gl         = {0xfebe,0x1478,0xfb1a,0xffff},
++                      .pa_5g          = {0xff80,0x12f0,0xfb15,0xffff},
++                      .pa_5gh         = {0xff80,0x12f0,0xfb15,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x1,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x3,
++              },
++              .ghz5 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x1,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x3,
++              },
++      },
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x54,
++      .itssi_bg                       = 0x20,
++      .maxpwr_a                       = 0x30,
++      .itssi_a                        = 0x3e,
++      .maxpwr_ah                      = 0x3c,
++      .maxpwr_al                      = 0x40,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0xff,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0xff,
++      .tri2g                          = 0xff,
++      .tri5g                          = 0xff,
++      .tri5gl                         = 0xff,
++      .tri5gh                         = 0xff,
++      .rxpo2g                         = 0xff,
++      .rxpo5g                         = 0xff,
++      .rssismf2g                      = 0xf,
++      .rssismc2g                      = 0xf,
++      .rssisav2g                      = 0x7,
++      .bxa2g                          = 0x3,
++      .rssismf5g                      = 0xf,
++      .rssismc5g                      = 0xf,
++      .rssisav5g                      = 0x7,
++      .bxa5g                          = 0x3,
++      .pa0b0                          = 0xfe97,
++      .pa0b1                          = 0x189e,
++      .pa0b2                          = 0xfa0c,
++      .pa1b0                          = 0xff43,
++      .pa1b1                          = 0x1317,
++      .pa1b2                          = 0xfb23,
++      .pa1lob0                        = 0xfea2,
++      .pa1lob1                        = 0x149a,
++      .pa1lob2                        = 0xfafc,
++      .pa1hib0                        = 0xff43,
++      .pa1hib1                        = 0x1317,
++      .pa1hib2                        = 0xfb23,
++      .ofdm2gpo                       = 0x4444,
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x3,
++      .rxchain                        = 0x3,
++      .opo                            = 0x44,
++      .mcs2gpo                        = {0x4444,0x4444,0x4444,0x4444,0,0,0,0},
++      .rawtempsense           = 0x1ff,
++      .measpower                      = 0x7f,
++      .tempsense_slope        = 0xff,
++      .tempcorrx                      = 0x3f,
++      .tempsense_option       = 0x3,
++      .freqoffset_corr        = 0xf,
++      .iqcal_swp_dis          = 0x1,
++      .hw_iqcal_en            = 0x1,
++      .bw40po                         = 0x6,
++      .tempthresh                     = 0x78,
++      .phycal_tempdelta       = 0xff,
++      .temps_period           = 0xf,
++      .temps_hysteresis       = 0xf,
++};
++
++static struct ssb_sprom bcm43224_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1188,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .txpid5gh                       = {0,0,0xff,0xff},
++      .boardflags_lo          = 0x200,
++      .boardflags2_lo         = 0x1000,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xfed1,0x163d,0xfab9,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x40,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x3a,
++                      .pa_5gl         = {0xfe87,0x1637,0xfa8e,0xffff},
++                      .pa_5g          = {0xfecd,0x1417,0xfaf6,0xffff},
++                      .pa_5gh         = {0xfedc,0x14cb,0xfaef,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xfed2,0x1699,0xfaaa,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x40,
++                      .maxpwr_5gh     = 0x3c,
++                      .maxpwr_5gl     = 0x3a,
++                      .pa_5gl         = {0xfe9a,0x1591,0xfabc,0xffff},
++                      .pa_5g          = {0xfe9d,0x1334,0xfb08,0xffff},
++                      .pa_5gh         = {0xfeb2,0x143b,0xfaeb,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x4,
++                      .tr_iso         = 0x3,
++              },
++              .ghz5 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x4,
++                      .tr_iso         = 0x3,
++              },
++      },
++      .ant_available_a        = 0x3,
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x4c,
++      .itssi_bg                       = 0x20,
++      .maxpwr_a                       = 0x40,
++      .itssi_a                        = 0x3e,
++      .maxpwr_ah                      = 0x3c,
++      .maxpwr_al                      = 0x3a,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0x88,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0xff,
++      .tri2g                          = 0xff,
++      .tri5g                          = 0xff,
++      .tri5gl                         = 0xff,
++      .tri5gh                         = 0xff,
++      .rxpo2g                         = 0xff,
++      .rxpo5g                         = 0xff,
++      .rssismf2g                      = 0xf,
++      .rssismc2g                      = 0xf,
++      .rssisav2g                      = 0x7,
++      .bxa2g                          = 0x3,
++      .rssismf5g                      = 0xf,
++      .rssismc5g                      = 0xf,
++      .rssisav5g                      = 0x7,
++      .bxa5g                          = 0x3,
++      .pa0b0                          = 0xfed1,
++      .pa0b1                          = 0x163d,
++      .pa0b2                          = 0xfab9,
++      .pa1b0                          = 0xfecd,
++      .pa1b1                          = 0x1417,
++      .pa1b2                          = 0xfaf6,
++      .pa1lob0                        = 0xfe87,
++      .pa1lob1                        = 0x1637,
++      .pa1lob2                        = 0xfa8e,
++      .pa1hib0                        = 0xfedc,
++      .pa1hib1                        = 0x14cb,
++      .pa1hib2                        = 0xfaef,
++      .ofdm2gpo                       = 0x4444,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0xff,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x3,
++      .rxchain                        = 0x3,
++      .opo                            = 0x44,
++      .mcs2gpo                        = 
{0x4444,0x4444,0x4444,0x4444,0x4444,0x4444,0x4444,0x4444},
++      .mcs5gpo                        = {0,0x2000,0,0x2000,0,0,0,0},
++      .rawtempsense           = 0x1ff,
++      .measpower                      = 0x7f,
++      .tempsense_slope        = 0xff,
++      .tempcorrx                      = 0x3f,
++      .tempsense_option       = 0x3,
++      .freqoffset_corr        = 0xf,
++      .iqcal_swp_dis          = 0x1,
++      .hw_iqcal_en            = 0x1,
++      .bw40po                         = 0x22,
++      .tempthresh                     = 0x78,
++      .phycal_tempdelta       = 0xff,
++      .temps_period           = 0xf,
++      .temps_hysteresis       = 0xf,
++};
++
++static struct ssb_sprom bcm43225_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1200,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .txpid5gh                       = {0,0,0xff,0xff},
++      .boardflags_lo          = 0x200,
++      .boardflags2_lo         = 0x1000,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4e,
++                      .pa_2g          = {0xfead,0x1611,0xfa9a,0xffff},
++                      .itssi_5g       = 0xff,
++                      .maxpwr_5g      = 0xff,
++                      .maxpwr_5gh     = 0xff,
++                      .maxpwr_5gl     = 0xff,
++                      .pa_5gl         = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5g          = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5gh         = {0xffff,0xffff,0xffff,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4e,
++                      .pa_2g          = {0xfec1,0x1674,0xfab2,0xffff},
++                      .itssi_5g       = 0xff,
++                      .maxpwr_5g      = 0xff,
++                      .maxpwr_5gh     = 0xff,
++                      .maxpwr_5gl     = 0xff,
++                      .pa_5gl         = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5g          = {0xffff,0xffff,0xffff,0xffff},
++                      .pa_5gh         = {0xffff,0xffff,0xffff,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x4,
++                      .tr_iso         = 0x3,
++              },
++              .ghz5 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x3,
++                      .pdet_range     = 0x1f,
++                      .tr_iso         = 0x7,
++                      .antswlut       = 0x1f,
++              },
++      },
++      .ant_available_a        = 0x3,
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x4e,
++      .itssi_bg                       = 0x20,
++      .maxpwr_a                       = 0xff,
++      .itssi_a                        = 0xff,
++      .maxpwr_ah                      = 0xff,
++      .maxpwr_al                      = 0xff,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0x88,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0xff,
++      .tri2g                          = 0xff,
++      .tri5g                          = 0xff,
++      .tri5gl                         = 0xff,
++      .tri5gh                         = 0xff,
++      .rxpo2g                         = 0xff,
++      .rxpo5g                         = 0xff,
++      .rssismf2g                      = 0xf,
++      .rssismc2g                      = 0xf,
++      .rssisav2g                      = 0x7,
++      .bxa2g                          = 0x3,
++      .rssismf5g                      = 0xf,
++      .rssismc5g                      = 0xf,
++      .rssisav5g                      = 0x7,
++      .bxa5g                          = 0x3,
++      .pa0b0                          = 0xfead,
++      .pa0b1                          = 0x1611,
++      .pa0b2                          = 0xfa9a,
++      .pa1b0                          = 0xffff,
++      .pa1b1                          = 0xffff,
++      .pa1b2                          = 0xffff,
++      .pa1lob0                        = 0xffff,
++      .pa1lob1                        = 0xffff,
++      .pa1lob2                        = 0xffff,
++      .pa1hib0                        = 0xffff,
++      .pa1hib1                        = 0xffff,
++      .pa1hib2                        = 0xffff,
++      .ofdm2gpo                       = 0x5555,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0xff,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x3,
++      .rxchain                        = 0x3,
++      .opo                            = 0x55,
++      .mcs2gpo                        = 
{0x5555,0x7555,0x5555,0x7555,0x5555,0x7555,0x5555,0x7555},
++      .rawtempsense           = 0x1ff,
++      .measpower                      = 0x7f,
++      .tempsense_slope        = 0xff,
++      .tempcorrx                      = 0x3f,
++      .tempsense_option       = 0x3,
++      .freqoffset_corr        = 0xf,
++      .iqcal_swp_dis          = 0x1,
++      .hw_iqcal_en            = 0x1,
++      .bw40po                         = 0x2,
++      .tempthresh                     = 0x78,
++      .phycal_tempdelta       = 0xff,
++      .temps_period           = 0xf,
++      .temps_hysteresis       = 0xf,
++};
++
++static struct ssb_sprom bcm43227_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1402,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .boardflags_lo          = 0x200,
++      .boardflags2_lo         = 0x800,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xff36,0x16d2,0xfaae,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xfeca,0x159b,0xfa80,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x4,
++              },
++      },
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x4c,
++      .itssi_bg                       = 0x20,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0xff,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0x88,
++      .pa0b0                          = 0xff36,
++      .pa0b1                          = 0x16d2,
++      .pa0b2                          = 0xfaae,
++      .ofdm2gpo                       = 0x4444,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0xff,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x3,
++      .rxchain                        = 0x3,
++      .opo                            = 0x44,
++      .mcs2gpo                        = 
{0x4444,0x4444,0x4444,0x4444,0x6666,0x6666,0x6666,0x6666},
++      .tempthresh                     = 0x78,
++};
++
++static struct ssb_sprom bcm43228_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1203,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .boardflags_lo          = 0x200,
++      .boardflags2_lo         = 0x800,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xff73,0x1762,0xfaa4,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x34,
++                      .maxpwr_5gh     = 0x34,
++                      .maxpwr_5gl     = 0x34,
++                      .pa_5gl         = {0xfea1,0x144c,0xfafb,0xffff},
++                      .pa_5g          = {0xfea1,0x154c,0xfad0,0xffff},
++                      .pa_5gh         = {0xfe7b,0x13fe,0xfafc,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xff41,0x16a3,0xfa8f,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x34,
++                      .maxpwr_5gh     = 0x34,
++                      .maxpwr_5gl     = 0x34,
++                      .pa_5gl         = {0xfe97,0x1346,0xfb32,0xffff},
++                      .pa_5g          = {0xfe97,0x1446,0xfb05,0xffff},
++                      .pa_5gh         = {0xfeb9,0x1516,0xfaee,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x2,
++              },
++              .ghz5 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x2,
++              },
++      },
++      .ant_available_a        = 0x3,
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x4c,
++      .itssi_bg                       = 0x20,
++      .maxpwr_a                       = 0x34,
++      .itssi_a                        = 0x3e,
++      .maxpwr_ah                      = 0x34,
++      .maxpwr_al                      = 0x34,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0xff,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0x88,
++      .pa0b0                          = 0xff73,
++      .pa0b1                          = 0x1762,
++      .pa0b2                          = 0xfaa4,
++      .pa1b0                          = 0xfea1,
++      .pa1b1                          = 0x154c,
++      .pa1b2                          = 0xfad0,
++      .pa1lob0                        = 0xfea1,
++      .pa1lob1                        = 0x144c,
++      .pa1lob2                        = 0xfafb,
++      .pa1hib0                        = 0xfe7b,
++      .pa1hib1                        = 0x13fe,
++      .pa1hib2                        = 0xfafc,
++      .ofdm2gpo                       = 0x4444,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0xff,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x3,
++      .rxchain                        = 0x3,
++      .opo                            = 0x44,
++      .mcs2gpo                        = 
{0x4444,0x4444,0x4444,0x4444,0x8888,0x8888,0x8888,0x8888},
++      .mcs5gpo                        = {0,0,0,0,0x3333,0x3333,0x3333,0x3333},
++      .mcs5glpo                       = {0,0,0,0,0x3333,0x3333,0x3333,0x3333},
++      .mcs5ghpo                       = {0,0,0,0,0x3333,0x3333,0x3333,0x3333},
++      .tempthresh                     = 0x78,
++};
++
++static struct ssb_sprom bcm43428_sprom = {
++      .revision                       = 0x8,
++      .board_rev                      = 0x1424,
++      .txpid2g                        = {0,0x80,0x2,0},
++      .txpid5gl                       = {0,0x18,0,0},
++      .txpid5g                        = {0,0,0x30,0x1f},
++      .boardflags_lo          = 0x200,
++      .boardflags2_lo         = 0x1800,
++      .core_pwr_info = {
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xff3e,0x1636,0xfaca,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x40,
++                      .maxpwr_5gh     = 0x40,
++                      .maxpwr_5gl     = 0x40,
++                      .pa_5gl         = {0xfe98,0x13e1,0xfb14,0xffff},
++                      .pa_5g          = {0xfe98,0x13e1,0xfb14,0xffff},
++                      .pa_5gh         = {0xfe9d,0x133d,0xfb36,0xffff},
++              },
++              {
++                      .itssi_2g       = 0x20,
++                      .maxpwr_2g      = 0x4c,
++                      .pa_2g          = {0xff22,0x15ce,0xfac2,0xffff},
++                      .itssi_5g       = 0x3e,
++                      .maxpwr_5g      = 0x40,
++                      .maxpwr_5gh     = 0x40,
++                      .maxpwr_5gl     = 0x40,
++                      .pa_5gl         = {0xfea6,0x1378,0xfb33,0xffff},
++                      .pa_5g          = {0xfea6,0x1378,0xfb33,0xffff},
++                      .pa_5gh         = {0xfe9c,0x1245,0xfb5f,0xffff},
++              },
++      },
++      .fem = {
++              .ghz2 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x4,
++              },
++              .ghz5 = {
++                      .tssipos        = 0x1,
++                      .extpa_gain     = 0x2,
++                      .pdet_range     = 0x2,
++                      .tr_iso         = 0x2,
++              },
++      },
++      .ant_available_a        = 0x3,
++      .ant_available_bg       = 0x3,
++      .maxpwr_bg                      = 0x4c,
++      .itssi_bg                       = 0x20,
++      .maxpwr_a                       = 0x40,
++      .itssi_a                        = 0x3e,
++      .maxpwr_ah                      = 0x40,
++      .maxpwr_al                      = 0x40,
++      .gpio0                          = 0xff,
++      .gpio1                          = 0xff,
++      .gpio2                          = 0xff,
++      .gpio3                          = 0x88,
++      .pa0b0                          = 0xff3e,
++      .pa0b1                          = 0x1636,
++      .pa0b2                          = 0xfaca,
++      .pa1b0                          = 0xfe98,
++      .pa1b1                          = 0x13e1,
++      .pa1b2                          = 0xfb14,
++      .pa1lob0                        = 0xfe98,
++      .pa1lob1                        = 0x13e1,
++      .pa1lob2                        = 0xfb14,
++      .pa1hib0                        = 0xfe9d,
++      .pa1hib1                        = 0x133d,
++      .pa1hib2                        = 0xfb36,
++      .ofdm2gpo                       = 0x4444,
++      .antenna_gain = {
++              .a0                             = 0x2,
++              .a1                             = 0x2,
++              .a2                             = 0xff,
++              .a3                             = 0xff,
++      },
++      .leddc_on_time          = 0xff,
++      .leddc_off_time         = 0xff,
++      .txchain                        = 0x3,
++      .rxchain                        = 0x3,
++      .opo                            = 0x44,
++      .mcs2gpo                        = 
{0x4444,0x4444,0x4444,0x4444,0x6666,0x6666,0x6666,0x6666},
++      .mcs5gpo                        = 
{0,0x2000,0,0x2000,0x4444,0x4444,0x4444,0x4444},
++      .mcs5glpo                       = 
{0,0x2000,0,0x2000,0x2222,0x2222,0x2222,0x2222},
++      .mcs5ghpo                       = 
{0,0x2000,0,0x2000,0x4444,0x4444,0x4444,0x4444},
++      .tempthresh                     = 0x78,
++};
++
++#endif /* ! BCM63XX_BCMA_SPROMS_H_ */
+--- /dev/null
++++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_sprom_bcma.h
+@@ -0,0 +1,8 @@
++#ifndef BCM63XX_BCMA_H_
++#define BCM63XX_BCMA_H_
++
++#include <linux/bcma/bcma.h>
++
++int bcm63xx_get_bcma_fallback_sprom(struct bcma_bus *bus, struct ssb_sprom 
*out);
++
++#endif /* ! BCM63XX_BCMA_H_ */
Index: target/linux/brcm63xx/patches-3.3/900-bcma_fallback_error.patch
===================================================================
--- target/linux/brcm63xx/patches-3.3/900-bcma_fallback_error.patch     
(revisión: 0)
+++ target/linux/brcm63xx/patches-3.3/900-bcma_fallback_error.patch     
(revisión: 0)
@@ -0,0 +1,10 @@
+--- a/drivers/bcma/sprom.c
++++ b/drivers/bcma/sprom.c
+@@ -598,5 +598,7 @@ int bcma_sprom_get(struct bcma_bus *bus)
+ 
+ out:
+       kfree(sprom);
++      pr_debug("Reading SPROM failed. Trying fallback SPROM...\n");
++      err = bcma_fill_sprom_with_fallback(bus, &bus->sprom);
+       return err;
+ }
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to