usb: max-3421: Fix setting of I/O pins
authorMark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Tue, 7 Feb 2023 03:33:37 +0000 (16:33 +1300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 7 Feb 2023 07:43:47 +0000 (08:43 +0100)
To update the I/O pins, the registers are read/modified/written. The
read operation incorrectly always read the first register. Although
wrong, there wasn't any impact as all the output pins are always
written, and the inputs are read only anyway.

Fixes: 2d53139f3162 ("Add support for using a MAX3421E chip as a host driver.")
Signed-off-by: Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Link: https://lore.kernel.org/r/20230207033337.18112-1-mark.tomlinson@alliedtelesis.co.nz
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/max3421-hcd.c

index 9a87056fc738c117ee07747df5f4e5642b546a75..28d1524ee2fa93c7ffe38eec88da12aa63b4109d 100644 (file)
@@ -1427,7 +1427,7 @@ max3421_spi_thread(void *dev_id)
                         * use spi_wr_buf().
                         */
                        for (i = 0; i < ARRAY_SIZE(max3421_hcd->iopins); ++i) {
-                               u8 val = spi_rd8(hcd, MAX3421_REG_IOPINS1);
+                               u8 val = spi_rd8(hcd, MAX3421_REG_IOPINS1 + i);
 
                                val = ((val & 0xf0) |
                                       (max3421_hcd->iopins[i] & 0x0f));