Hi John,

Please apply this to wireless-dev.
This is the correct fix for the ChipCommon issue.

--

Fix CoreCode and CoreRev extraction from coreidhi.
And yes, it's ugly. But that's how the device works.

Signed-off-by: Michael Buesch <[EMAIL PROTECTED]>

Index: wireless-dev/drivers/misc/ssb.c
===================================================================
--- wireless-dev.orig/drivers/misc/ssb.c        2006-08-26 13:34:03.000000000 
+0200
+++ wireless-dev/drivers/misc/ssb.c     2006-08-26 13:43:11.000000000 +0200
@@ -643,8 +643,9 @@ int ssb_probe_cores(struct ssb *ssb,
                goto error;
 
        idhi = ssb_read32(ssb, SSB_IDHIGH);
-       cc = (idhi & SSB_IDHIGH_CC_MASK) >> SSB_IDHIGH_CC_SHIFT;
-       rev = (idhi & SSB_IDHIGH_RC_MASK);
+       cc = (idhi & SSB_IDHIGH_CC) >> SSB_IDHIGH_CC_SHIFT;
+       rev = (idhi & SSB_IDHIGH_RCLO);
+       rev |= (idhi & SSB_IDHIGH_RCHI) >> SSB_IDHIGH_RCHI_SHIFT;
 
        ssb->chipcommon_capabilities = 0;
        ssb->nr_cores = 0;
@@ -716,9 +717,10 @@ int ssb_probe_cores(struct ssb *ssb,
                core = &(ssb->cores[i]);
 
                idhi = ssb_read32(ssb, SSB_IDHIGH);
-               core->cc = (idhi & SSB_IDHIGH_CC_MASK) >> SSB_IDHIGH_CC_SHIFT;
-               core->rev = (idhi & SSB_IDHIGH_RC_MASK);
-               core->vendor = (idhi & SSB_IDHIGH_VC_MASK) >> 
SSB_IDHIGH_VC_SHIFT;
+               core->cc = (idhi & SSB_IDHIGH_CC) >> SSB_IDHIGH_CC_SHIFT;
+               core->rev = (idhi & SSB_IDHIGH_RCLO);
+               core->rev |= (idhi & SSB_IDHIGH_RCHI) >> SSB_IDHIGH_RCHI_SHIFT;
+               core->vendor = (idhi & SSB_IDHIGH_VC) >> SSB_IDHIGH_VC_SHIFT;
                core->index = i;
 
                dprintk(KERN_DEBUG PFX "Core %d found: "
Index: wireless-dev/include/linux/ssb.h
===================================================================
--- wireless-dev.orig/include/linux/ssb.h       2006-08-26 13:34:03.000000000 
+0200
+++ wireless-dev/include/linux/ssb.h    2006-08-26 13:40:11.000000000 +0200
@@ -100,10 +100,12 @@
 #define  SSB_IDLOW_SSBREV_22   0x00000000 /* <= 2.2 */
 #define  SSB_IDLOW_SSBREV_23   0x10000000 /* 2.3 */
 #define SSB_IDHIGH             0x0FFC     /* SB Identification High */
-#define  SSB_IDHIGH_RC_MASK    0x0000000f /* Revision Code */
-#define  SSB_IDHIGH_CC_MASK    0x0000fff0 /* Core Code */
+#define  SSB_IDHIGH_RCLO       0x0000000F /* Revision Code (low part) */
+#define  SSB_IDHIGH_CC         0x00008FF0 /* Core Code */
 #define  SSB_IDHIGH_CC_SHIFT   4
-#define  SSB_IDHIGH_VC_MASK    0xffff0000 /* Vendor Code */
+#define  SSB_IDHIGH_RCHI       0x00007000 /* Revision Code (high part) */
+#define  SSB_IDHIGH_RCHI_SHIFT 8          /* yes, shift 8 is right */
+#define  SSB_IDHIGH_VC         0xFFFF0000 /* Vendor Code */
 #define  SSB_IDHIGH_VC_SHIFT   16
 
 /* SPROM shadow area. If not otherwise noted, fields are


-- 
Greetings Michael.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to