]> git.baikalelectronics.ru Git - kernel.git/commitdiff
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>
Fri, 10 Mar 2023 08:33:36 +0000 (09:33 +0100)
[ Upstream commit 64593ce9fb0af91d37aea393bbb34a5b03a7a4fc ]

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: 6cb52f04231c ("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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/usb/host/max3421-hcd.c

index 352e3ac2b377baf790140c8fb0b49f72fb0e8827..19111e83ac13122dc8484bb9461802da5b6e4dde 100644 (file)
@@ -1436,7 +1436,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));