ssb-pcmcia: Fix 32bit register access in early bus scanning
authorMartin Fuzzey <mfuzzey@gmail.com>
Fri, 6 Nov 2009 20:21:27 +0000 (21:21 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 10 Nov 2009 21:21:12 +0000 (16:21 -0500)
The scan function was using 32 bit access which does not
work on 16bit CF cards.

This patch corrects this by doing two 16 bit reads like
ssb_pcmcia_read32 already does.

mb -- Removed locking. That early in init there's no need for locking.

Signed-off-by: Martin Fuzzey <mfuzzey@gmail.com>
Signed-off-by: Michael Buesch <mb@bu3sch.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/ssb/scan.c

index b74212d698c78b8d39c541ec44d2857cb9ad0e19..e8b89e8ac9bd96ed1279d0602f4aeee8fc050b84 100644 (file)
@@ -162,6 +162,8 @@ static u8 chipid_to_nrcores(u16 chipid)
 static u32 scan_read32(struct ssb_bus *bus, u8 current_coreidx,
                       u16 offset)
 {
+       u32 lo, hi;
+
        switch (bus->bustype) {
        case SSB_BUSTYPE_SSB:
                offset += current_coreidx * SSB_CORE_SIZE;
@@ -174,7 +176,9 @@ static u32 scan_read32(struct ssb_bus *bus, u8 current_coreidx,
                        offset -= 0x800;
                } else
                        ssb_pcmcia_switch_segment(bus, 0);
-               break;
+               lo = readw(bus->mmio + offset);
+               hi = readw(bus->mmio + offset + 2);
+               return lo | (hi << 16);
        case SSB_BUSTYPE_SDIO:
                offset += current_coreidx * SSB_CORE_SIZE;
                return ssb_sdio_scan_read32(bus, offset);