Skip to content

Commit

Permalink
USB: ark3116: Add TIOCGSERIAL and TIOCSSERIAL ioctl calls.
Browse files Browse the repository at this point in the history
Add (dummy?) support for TIOCGSERIAL and TIOCSSERIAL ioctl calls to the USB
serial driver file `ark3116.c'.  This is sufficient for me to run wvdial
successfully, receive my email, and do webbrowsing with firefox.  On the
other hand, running the cvs program to update archives seems not to work,
and the traceroute command sometimes says

  send failed: No buffer space available

Looks like a buffering problem...  My knowledge of serial device drivers is
zero, so I can't fix this -- I just did a cut'n'paste from other USB serial
drivers...

Signed-off-by: Werner Lemberg <wl@gnu.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
Werner Lemberg authored and Greg Kroah-Hartman committed Sep 27, 2006
1 parent bfb2c96 commit 2f430b4
Showing 1 changed file with 31 additions and 3 deletions.
34 changes: 31 additions & 3 deletions drivers/usb/serial/ark3116.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
/*
* Copyright (C) 2006
* Simon Schulz (ark3116_driver <at> auctionant.de)
*
* ark3116
* - implements a driver for the arkmicro ark3116 chipset (vendor=0x6547,
* productid=0x0232) (used in a datacable called KQ-U8A)
Expand All @@ -8,8 +11,6 @@
*
* - based on logs created by usbsnoopy
*
* Author : Simon Schulz [ark3116_driver<AT>auctionant.de]
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
Expand All @@ -22,6 +23,8 @@
#include <linux/module.h>
#include <linux/usb.h>
#include <linux/usb/serial.h>
#include <linux/serial.h>
#include <asm/uaccess.h>


static int debug;
Expand Down Expand Up @@ -379,7 +382,32 @@ static int ark3116_open(struct usb_serial_port *port, struct file *filp)
static int ark3116_ioctl(struct usb_serial_port *port, struct file *file,
unsigned int cmd, unsigned long arg)
{
dbg("ioctl not supported yet...");
struct serial_struct serstruct;
void __user *user_arg = (void __user *)arg;

switch (cmd) {
case TIOCGSERIAL:
/* XXX: Some of these values are probably wrong. */
memset(&serstruct, 0, sizeof (serstruct));
serstruct.type = PORT_16654;
serstruct.line = port->serial->minor;
serstruct.port = port->number;
serstruct.custom_divisor = 0;
serstruct.baud_base = 460800;

if (copy_to_user(user_arg, &serstruct, sizeof (serstruct)))
return -EFAULT;

return 0;
case TIOCSSERIAL:
if (copy_from_user(&serstruct, user_arg, sizeof (serstruct)))
return -EFAULT;
return 0;
default:
dbg("%s cmd 0x%04x not supported", __FUNCTION__, cmd);
break;
}

return -ENOIOCTLCMD;
}

Expand Down

0 comments on commit 2f430b4

Please sign in to comment.