Commit a7fefd10 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Staging: aten2011: remove function prototypes.

Reorginize functions to get rid of forward prototypes so they are no
longer needed.

Cc: Russell Lang <gsview@ghostgum.com.au>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent a6364092
......@@ -88,20 +88,12 @@
#define ATENINTL_DEVICE_ID_2011 0x2011
#define ATENINTL_DEVICE_ID_7820 0x7820
/* different USB-serial Adapter's ID's table */
static struct usb_device_id ATENINTL_port_id_table [] = {
static struct usb_device_id id_table [] = {
{ USB_DEVICE(USB_VENDOR_ID_ATENINTL,ATENINTL_DEVICE_ID_2011) },
{ USB_DEVICE(USB_VENDOR_ID_ATENINTL,ATENINTL_DEVICE_ID_7820) },
{ } /* terminating entry */
};
static __devinitdata struct usb_device_id id_table_combined [] = {
{ USB_DEVICE(USB_VENDOR_ID_ATENINTL,ATENINTL_DEVICE_ID_2011) },
{ USB_DEVICE(USB_VENDOR_ID_ATENINTL,ATENINTL_DEVICE_ID_7820) },
{ } /* terminating entry */
};
MODULE_DEVICE_TABLE (usb, id_table_combined);
MODULE_DEVICE_TABLE (usb, id_table);
/* This structure holds all of the local port information */
struct ATENINTL_port
......@@ -177,39 +169,12 @@ struct ATENINTL_serial
unsigned char status_polling_started;
};
static void ATEN2011_interrupt_callback(struct urb *urb);
static void ATEN2011_bulk_in_callback(struct urb *urb);
static void ATEN2011_bulk_out_data_callback(struct urb *urb);
static void ATEN2011_control_callback(struct urb *urb);
static int ATEN2011_get_reg(struct ATENINTL_port *ATEN,__u16 Wval, __u16 reg, __u16 * val);
int handle_newMsr(struct ATENINTL_port *port,__u8 newMsr);
int handle_newLsr(struct ATENINTL_port *port,__u8 newLsr);
static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, struct file *filp);
static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, struct file *filp);
static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, const unsigned char *data, int count);
static int ATEN2011_write_room(struct tty_struct *tty);
static int ATEN2011_chars_in_buffer(struct tty_struct *tty);
static void ATEN2011_throttle(struct tty_struct *tty);
static void ATEN2011_unthrottle(struct tty_struct *tty);
static void ATEN2011_set_termios(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios *old_termios);
static int ATEN2011_tiocmset(struct tty_struct *tty, struct file *file,
unsigned int set, unsigned int clear);
static int ATEN2011_tiocmget(struct tty_struct *tty, struct file *file);
static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, unsigned int cmd, unsigned long arg);
static void ATEN2011_break(struct tty_struct *tty, int break_state);
static int ATEN2011_startup(struct usb_serial *serial);
static void ATEN2011_shutdown(struct usb_serial *serial);
static int ATEN2011_calc_num_ports(struct usb_serial *serial);
static int ATEN2011_calc_baud_rate_divisor(int baudRate, int *divisor,__u16 *clk_sel_val);
static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port *ATEN2011_port, int baudRate);
static void ATEN2011_change_port_settings(struct tty_struct *tty, struct ATENINTL_port *ATEN2011_port, struct ktermios *old_termios);
static void ATEN2011_block_until_chase_response(struct tty_struct *tty, struct ATENINTL_port *ATEN2011_port);
static void ATEN2011_block_until_tx_empty(struct tty_struct *tty, struct ATENINTL_port *ATEN2011_port);
int __init ATENINTL2011_init(void);
void __exit ATENINTL2011_exit(void);
static void ATEN2011_set_termios(struct tty_struct *tty,
struct usb_serial_port *port,
struct ktermios *old_termios);
static void ATEN2011_change_port_settings(struct tty_struct *tty,
struct ATENINTL_port *ATEN2011_port,
struct ktermios *old_termios);
/*************************************
* Bit definitions for each register *
......@@ -300,7 +265,7 @@ static int ATEN2011_set_Uart_Reg(struct usb_serial_port *port, __u16 reg,
static int ATEN2011_get_Uart_Reg(struct usb_serial_port *port, __u16 reg,
__u16 * val);
void ATEN2011_Dump_serial_port(struct ATENINTL_port *ATEN2011_port);
static void ATEN2011_Dump_serial_port(struct ATENINTL_port *ATEN2011_port);
static inline void ATEN2011_set_serial_private(struct usb_serial *serial,
......@@ -439,7 +404,7 @@ static int ATEN2011_get_Uart_Reg(struct usb_serial_port *port, __u16 reg,
return ret;
}
void ATEN2011_Dump_serial_port(struct ATENINTL_port *ATEN2011_port)
static void ATEN2011_Dump_serial_port(struct ATENINTL_port *ATEN2011_port)
{
DPRINTK("***************************************\n");
......@@ -451,45 +416,138 @@ void ATEN2011_Dump_serial_port(struct ATENINTL_port *ATEN2011_port)
}
static struct usb_serial_driver ATENINTL2011_4port_device = {
.driver = {
.owner = THIS_MODULE,
.name = "ATEN2011",
},
.description = DRIVER_DESC,
.id_table = ATENINTL_port_id_table,
.open = ATEN2011_open,
.close = ATEN2011_close,
.write = ATEN2011_write,
.write_room = ATEN2011_write_room,
.chars_in_buffer = ATEN2011_chars_in_buffer,
.throttle = ATEN2011_throttle,
.unthrottle = ATEN2011_unthrottle,
.calc_num_ports = ATEN2011_calc_num_ports,
static int handle_newMsr(struct ATENINTL_port *port, __u8 newMsr)
{
struct ATENINTL_port *ATEN2011_port;
struct async_icount *icount;
ATEN2011_port = port;
icount = &ATEN2011_port->icount;
if (newMsr &
(ATEN_MSR_DELTA_CTS | ATEN_MSR_DELTA_DSR | ATEN_MSR_DELTA_RI |
ATEN_MSR_DELTA_CD)) {
icount = &ATEN2011_port->icount;
#ifdef ATENSerialProbe
.probe = ATEN2011_serial_probe,
#endif
.ioctl = ATEN2011_ioctl,
.set_termios = ATEN2011_set_termios,
.break_ctl = ATEN2011_break,
// .break_ctl = ATEN2011_break_ctl,
.tiocmget = ATEN2011_tiocmget,
.tiocmset = ATEN2011_tiocmset,
.attach = ATEN2011_startup,
.shutdown = ATEN2011_shutdown,
.read_bulk_callback = ATEN2011_bulk_in_callback,
.read_int_callback = ATEN2011_interrupt_callback,
};
/* update input line counters */
if (newMsr & ATEN_MSR_DELTA_CTS) {
icount->cts++;
}
if (newMsr & ATEN_MSR_DELTA_DSR) {
icount->dsr++;
}
if (newMsr & ATEN_MSR_DELTA_CD) {
icount->dcd++;
}
if (newMsr & ATEN_MSR_DELTA_RI) {
icount->rng++;
}
}
static struct usb_driver io_driver = {
.name = "ATEN2011",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
.id_table = id_table_combined,
};
return 0;
}
static int handle_newLsr(struct ATENINTL_port *port, __u8 newLsr)
{
struct async_icount *icount;
dbg("%s - %02x", __FUNCTION__, newLsr);
if (newLsr & SERIAL_LSR_BI) {
//
// Parity and Framing errors only count if they
// occur exclusive of a break being
// received.
//
newLsr &= (__u8) (SERIAL_LSR_OE | SERIAL_LSR_BI);
}
/* update input line counters */
icount = &port->icount;
if (newLsr & SERIAL_LSR_BI) {
icount->brk++;
}
if (newLsr & SERIAL_LSR_OE) {
icount->overrun++;
}
if (newLsr & SERIAL_LSR_PE) {
icount->parity++;
}
if (newLsr & SERIAL_LSR_FE) {
icount->frame++;
}
return 0;
}
static void ATEN2011_control_callback(struct urb *urb)
{
unsigned char *data;
struct ATENINTL_port *ATEN2011_port;
__u8 regval = 0x0;
if (!urb) {
DPRINTK("%s", "Invalid Pointer !!!!:\n");
return;
}
switch (urb->status) {
case 0:
/* success */
break;
case -ECONNRESET:
case -ENOENT:
case -ESHUTDOWN:
/* this urb is terminated, clean up */
dbg("%s - urb shutting down with status: %d", __FUNCTION__,
urb->status);
return;
default:
dbg("%s - nonzero urb status received: %d", __FUNCTION__,
urb->status);
goto exit;
}
ATEN2011_port = (struct ATENINTL_port *)urb->context;
DPRINTK("%s urb buffer size is %d\n", __FUNCTION__, urb->actual_length);
DPRINTK("%s ATEN2011_port->MsrLsr is %d port %d\n", __FUNCTION__,
ATEN2011_port->MsrLsr, ATEN2011_port->port_num);
data = urb->transfer_buffer;
regval = (__u8) data[0];
DPRINTK("%s data is %x\n", __FUNCTION__, regval);
if (ATEN2011_port->MsrLsr == 0)
handle_newMsr(ATEN2011_port, regval);
else if (ATEN2011_port->MsrLsr == 1)
handle_newLsr(ATEN2011_port, regval);
exit:
return;
}
static int ATEN2011_get_reg(struct ATENINTL_port *ATEN, __u16 Wval, __u16 reg,
__u16 * val)
{
struct usb_device *dev = ATEN->port->serial->dev;
struct usb_ctrlrequest *dr = NULL;
unsigned char *buffer = NULL;
int ret = 0;
buffer = (__u8 *) ATEN->ctrl_buf;
// dr=(struct usb_ctrlrequest *)(buffer);
dr = (void *)(buffer + 2);
dr->bRequestType = ATEN_RD_RTYPE;
dr->bRequest = ATEN_RDREQ;
dr->wValue = cpu_to_le16(Wval); //0;
dr->wIndex = cpu_to_le16(reg);
dr->wLength = cpu_to_le16(2);
usb_fill_control_urb(ATEN->control_urb, dev, usb_rcvctrlpipe(dev, 0),
(unsigned char *)dr, buffer, 2,
ATEN2011_control_callback, ATEN);
ATEN->control_urb->transfer_buffer_length = 2;
ret = usb_submit_urb(ATEN->control_urb, GFP_ATOMIC);
return ret;
}
//#ifdef ATEN2011
static void ATEN2011_interrupt_callback(struct urb *urb)
{
int result;
......@@ -625,139 +683,6 @@ static void ATEN2011_interrupt_callback(struct urb *urb)
}
//#endif
static void ATEN2011_control_callback(struct urb *urb)
{
unsigned char *data;
struct ATENINTL_port *ATEN2011_port;
__u8 regval = 0x0;
if (!urb) {
DPRINTK("%s", "Invalid Pointer !!!!:\n");
return;
}
switch (urb->status) {
case 0:
/* success */
break;
case -ECONNRESET:
case -ENOENT:
case -ESHUTDOWN:
/* this urb is terminated, clean up */
dbg("%s - urb shutting down with status: %d", __FUNCTION__,
urb->status);
return;
default:
dbg("%s - nonzero urb status received: %d", __FUNCTION__,
urb->status);
goto exit;
}
ATEN2011_port = (struct ATENINTL_port *)urb->context;
DPRINTK("%s urb buffer size is %d\n", __FUNCTION__, urb->actual_length);
DPRINTK("%s ATEN2011_port->MsrLsr is %d port %d\n", __FUNCTION__,
ATEN2011_port->MsrLsr, ATEN2011_port->port_num);
data = urb->transfer_buffer;
regval = (__u8) data[0];
DPRINTK("%s data is %x\n", __FUNCTION__, regval);
if (ATEN2011_port->MsrLsr == 0)
handle_newMsr(ATEN2011_port, regval);
else if (ATEN2011_port->MsrLsr == 1)
handle_newLsr(ATEN2011_port, regval);
exit:
return;
}
int handle_newMsr(struct ATENINTL_port *port, __u8 newMsr)
{
struct ATENINTL_port *ATEN2011_port;
struct async_icount *icount;
ATEN2011_port = port;
icount = &ATEN2011_port->icount;
if (newMsr &
(ATEN_MSR_DELTA_CTS | ATEN_MSR_DELTA_DSR | ATEN_MSR_DELTA_RI |
ATEN_MSR_DELTA_CD)) {
icount = &ATEN2011_port->icount;
/* update input line counters */
if (newMsr & ATEN_MSR_DELTA_CTS) {
icount->cts++;
}
if (newMsr & ATEN_MSR_DELTA_DSR) {
icount->dsr++;
}
if (newMsr & ATEN_MSR_DELTA_CD) {
icount->dcd++;
}
if (newMsr & ATEN_MSR_DELTA_RI) {
icount->rng++;
}
}
return 0;
}
int handle_newLsr(struct ATENINTL_port *port, __u8 newLsr)
{
struct async_icount *icount;
dbg("%s - %02x", __FUNCTION__, newLsr);
if (newLsr & SERIAL_LSR_BI) {
//
// Parity and Framing errors only count if they
// occur exclusive of a break being
// received.
//
newLsr &= (__u8) (SERIAL_LSR_OE | SERIAL_LSR_BI);
}
/* update input line counters */
icount = &port->icount;
if (newLsr & SERIAL_LSR_BI) {
icount->brk++;
}
if (newLsr & SERIAL_LSR_OE) {
icount->overrun++;
}
if (newLsr & SERIAL_LSR_PE) {
icount->parity++;
}
if (newLsr & SERIAL_LSR_FE) {
icount->frame++;
}
return 0;
}
static int ATEN2011_get_reg(struct ATENINTL_port *ATEN, __u16 Wval, __u16 reg,
__u16 * val)
{
struct usb_device *dev = ATEN->port->serial->dev;
struct usb_ctrlrequest *dr = NULL;
unsigned char *buffer = NULL;
int ret = 0;
buffer = (__u8 *) ATEN->ctrl_buf;
// dr=(struct usb_ctrlrequest *)(buffer);
dr = (void *)(buffer + 2);
dr->bRequestType = ATEN_RD_RTYPE;
dr->bRequest = ATEN_RDREQ;
dr->wValue = cpu_to_le16(Wval); //0;
dr->wIndex = cpu_to_le16(reg);
dr->wLength = cpu_to_le16(2);
usb_fill_control_urb(ATEN->control_urb, dev, usb_rcvctrlpipe(dev, 0),
(unsigned char *)dr, buffer, 2,
ATEN2011_control_callback, ATEN);
ATEN->control_urb->transfer_buffer_length = 2;
ret = usb_submit_urb(ATEN->control_urb, GFP_ATOMIC);
return ret;
}
static void ATEN2011_bulk_in_callback(struct urb *urb)
{
int status;
......@@ -1278,29 +1203,91 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port,
init_waitqueue_head(&ATEN2011_port->delta_msr_wait);
init_waitqueue_head(&ATEN2011_port->wait_command);
/* initialize our icount structure */
memset(&(ATEN2011_port->icount), 0x00, sizeof(ATEN2011_port->icount));
/* initialize our icount structure */
memset(&(ATEN2011_port->icount), 0x00, sizeof(ATEN2011_port->icount));
/* initialize our port settings */
ATEN2011_port->shadowMCR = MCR_MASTER_IE; /* Must set to enable ints! */
ATEN2011_port->chaseResponsePending = 0;
/* send a open port command */
ATEN2011_port->openPending = 0;
ATEN2011_port->open = 1;
//ATEN2011_change_port_settings(ATEN2011_port,old_termios);
/* Setup termios */
ATEN2011_set_termios(tty, port, &tmp_termios);
ATEN2011_port->rxBytesAvail = 0x0;
ATEN2011_port->icount.tx = 0;
ATEN2011_port->icount.rx = 0;
DPRINTK
("\n\nusb_serial serial:%x ATEN2011_port:%x\nATEN2011_serial:%x usb_serial_port port:%x\n\n",
(unsigned int)serial, (unsigned int)ATEN2011_port,
(unsigned int)ATEN2011_serial, (unsigned int)port);
return 0;
}
static int ATEN2011_chars_in_buffer(struct tty_struct *tty)
{
struct usb_serial_port *port = tty->driver_data;
int i;
int chars = 0;
struct ATENINTL_port *ATEN2011_port;
//DPRINTK("%s \n"," ATEN2011_chars_in_buffer:entering ...........");
if (ATEN2011_port_paranoia_check(port, __FUNCTION__)) {
DPRINTK("%s", "Invalid port \n");
return -1;
}
ATEN2011_port = ATEN2011_get_port_private(port);
if (ATEN2011_port == NULL) {
DPRINTK("%s \n", "ATEN2011_break:leaving ...........");
return -1;
}
for (i = 0; i < NUM_URBS; ++i) {
if (ATEN2011_port->write_urb_pool[i]->status == -EINPROGRESS) {
chars += URB_TRANSFER_BUFFER_SIZE;
}
}
dbg("%s - returns %d", __FUNCTION__, chars);
return (chars);
}
/* initialize our port settings */
ATEN2011_port->shadowMCR = MCR_MASTER_IE; /* Must set to enable ints! */
ATEN2011_port->chaseResponsePending = 0;
/* send a open port command */
ATEN2011_port->openPending = 0;
ATEN2011_port->open = 1;
//ATEN2011_change_port_settings(ATEN2011_port,old_termios);
/* Setup termios */
ATEN2011_set_termios(tty, port, &tmp_termios);
ATEN2011_port->rxBytesAvail = 0x0;
ATEN2011_port->icount.tx = 0;
ATEN2011_port->icount.rx = 0;
static void ATEN2011_block_until_tx_empty(struct tty_struct *tty,
struct ATENINTL_port *ATEN2011_port)
{
int timeout = HZ / 10;
int wait = 30;
int count;
DPRINTK
("\n\nusb_serial serial:%x ATEN2011_port:%x\nATEN2011_serial:%x usb_serial_port port:%x\n\n",
(unsigned int)serial, (unsigned int)ATEN2011_port,
(unsigned int)ATEN2011_serial, (unsigned int)port);
while (1) {
return 0;
count = ATEN2011_chars_in_buffer(tty);
/* Check for Buffer status */
if (count <= 0) {
return;
}
/* Block the thread for a while */
interruptible_sleep_on_timeout(&ATEN2011_port->wait_chase,
timeout);
/* No activity.. count down section */
wait--;
if (wait == 0) {
dbg("%s - TIMEOUT", __FUNCTION__);
return;
} else {
/* Reset timout value back to seconds */
wait = 30;
}
}
}
static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port,
......@@ -1407,6 +1394,39 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port,
}
static void ATEN2011_block_until_chase_response(struct tty_struct *tty,
struct ATENINTL_port
*ATEN2011_port)
{
int timeout = 1 * HZ;
int wait = 10;
int count;
while (1) {
count = ATEN2011_chars_in_buffer(tty);
/* Check for Buffer status */
if (count <= 0) {
ATEN2011_port->chaseResponsePending = 0;
return;
}
/* Block the thread for a while */
interruptible_sleep_on_timeout(&ATEN2011_port->wait_chase,
timeout);
/* No activity.. count down section */
wait--;
if (wait == 0) {
dbg("%s - TIMEOUT", __FUNCTION__);
return;
} else {
/* Reset timout value back to seconds */
wait = 10;
}
}
}
static void ATEN2011_break(struct tty_struct *tty, int break_state)
{
struct usb_serial_port *port = tty->driver_data;
......@@ -1460,71 +1480,6 @@ static void ATEN2011_break(struct tty_struct *tty, int break_state)
return;
}
static void ATEN2011_block_until_chase_response(struct tty_struct *tty,
struct ATENINTL_port
*ATEN2011_port)
{
int timeout = 1 * HZ;
int wait = 10;
int count;
while (1) {
count = ATEN2011_chars_in_buffer(tty);
/* Check for Buffer status */
if (count <= 0) {
ATEN2011_port->chaseResponsePending = 0;
return;
}
/* Block the thread for a while */
interruptible_sleep_on_timeout(&ATEN2011_port->wait_chase,
timeout);
/* No activity.. count down section */
wait--;
if (wait == 0) {
dbg("%s - TIMEOUT", __FUNCTION__);
return;
} else {
/* Reset timout value back to seconds */
wait = 10;
}
}
}
static void ATEN2011_block_until_tx_empty(struct tty_struct *tty,
struct ATENINTL_port *ATEN2011_port)
{
int timeout = HZ / 10;
int wait = 30;
int count;
while (1) {
count = ATEN2011_chars_in_buffer(tty);
/* Check for Buffer status */
if (count <= 0) {
return;
}
/* Block the thread for a while */
interruptible_sleep_on_timeout(&ATEN2011_port->wait_chase,
timeout);
/* No activity.. count down section */
wait--;
if (wait == 0) {
dbg("%s - TIMEOUT", __FUNCTION__);
return;
} else {
/* Reset timout value back to seconds */
wait = 30;
}
}
}
static int ATEN2011_write_room(struct tty_struct *tty)
{
struct usb_serial_port *port = tty->driver_data;
......@@ -1557,36 +1512,6 @@ static int ATEN2011_write_room(struct tty_struct *tty)
}
static int ATEN2011_chars_in_buffer(struct tty_struct *tty)
{
struct usb_serial_port *port = tty->driver_data;
int i;
int chars = 0;
struct ATENINTL_port *ATEN2011_port;
//DPRINTK("%s \n"," ATEN2011_chars_in_buffer:entering ...........");
if (ATEN2011_port_paranoia_check(port, __FUNCTION__)) {
DPRINTK("%s", "Invalid port \n");
return -1;
}
ATEN2011_port = ATEN2011_get_port_private(port);
if (ATEN2011_port == NULL) {
DPRINTK("%s \n", "ATEN2011_break:leaving ...........");
return -1;
}
for (i = 0; i < NUM_URBS; ++i) {
if (ATEN2011_port->write_urb_pool[i]->status == -EINPROGRESS) {
chars += URB_TRANSFER_BUFFER_SIZE;
}
}
dbg("%s - returns %d", __FUNCTION__, chars);
return (chars);
}
static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port,
const unsigned char *data, int count)
{
......@@ -2256,6 +2181,43 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file,
return -ENOIOCTLCMD;
}
static int ATEN2011_calc_baud_rate_divisor(int baudRate, int *divisor,
__u16 * clk_sel_val)
{
//int i;
//__u16 custom,round1, round;
dbg("%s - %d", __FUNCTION__, baudRate);
if (baudRate <= 115200) {
*divisor = 115200 / baudRate;
*clk_sel_val = 0x0;
}
if ((baudRate > 115200) && (baudRate <= 230400)) {
*divisor = 230400 / baudRate;
*clk_sel_val = 0x10;
} else if ((baudRate > 230400) && (baudRate <= 403200)) {
*divisor = 403200 / baudRate;
*clk_sel_val = 0x20;
} else if ((baudRate > 403200) && (baudRate <= 460800)) {
*divisor = 460800 / baudRate;
*clk_sel_val = 0x30;
} else if ((baudRate > 460800) && (baudRate <= 806400)) {
*divisor = 806400 / baudRate;
*clk_sel_val = 0x40;
} else if ((baudRate > 806400) && (baudRate <= 921600)) {
*divisor = 921600 / baudRate;
*clk_sel_val = 0x50;
} else if ((baudRate > 921600) && (baudRate <= 1572864)) {
*divisor = 1572864 / baudRate;
*clk_sel_val = 0x60;
} else if ((baudRate > 1572864) && (baudRate <= 3145728)) {
*divisor = 3145728 / baudRate;
*clk_sel_val = 0x70;
}
return 0;
}
static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port
*ATEN2011_port, int baudRate)
{
......@@ -2379,43 +2341,6 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port
return status;
}
static int ATEN2011_calc_baud_rate_divisor(int baudRate, int *divisor,
__u16 * clk_sel_val)
{
//int i;
//__u16 custom,round1, round;
dbg("%s - %d", __FUNCTION__, baudRate);
if (baudRate <= 115200) {
*divisor = 115200 / baudRate;
*clk_sel_val = 0x0;
}
if ((baudRate > 115200) && (baudRate <= 230400)) {
*divisor = 230400 / baudRate;
*clk_sel_val = 0x10;
} else if ((baudRate > 230400) && (baudRate <= 403200)) {
*divisor = 403200 / baudRate;
*clk_sel_val = 0x20;
} else if ((baudRate > 403200) && (baudRate <= 460800)) {
*divisor = 460800 / baudRate;
*clk_sel_val = 0x30;
} else if ((baudRate > 460800) && (baudRate <= 806400)) {
*divisor = 806400 / baudRate;
*clk_sel_val = 0x40;
} else if ((baudRate > 806400) && (baudRate <= 921600)) {
*divisor = 921600 / baudRate;
*clk_sel_val = 0x50;
} else if ((baudRate > 921600) && (baudRate <= 1572864)) {
*divisor = 1572864 / baudRate;
*clk_sel_val = 0x60;
} else if ((baudRate > 1572864) && (baudRate <= 3145728)) {
*divisor = 3145728 / baudRate;
*clk_sel_val = 0x70;
}
return 0;
}
static void ATEN2011_change_port_settings(struct tty_struct *tty,
struct ATENINTL_port *ATEN2011_port,
struct ktermios *old_termios)
......@@ -2988,7 +2913,41 @@ static struct usb_serial *ATEN2011_get_usb_serial(struct usb_serial_port *port,
return port->serial;
}
int __init ATENINTL2011_init(void)
static struct usb_serial_driver ATENINTL2011_4port_device = {
.driver = {
.owner = THIS_MODULE,
.name = "aten2011",
},
.description = DRIVER_DESC,
.id_table = id_table,
.open = ATEN2011_open,
.close = ATEN2011_close,
.write = ATEN2011_write,
.write_room = ATEN2011_write_room,
.chars_in_buffer = ATEN2011_chars_in_buffer,
.throttle = ATEN2011_throttle,
.unthrottle = ATEN2011_unthrottle,
.calc_num_ports = ATEN2011_calc_num_ports,
.ioctl = ATEN2011_ioctl,
.set_termios = ATEN2011_set_termios,
.break_ctl = ATEN2011_break,
.tiocmget = ATEN2011_tiocmget,
.tiocmset = ATEN2011_tiocmset,
.attach = ATEN2011_startup,
.shutdown = ATEN2011_shutdown,
.read_bulk_callback = ATEN2011_bulk_in_callback,
.read_int_callback = ATEN2011_interrupt_callback,
};
static struct usb_driver aten_driver = {
.name = "aten2011",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
.id_table = id_table,
};
static int __init ATENINTL2011_init(void)
{
int retval;
......@@ -3005,7 +2964,7 @@ int __init ATENINTL2011_init(void)
DRIVER_DESC " " DRIVER_VERSION "\n");
/* Register with the usb */
retval = usb_register(&io_driver);
retval = usb_register(&aten_driver);
if (retval)
goto failed_usb_register;
......@@ -3023,12 +2982,12 @@ int __init ATENINTL2011_init(void)
return retval;
}
void __exit ATENINTL2011_exit(void)
static void __exit ATENINTL2011_exit(void)
{
DPRINTK("%s \n", " ATEN2011_exit :entering..........");
usb_deregister(&io_driver);
usb_deregister(&aten_driver);
usb_serial_deregister(&ATENINTL2011_4port_device);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment