i2c: robotfuzz-osif: fix control-request directions
Subsystems (3)
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.
--- drivers/i2c/busses/i2c-robotfuzz-osif.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/i2c/busses/i2c-robotfuzz-osif.c +2 -2
@@ -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
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_RATEandOSIFI2C_STOPrequests which erroneously used theosif_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 [email protected] # 3.14Cc Andrew Lunn <[email protected]>Signed-off-by Johan Hovold <[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@@ -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" );
Wolfram Sang
AppliedQuoted 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_RATEandOSIFI2C_STOPrequests which erroneously used theosif_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 [email protected] # 3.14Cc Andrew Lunn <[email protected]>Signed-off-by Johan Hovold <[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!
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_RATEandOSIFI2C_STOPrequests which erroneously used theosif_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 [email protected] # 3.14Cc Andrew Lunn <[email protected]>Signed-off-by Johan Hovold <[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
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