diff options
author | Larry Finger <Larry.Finger@lwfinger.net> | 2007-11-09 17:56:25 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:04:41 -0500 |
commit | c272ef4403c271799a7f09a4ab7a236c86643843 (patch) | |
tree | 8f2baf9c11159044b42233cea56aa5a62dcd7500 /drivers/ssb/main.c | |
parent | ac82fab44f6b981e3f6b53784e2f23838f4908e1 (diff) |
ssb: Convert to use of the new SPROM structure
In disagreement with the SPROM specs, revision 3 devices appear to have
moved the MAC address.
Change ssb to handle the revision 4 SPROM, which is a different size.
This change in size is handled by adding a new variable to the ssb_sprom
struct and using it whenever possible. For those routines that do not
have access to this structure, a 'u16 size' argument is added.
The new PCI_ID for the BCM4328 is also added.
Testing of the Revision 4 SPROM, which is used on the BCM4328, was done
by Michael Gerdau <mgerdau@tiscali.de>.
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/ssb/main.c')
-rw-r--r-- | drivers/ssb/main.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/ssb/main.c b/drivers/ssb/main.c index 85a20546e827..9028ed5715a1 100644 --- a/drivers/ssb/main.c +++ b/drivers/ssb/main.c | |||
@@ -872,14 +872,22 @@ EXPORT_SYMBOL(ssb_clockspeed); | |||
872 | 872 | ||
873 | static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev) | 873 | static u32 ssb_tmslow_reject_bitmask(struct ssb_device *dev) |
874 | { | 874 | { |
875 | u32 rev = ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV; | ||
876 | |||
875 | /* The REJECT bit changed position in TMSLOW between | 877 | /* The REJECT bit changed position in TMSLOW between |
876 | * Backplane revisions. */ | 878 | * Backplane revisions. */ |
877 | switch (ssb_read32(dev, SSB_IDLOW) & SSB_IDLOW_SSBREV) { | 879 | switch (rev) { |
878 | case SSB_IDLOW_SSBREV_22: | 880 | case SSB_IDLOW_SSBREV_22: |
879 | return SSB_TMSLOW_REJECT_22; | 881 | return SSB_TMSLOW_REJECT_22; |
880 | case SSB_IDLOW_SSBREV_23: | 882 | case SSB_IDLOW_SSBREV_23: |
881 | return SSB_TMSLOW_REJECT_23; | 883 | return SSB_TMSLOW_REJECT_23; |
884 | case SSB_IDLOW_SSBREV_24: /* TODO - find the proper REJECT bits */ | ||
885 | case SSB_IDLOW_SSBREV_25: /* same here */ | ||
886 | case SSB_IDLOW_SSBREV_26: /* same here */ | ||
887 | case SSB_IDLOW_SSBREV_27: /* same here */ | ||
888 | return SSB_TMSLOW_REJECT_23; /* this is a guess */ | ||
882 | default: | 889 | default: |
890 | printk(KERN_INFO "ssb: Backplane Revision 0x%.8X\n", rev); | ||
883 | WARN_ON(1); | 891 | WARN_ON(1); |
884 | } | 892 | } |
885 | return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23); | 893 | return (SSB_TMSLOW_REJECT_22 | SSB_TMSLOW_REJECT_23); |