Lines Matching +full:usb +full:- +full:version

1 // SPDX-License-Identifier: GPL-2.0-only
3 * driver for the i2c-tiny-usb adapter - 1.0
6 * Copyright (C) 2006-2007 Till Harbaum (Till@Harbaum.org)
16 /* include interfaces to usb layer */
17 #include <linux/usb.h>
22 /* commands via USB, must match command ids in the firmware */
32 /* i2c bit delay, default is 10us -> 100kHz max
46 /* ----- begin of i2c layer ---------------------------------------------- */
60 return -ENOMEM; in usb_xfer()
68 if (i == num-1) in usb_xfer()
73 dev_dbg(&adapter->dev, in usb_xfer()
75 i, str_read_write(pmsg->flags & I2C_M_RD), in usb_xfer()
76 pmsg->flags, pmsg->len, pmsg->addr); in usb_xfer()
79 if (pmsg->flags & I2C_M_RD) { in usb_xfer()
82 pmsg->flags, pmsg->addr, in usb_xfer()
83 pmsg->buf, pmsg->len) != pmsg->len) { in usb_xfer()
84 dev_err(&adapter->dev, in usb_xfer()
86 ret = -EIO; in usb_xfer()
92 pmsg->flags, pmsg->addr, in usb_xfer()
93 pmsg->buf, pmsg->len) != pmsg->len) { in usb_xfer()
94 dev_err(&adapter->dev, in usb_xfer()
96 ret = -EIO; in usb_xfer()
103 dev_err(&adapter->dev, "failure reading status\n"); in usb_xfer()
104 ret = -EIO; in usb_xfer()
108 dev_dbg(&adapter->dev, " status = %d\n", *pstatus); in usb_xfer()
110 ret = -ENXIO; in usb_xfer()
131 dev_err(&adapter->dev, "failure reading functionality\n"); in usb_func()
142 /* prevent invalid 0-length usb_control_msg */
153 /* ----- end of i2c layer ------------------------------------------------ */
155 /* ----- begin of usb layer ---------------------------------------------- */
158 * Initially the usb i2c interface uses a vid/pid pair donated by
168 MODULE_DEVICE_TABLE(usb, i2c_tiny_usb_table);
172 struct usb_device *usb_dev; /* the usb device for this device */
180 struct i2c_tiny_usb *dev = (struct i2c_tiny_usb *)adapter->algo_data; in usb_read()
185 return -ENOMEM; in usb_read()
188 ret = usb_control_msg(dev->usb_dev, usb_rcvctrlpipe(dev->usb_dev, 0), in usb_read()
200 struct i2c_tiny_usb *dev = (struct i2c_tiny_usb *)adapter->algo_data; in usb_write()
205 return -ENOMEM; in usb_write()
208 ret = usb_control_msg(dev->usb_dev, usb_sndctrlpipe(dev->usb_dev, 0), in usb_write()
218 usb_put_dev(dev->usb_dev); in i2c_tiny_usb_free()
226 int retval = -ENOMEM; in i2c_tiny_usb_probe()
227 u16 version; in i2c_tiny_usb_probe() local
229 if (interface->intf_assoc && in i2c_tiny_usb_probe()
230 interface->intf_assoc->bFunctionClass != USB_CLASS_VENDOR_SPEC) in i2c_tiny_usb_probe()
231 return -ENODEV; in i2c_tiny_usb_probe()
233 dev_dbg(&interface->dev, "probing usb device\n"); in i2c_tiny_usb_probe()
240 dev->usb_dev = usb_get_dev(interface_to_usbdev(interface)); in i2c_tiny_usb_probe()
241 dev->interface = interface; in i2c_tiny_usb_probe()
246 version = le16_to_cpu(dev->usb_dev->descriptor.bcdDevice); in i2c_tiny_usb_probe()
247 dev_info(&interface->dev, in i2c_tiny_usb_probe()
248 "version %x.%02x found at bus %03d address %03d\n", in i2c_tiny_usb_probe()
249 version >> 8, version & 0xff, in i2c_tiny_usb_probe()
250 dev->usb_dev->bus->busnum, dev->usb_dev->devnum); in i2c_tiny_usb_probe()
253 dev->adapter.owner = THIS_MODULE; in i2c_tiny_usb_probe()
254 dev->adapter.class = I2C_CLASS_HWMON; in i2c_tiny_usb_probe()
255 dev->adapter.quirks = &usb_quirks; in i2c_tiny_usb_probe()
256 dev->adapter.algo = &usb_algorithm; in i2c_tiny_usb_probe()
257 dev->adapter.algo_data = dev; in i2c_tiny_usb_probe()
258 snprintf(dev->adapter.name, sizeof(dev->adapter.name), in i2c_tiny_usb_probe()
259 "i2c-tiny-usb at bus %03d device %03d", in i2c_tiny_usb_probe()
260 dev->usb_dev->bus->busnum, dev->usb_dev->devnum); in i2c_tiny_usb_probe()
262 if (usb_write(&dev->adapter, CMD_SET_DELAY, delay, 0, NULL, 0) != 0) { in i2c_tiny_usb_probe()
263 dev_err(&dev->adapter.dev, in i2c_tiny_usb_probe()
265 retval = -EIO; in i2c_tiny_usb_probe()
269 dev->adapter.dev.parent = &dev->interface->dev; in i2c_tiny_usb_probe()
272 i2c_add_adapter(&dev->adapter); in i2c_tiny_usb_probe()
275 dev_info(&dev->adapter.dev, "connected i2c-tiny-usb device\n"); in i2c_tiny_usb_probe()
290 i2c_del_adapter(&dev->adapter); in i2c_tiny_usb_disconnect()
294 dev_dbg(&interface->dev, "disconnected\n"); in i2c_tiny_usb_disconnect()
298 .name = "i2c-tiny-usb",
306 /* ----- end of usb layer ------------------------------------------------ */
309 MODULE_DESCRIPTION("i2c-tiny-usb driver v1.0");