Hi Hans, > +out_log: > + dev_dbg(adap->dev.parent, "RD[%d]:%*phN\n", msg->len, msg->len, msg->buf); I think this... > + > + return 0; > +} > + > +static int usbio_i2c_write(struct i2c_adapter *adap, struct i2c_msg *msg) > +{ > + struct usbio_i2c *i2c = i2c_get_adapdata(adap); > + u16 txchunk = i2c->txbuf_len - I2C_RW_OVERHEAD; > + struct usbio_i2c_rw *wbuf = i2c->rwbuf; > + int ret; > + > + dev_dbg(adap->dev.parent, "WR[%d]:%*phN\n", msg->len, msg->len, msg->buf); ... and this dbg can go. The tracepoints we have should do? > +static u32 usbio_i2c_func(struct i2c_adapter *adap) > +{ > + return I2C_FUNC_I2C | I2C_FUNC_10BIT_ADDR | I2C_FUNC_SMBUS_EMUL; > +} How did you test 10 bit addresses? I have never seen them in the wild? Did you also check SMBUS_QUICK? 'i2cdetect' uses it by default. Does the underlying USBIO driver use usb_control_msg? If so, we need to disable zero length read messages. See [1] for a reference. Rest looks good to me! [1] https://lore.kernel.org/all/20250522064234.3721-2-wsa+renesas@sang-engineering.com/