libertas: check valid bits in SPI bus mode reg
authorAndrey Yurovsky <andrey@cozybit.com>
Fri, 31 Jul 2009 18:35:19 +0000 (11:35 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 4 Aug 2009 20:44:21 +0000 (16:44 -0400)
The SPI driver writes to the bus mode register and performs a sanity
check by reading back what we wrote, however only the lower four bits of
that register are defined.  In some cases, the device side seems to set
the higher bits, causing us to fail the sanity check unnecessarily.
Check only the lower four bits instead.

Thanks to John Goyette from Schick Technologies for pointing out the
problem.

Signed-off-by: Andrey Yurovsky <andrey@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/libertas/if_spi.c

index 963c20125fc98b8b1ee2c5a24eaec10431197a64..446e327180f8efe2829e5839b89886d546fab4f3 100644 (file)
@@ -376,7 +376,7 @@ static int spu_set_bus_mode(struct if_spi_card *card, u16 mode)
        err = spu_read_u16(card, IF_SPI_SPU_BUS_MODE_REG, &rval);
        if (err)
                return err;
-       if (rval != mode) {
+       if ((rval & 0xF) != mode) {
                lbs_pr_err("Can't read bus mode register.\n");
                return -EIO;
        }