Skip to contentSkip to conversation

i2c: robotfuzz-osif: fix control-request directions

PATCH Applied Johan Hovold 3 participants 5 messages May 24, 2021 – Jun 25, 2021

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 i2c: robotfuzz-osif: fix control-request directions

The direction of the pipe argument must match the request-type direction bit or control requests may fail depending on the host-controller-driver implementation.

Control transfers without a data stage are treated as OUT requests by the USB stack and should be using usb_sndctrlpipe(). Failing to do so will now trigger a warning.

Fix the OSIFI2C_SET_BIT_RATE and OSIFI2C_STOP requests which erroneously used the osif_usb_read() helper and set the IN direction bit.

Reported-by [email protected]
Fixes 83e53a8f120f ("i2c: Add bus driver for for OSIF USB i2c device.")
Cc Andrew Lunn <[email protected]>
---
 drivers/i2c/busses/i2c-robotfuzz-osif.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/i2c/busses/i2c-robotfuzz-osif.c +2 -2
index a39f7d092797..66dfa211e736 100644
@@ -83,7 +83,7 @@ static int osif_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
 			}
 		}
 
-		ret = osif_usb_read(adapter, OSIFI2C_STOP, 0, 0, NULL, 0);
+		ret = osif_usb_write(adapter, OSIFI2C_STOP, 0, 0, NULL, 0);
 		if (ret) {
 			dev_err(&adapter->dev, "failure sending STOP\n");
 			return -EREMOTEIO;
@@ -153,7 +153,7 @@ static int osif_probe(struct usb_interface *interface,
 	 * Set bus frequency. The frequency is:
 	 * 120,000,000 / ( 16 + 2 * div * 4^prescale).
 	 * Using dev = 52, prescale = 0 give 100KHz */
-	ret = osif_usb_read(&priv->adapter, OSIFI2C_SET_BIT_RATE, 52, 0,
+	ret = osif_usb_write(&priv->adapter, OSIFI2C_SET_BIT_RATE, 52, 0,
 			    NULL, 0);
 	if (ret) {
 		dev_err(&interface->dev, "failure sending bit rate");
Signature · 1 line
2.26.3
#1 lore raw
Quoted 11 lines · Johan Hovold

The direction of the pipe argument must match the request-type direction bit or control requests may fail depending on the host-controller-driver implementation.

Control transfers without a data stage are treated as OUT requests by the USB stack and should be using usb_sndctrlpipe(). Failing to do so will now trigger a warning.

Fix the OSIFI2C_SET_BIT_RATE and OSIFI2C_STOP requests which erroneously used the osif_usb_read() helper and set the IN direction bit.

Quoted 6 lines
Reported-by [email protected]
Fixes 83e53a8f120f ("i2c: Add bus driver for for OSIF USB i2c device.")
Cc Andrew Lunn <[email protected]>

---

Wolfram, can you pick this one up for 5.14?

Johan

Quoted 25 lines
 drivers/i2c/busses/i2c-robotfuzz-osif.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/i2c/busses/i2c-robotfuzz-osif.c +2 -2
index a39f7d092797..66dfa211e736 100644
@@ -83,7 +83,7 @@ static int osif_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs,
 			}
 		}
 
-		ret = osif_usb_read(adapter, OSIFI2C_STOP, 0, 0, NULL, 0);
+		ret = osif_usb_write(adapter, OSIFI2C_STOP, 0, 0, NULL, 0);
 		if (ret) {
 			dev_err(&adapter->dev, "failure sending STOP\n");
 			return -EREMOTEIO;
@@ -153,7 +153,7 @@ static int osif_probe(struct usb_interface *interface,
 	 * Set bus frequency. The frequency is:
 	 * 120,000,000 / ( 16 + 2 * div * 4^prescale).
 	 * Using dev = 52, prescale = 0 give 100KHz */
-	ret = osif_usb_read(&priv->adapter, OSIFI2C_SET_BIT_RATE, 52, 0,
+	ret = osif_usb_write(&priv->adapter, OSIFI2C_SET_BIT_RATE, 52, 0,
 			    NULL, 0);
 	if (ret) {
 		dev_err(&interface->dev, "failure sending bit rate");
Applied
#2 lore raw
Quoted 12 lines · Johan Hovold
Quoted 11 lines · Johan Hovold

The direction of the pipe argument must match the request-type direction bit or control requests may fail depending on the host-controller-driver implementation.

Control transfers without a data stage are treated as OUT requests by the USB stack and should be using usb_sndctrlpipe(). Failing to do so will now trigger a warning.

Fix the OSIFI2C_SET_BIT_RATE and OSIFI2C_STOP requests which erroneously used the osif_usb_read() helper and set the IN direction bit.

Quoted 8 lines
Quoted 6 lines
Reported-by [email protected]
Fixes 83e53a8f120f ("i2c: Add bus driver for for OSIF USB i2c device.")
Cc Andrew Lunn <[email protected]>

---

Wolfram, can you pick this one up for 5.14?

Sorry, I thought Andrew was the maintainer of this driver and was waiting for his ack. But he is not, this driver is unmaintained. So, I trust you and picked it up now.

Applied to for-current, thanks!

#3 lore raw
Quoted 20 lines · Wolfram Sang
Quoted 19 lines · Johan Hovold
Quoted 17 lines · Johan Hovold

The direction of the pipe argument must match the request-type direction bit or control requests may fail depending on the host-controller-driver implementation.

Control transfers without a data stage are treated as OUT requests by the USB stack and should be using usb_sndctrlpipe(). Failing to do so will now trigger a warning.

Fix the OSIFI2C_SET_BIT_RATE and OSIFI2C_STOP requests which erroneously used the osif_usb_read() helper and set the IN direction bit.

Reported-by [email protected]
Fixes 83e53a8f120f ("i2c: Add bus driver for for OSIF USB i2c device.")
Cc Andrew Lunn <[email protected]>

---

Quoted 4 lines
Quoted 1 line

Wolfram, can you pick this one up for 5.14?

Sorry, I thought Andrew was the maintainer of this driver and was waiting for his ack.

Ah, sorry. I did take a quick look at the change, it seemed sensible. But i've not used this hardware in years, i have no way to test it, etc.

Andrew

#4 lore raw
In reply to Wolfram Sang
Quoted 5 lines · Wolfram Sang

Sorry, I thought Andrew was the maintainer of this driver and was waiting for his ack. But he is not, this driver is unmaintained. So, I trust you and picked it up now.

Applied to for-current, thanks!

Perfect, thanks!

Johan