/*
+ * 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)
  *
  *  - 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
 #include <linux/module.h>
 #include <linux/usb.h>
 #include <linux/usb/serial.h>
+#include <linux/serial.h>
+#include <asm/uaccess.h>
 
 
 static int debug;
 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;
 }