if (!kbuf || !ubuf || !klen)
return 0;
if (copy_from_user(&t, (struct cp210x_buffer __user *)ubuf, sizeof(t)))
return 0;
if (!kbuf || !ubuf || !klen)
return 0;
if (copy_from_user(&t, (struct cp210x_buffer __user *)ubuf, sizeof(t)))
return 0;
- if (t.len < klen)
- klen = t.len;
- str = kbuf + klen - t.len;
- if (copy_from_user(kbuf + klen - t.len, (u8 __user *)t.buf, klen))
+ slen = (klen - 2) / 2;
+ if (t.len < slen)
+ slen = t.len;
+ str = kbuf + klen - slen;
+ if (copy_from_user(str, (u8 __user *)t.buf, slen))
- return make_usb_string(kbuf, klen, str, t.len);
+ return make_usb_string(kbuf, klen, str, slen);
return -ENOMEM;
if (requestype & 0x80) {
ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request,
return -ENOMEM;
if (requestype & 0x80) {
ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0), request,
- dev_printk(KERN_DEBUG, &dev->dev, "cp210x: control failed cmd rqt %u "
- "rq %u len %u ret %d\n", requestype, request, size, ret);
+ dev_printk(KERN_DEBUG, &dev->dev,
+ "cp210x: ctl failed cmd rqt %u rq %u len %u ret %d\n",
+ requestype, request, size, ret);
- /* Is this better than usb_device_reset? It may be. Once a client issues
- * the reset ioctl, it must disconnect and reconnect, since the USB
- * connections are torn down. We also ignore the error return, since
- * the part resets and doesn't send one...
+ /* Is this better than usb_device_reset? It may be. Once a client
+ * issues the reset ioctl, it must disconnect and reconnect, since the
+ * USB connections are torn down. We also ignore the error return,
+ * since the part resets and doesn't send one...
*/
cp210x_ctlmsg(port, 0xff, 0x40, 0x0008, 0x00, NULL, 0);
#else
*/
cp210x_ctlmsg(port, 0xff, 0x40, 0x0008, 0x00, NULL, 0);
#else
lconfig.reset.mode = cpu_to_be16(config->reset.mode);
lconfig.reset.latch = cpu_to_be16(config->reset.latch);
lconfig.suspend.mode = cpu_to_be16(config->suspend.mode);
lconfig.reset.mode = cpu_to_be16(config->reset.mode);
lconfig.reset.latch = cpu_to_be16(config->reset.latch);
lconfig.suspend.mode = cpu_to_be16(config->suspend.mode);
ret = cp210x_ctlmsg(port, 0xff, 0xc0, 0x370c, 0, config,
sizeof(struct cp210x_port_config));
if (ret == sizeof(struct cp210x_port_config)) {
ret = cp210x_ctlmsg(port, 0xff, 0xc0, 0x370c, 0, config,
sizeof(struct cp210x_port_config));
if (ret == sizeof(struct cp210x_port_config)) {
config->reset.mode = be16_to_cpu(config->reset.mode);
config->reset.lowPower = be16_to_cpu(config->reset.lowPower);
config->reset.latch = be16_to_cpu(config->reset.latch);
config->reset.mode = be16_to_cpu(config->reset.mode);
config->reset.lowPower = be16_to_cpu(config->reset.lowPower);
config->reset.latch = be16_to_cpu(config->reset.latch);
- if (cp210x_tiocmset(tty, file, cmd==TIOCMBIC ? 0 : val,
- cmd==TIOCMBIC ? val : 0))
+ if (cp210x_tiocmset(tty, file, (cmd == TIOCMBIC) ? 0 : val,
+ (cmd == TIOCMBIC) ? val : 0))
if (cp210x_get_partnum(port) == CP210x_PART_CP2103) {
u8 gpio = 0;
if (!cp210x_gpioget(port, &gpio) && !copy_to_user(
if (cp210x_get_partnum(port) == CP210x_PART_CP2103) {
u8 gpio = 0;
if (!cp210x_gpioget(port, &gpio) && !copy_to_user(
if (cp210x_get_partnum(port) == CP210x_PART_CP2103 &&
!cp210x_gpioset(port, arg))
return 0;
return -EFAULT;
break;
if (cp210x_get_partnum(port) == CP210x_PART_CP2103 &&
!cp210x_gpioset(port, arg))
return 0;
return -EFAULT;
break;
- !cp210x_gpiosetb(port, (cmd==IOCTL_GPIOBIC) ? 0 : arg,
- (cmd==IOCTL_GPIOBIC) ? arg : 0))
+ !cp210x_gpiosetb(port,
+ (cmd == CP210x_IOCTL_GPIOBIC) ? 0 : arg,
+ (cmd == CP210x_IOCTL_GPIOBIC) ? arg : 0))
{
struct cp210x_port_config config;
if (!cp210x_portconfget(port, &config) && !copy_to_user(
{
struct cp210x_port_config config;
if (!cp210x_portconfget(port, &config) && !copy_to_user(
{
struct cp210x_port_config config;
if (!copy_from_user(&config, (struct cp210x_port_config __user *)arg,
{
struct cp210x_port_config config;
if (!copy_from_user(&config, (struct cp210x_port_config __user *)arg,
if (cp210x_has_setmfg()) {
char usbstr[USBSTRLEN(CP210x_MAX_MFG_STRLEN)];
size_t len = cp210x_usbstr_from_user(usbstr, arg,
if (cp210x_has_setmfg()) {
char usbstr[USBSTRLEN(CP210x_MAX_MFG_STRLEN)];
size_t len = cp210x_usbstr_from_user(usbstr, arg,
{
char usbstr[USBSTRLEN(CP210x_MAX_PRODUCT_STRLEN)];
size_t len = cp210x_usbstr_from_user(usbstr, arg,
{
char usbstr[USBSTRLEN(CP210x_MAX_PRODUCT_STRLEN)];
size_t len = cp210x_usbstr_from_user(usbstr, arg,
{
char usbstr[USBSTRLEN(CP210x_MAX_SERIAL_STRLEN)];
size_t len = cp210x_usbstr_from_user(usbstr, arg,
{
char usbstr[USBSTRLEN(CP210x_MAX_SERIAL_STRLEN)];
size_t len = cp210x_usbstr_from_user(usbstr, arg,