.disconnect = cp210x_disconnect,
};
+/* Control request types */
+#define REQTYPE_CTL_TO_DEVICE USB_TYPE_VENDOR
+#define REQTYPE_CTL_TO_HOST (USB_DIR_IN|REQTYPE_CTL_TO_DEVICE)
+
/* Config request types */
-#define REQTYPE_HOST_TO_DEVICE 0x41
-#define REQTYPE_DEVICE_TO_HOST 0xc1
+#define REQTYPE_HOST_TO_DEVICE (USB_TYPE_VENDOR|USB_RECIP_INTERFACE)
+#define REQTYPE_DEVICE_TO_HOST (USB_DIR_IN|REQTYPE_HOST_TO_DEVICE)
/* Config request codes */
#define CP210X_IFC_ENABLE 0x00
tbuf = kmalloc(size, GFP_KERNEL);
if (!tbuf)
return -ENOMEM;
- if (requestype & 0x80) {
+ if (requestype & USB_DIR_IN) {
ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request,
requestype, value, index, tbuf, size, 300);
if (ret > 0 && size)
/* Instructing the CP210X to reset seems to work more reliably than
* calling usb_reset_device().
*/
- cp210x_ctlmsg(port, 0xff, 0x40, 0x0008, 0x00, NULL, 0);
+ cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_DEVICE,
+ 0x0008, 0x00, NULL, 0);
return 0;
}
_partnum = CP210x_PART_CP2101;
else if (addr == 0x01) {
/* Must query part to determine part number */
- if (cp210x_ctlmsg(port, 0xff, 0xc0, 0x370b, 0x00,
- &_partnum, 1) != 1)
+ if (cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_HOST,
+ 0x370b, 0x00, &_partnum, 1) != 1)
_partnum = CP210x_PART_UNKNOWN;
}
}
static inline int cp210x_setu16(struct usb_serial_port *port, int cmd,
unsigned int value)
{
- return cp210x_ctlmsg(port, 0xff, 0x40, 0x3700 | (cmd & 0xff),
- value, NULL, 0);
+ return cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_DEVICE,
+ 0x3700 | (cmd & 0xff), value, NULL, 0);
}
/*
static int cp210x_setstr(struct usb_serial_port *port, int cmd, char *usbstr)
{
unsigned len = usbstr[0];
- int ret = cp210x_ctlmsg(port, 0xff, 0x40, 0x3700 | (cmd & 0xff), 0,
- usbstr, len);
+ int ret = cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_DEVICE,
+ 0x3700 | (cmd & 0xff), 0, usbstr, len);
dbg("%s - cmd 0x%02x len %d ret %d", __func__, cmd, len, ret);
return ret;
}
{
dbg("%s - port %d, gpio = 0x%.2x", __func__, port->number, gpio);
- return cp210x_ctlmsg(port, 0xff, 0x40, 0x37e1,
- ((uint16_t)gpio << 8) | GPIO_MASK, NULL, 0);
+ return cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_DEVICE,
+ 0x37e1, ((uint16_t)gpio << 8) | GPIO_MASK, NULL, 0);
}
/* Set select gpio bits */
dbg("%s - port %d, gpiob = 0x%.4x", __func__, port->number, gpio);
- /* FIXME: how about REQTYPE_HOST_TO_DEVICE instead of 0x40? */
- return cp210x_ctlmsg(port, 0xff, 0x40, 0x37e1, gpio, NULL, 0);
+ return cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_DEVICE,
+ 0x37e1, gpio, NULL, 0);
}
static int cp210x_gpioget(struct usb_serial_port *port, u8 *gpio)
dbg("%s - port %d", __func__, port->number);
- /* FIXME: how about REQTYPE_DEVICE_TO_HOST instead of 0xc0? */
- ret = cp210x_ctlmsg(port, 0xff, 0xc0, 0x00c2, 0, gpio, 1);
+ ret = cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_HOST,
+ 0x00c2, 0, gpio, 1);
dbg("%s - gpio = 0x%.2x (%d)", __func__, *gpio, ret);
lconfig.suspend.lowPower = 0;
lconfig.reset.lowPower = 0;
- ret = cp210x_ctlmsg(port, 0xff, 0x40, 0x370c, 0, &lconfig,
- sizeof(struct cp210x_port_config));
+ ret = cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_DEVICE, 0x370c,
+ 0, &lconfig, sizeof(struct cp210x_port_config));
if (ret == sizeof(struct cp210x_port_config))
return 0;
else if (ret >= 0)
dbg("%s", __func__);
- ret = cp210x_ctlmsg(port, 0xff, 0xc0, 0x370c, 0, config,
- sizeof(struct cp210x_port_config));
+ ret = cp210x_ctlmsg(port, 0xff, REQTYPE_CTL_TO_HOST,
+ 0x370c, 0, config, sizeof(struct cp210x_port_config));
if (ret == sizeof(struct cp210x_port_config)) {
/* Words from cp210x are MSB */
config->reset.mode = be16_to_cpu(config->reset.mode);