diff options
Diffstat (limited to 'drivers/ssb')
-rw-r--r-- | drivers/ssb/driver_chipcommon.c | 2 | ||||
-rw-r--r-- | drivers/ssb/pci.c | 5 | ||||
-rw-r--r-- | drivers/ssb/sprom.c | 14 |
3 files changed, 21 insertions, 0 deletions
diff --git a/drivers/ssb/driver_chipcommon.c b/drivers/ssb/driver_chipcommon.c index 59c3c0fdbecd..59ae76bace14 100644 --- a/drivers/ssb/driver_chipcommon.c +++ b/drivers/ssb/driver_chipcommon.c | |||
@@ -233,6 +233,8 @@ void ssb_chipcommon_init(struct ssb_chipcommon *cc) | |||
233 | { | 233 | { |
234 | if (!cc->dev) | 234 | if (!cc->dev) |
235 | return; /* We don't have a ChipCommon */ | 235 | return; /* We don't have a ChipCommon */ |
236 | if (cc->dev->id.revision >= 11) | ||
237 | cc->status = chipco_read32(cc, SSB_CHIPCO_CHIPSTAT); | ||
236 | ssb_pmu_init(cc); | 238 | ssb_pmu_init(cc); |
237 | chipco_powercontrol_init(cc); | 239 | chipco_powercontrol_init(cc); |
238 | ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST); | 240 | ssb_chipco_set_clockmode(cc, SSB_CLKMODE_FAST); |
diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c index 9e50896233aa..a4b2b99f2c80 100644 --- a/drivers/ssb/pci.c +++ b/drivers/ssb/pci.c | |||
@@ -620,6 +620,11 @@ static int ssb_pci_sprom_get(struct ssb_bus *bus, | |||
620 | int err = -ENOMEM; | 620 | int err = -ENOMEM; |
621 | u16 *buf; | 621 | u16 *buf; |
622 | 622 | ||
623 | if (!ssb_is_sprom_available(bus)) { | ||
624 | ssb_printk(KERN_ERR PFX "No SPROM available!\n"); | ||
625 | return -ENODEV; | ||
626 | } | ||
627 | |||
623 | buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); | 628 | buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL); |
624 | if (!buf) | 629 | if (!buf) |
625 | goto out; | 630 | goto out; |
diff --git a/drivers/ssb/sprom.c b/drivers/ssb/sprom.c index d0e6762fec50..83bc088b941d 100644 --- a/drivers/ssb/sprom.c +++ b/drivers/ssb/sprom.c | |||
@@ -175,3 +175,17 @@ const struct ssb_sprom *ssb_get_fallback_sprom(void) | |||
175 | { | 175 | { |
176 | return fallback_sprom; | 176 | return fallback_sprom; |
177 | } | 177 | } |
178 | |||
179 | /* http://bcm-v4.sipsolutions.net/802.11/IsSpromAvailable */ | ||
180 | bool ssb_is_sprom_available(struct ssb_bus *bus) | ||
181 | { | ||
182 | /* status register only exists on chipcomon rev >= 11 and we need check | ||
183 | for >= 31 only */ | ||
184 | /* this routine differs from specs as we do not access SPROM directly | ||
185 | on PCMCIA */ | ||
186 | if (bus->bustype == SSB_BUSTYPE_PCI && | ||
187 | bus->chipco.dev->id.revision >= 31) | ||
188 | return bus->chipco.capabilities & SSB_CHIPCO_CAP_SPROM; | ||
189 | |||
190 | return true; | ||
191 | } | ||