Loading drivers/staging/uc2322/aten2011.c +99 −142 Original line number Diff line number Diff line Loading @@ -117,9 +117,8 @@ struct ATENINTL_port __u8 SpRegOffset; __u8 ControlRegOffset; __u8 DcrRegOffset; //for processing control URBS in interrupt context /* for processing control URBS in interrupt context */ struct urb *control_urb; // __le16 rx_creg; char *ctrl_buf; int MsrLsr; Loading @@ -141,10 +140,10 @@ struct ATENINTL_serial struct urb *read_urb; /* our bulk read urb */ __u8 bulk_out_endpoint; /* the bulk out endpoint handle */ struct usb_serial *serial; /* loop back to the owner of this object */ int ATEN2011_spectrum_2or4ports; //this says the number of ports in the device // Indicates about the no.of opened ports of an individual USB-serial adapater. int ATEN2011_spectrum_2or4ports; /* this says the number of ports in the device */ /* Indicates about the no.of opened ports of an individual USB-serial adapater. */ unsigned int NoOfOpenPorts; // a flag for Status endpoint polling /* a flag for Status endpoint polling */ unsigned char status_polling_started; }; Loading Loading @@ -350,11 +349,10 @@ static int handle_newLsr(struct ATENINTL_port *port, __u8 newLsr) 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. // /* * Parity and Framing errors only count if they occur exclusive * of a break being received. */ newLsr &= (__u8) (SERIAL_LSR_OE | SERIAL_LSR_BI); } Loading Loading @@ -430,11 +428,10 @@ static int ATEN2011_get_reg(struct ATENINTL_port *ATEN, __u16 Wval, __u16 reg, 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->wValue = cpu_to_le16(Wval); dr->wIndex = cpu_to_le16(reg); dr->wLength = cpu_to_le16(2); Loading @@ -459,12 +456,11 @@ static void ATEN2011_interrupt_callback(struct urb *urb) int i; __u16 wval; int minor; //printk("in the function ATEN2011_interrupt_callback Length %d, Data %x \n",urb->actual_length,(unsigned int)urb->transfer_buffer); DPRINTK("%s", " : Entering\n"); ATEN2011_serial = (struct ATENINTL_serial *)urb->context; if (!urb) // || ATEN2011_serial->status_polling_started == 0 ) { if (!urb) { DPRINTK("%s", "Invalid Pointer !!!!:\n"); return; } Loading @@ -488,7 +484,6 @@ static void ATEN2011_interrupt_callback(struct urb *urb) length = urb->actual_length; data = urb->transfer_buffer; //ATEN2011_serial= (struct ATENINTL_serial *)urb->context; serial = ATEN2011_serial->serial; /* ATENINTL get 5 bytes Loading @@ -513,12 +508,11 @@ static void ATEN2011_interrupt_callback(struct urb *urb) } else { sp[0] = (__u8) data[0]; sp[1] = (__u8) data[2]; //sp[2]=(__u8)data[2]; //sp[3]=(__u8)data[3]; /* sp[2]=(__u8)data[2]; */ /* sp[3]=(__u8)data[3]; */ st = (__u8) data[4]; } // printk("%s data is sp1:%x sp2:%x sp3:%x sp4:%x status:%x\n",__FUNCTION__,sp1,sp2,sp3,sp4,st); for (i = 0; i < serial->num_ports; i++) { ATEN2011_port = usb_get_serial_port_data(serial->port[i]); minor = serial->minor; Loading @@ -534,8 +528,6 @@ static void ATEN2011_interrupt_callback(struct urb *urb) (((__u16) serial->port[i]->number - (__u16) (minor)) + 1) << 8; if (ATEN2011_port->open != 0) { //printk("%s wval is:(for 2011) %x\n",__FUNCTION__,wval); if (sp[i] & 0x01) { DPRINTK("SP%d No Interrupt !!!\n", i); } else { Loading Loading @@ -596,8 +588,6 @@ static void ATEN2011_bulk_in_callback(struct urb *urb) if (urb->status) { DPRINTK("nonzero read bulk status received: %d", urb->status); // if(urb->status==84) //ThreadState=1; return; } Loading Loading @@ -630,7 +620,6 @@ static void ATEN2011_bulk_in_callback(struct urb *urb) ATEN2011_port->icount.rx += urb->actual_length; DPRINTK("ATEN2011_port->icount.rx is %d:\n", ATEN2011_port->icount.rx); //MATRIX } if (!ATEN2011_port->read_urb) { Loading Loading @@ -680,7 +669,7 @@ static void ATEN2011_bulk_out_data_callback(struct urb *urb) wake_up_interruptible(&tty->write_wait); } //schedule_work(&ATEN2011_port->port->work); /* schedule_work(&ATEN2011_port->port->work); */ tty_kref_put(tty); } Loading @@ -704,7 +693,6 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, int response; int j; struct usb_serial *serial; // struct usb_serial_port *port0; struct urb *urb; __u16 Data; int status; Loading @@ -713,7 +701,6 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios tmp_termios; int minor; //ATEN2011_serial->NoOfOpenPorts++; serial = port->serial; ATEN2011_port = usb_get_serial_port_data(port); Loading @@ -736,17 +723,14 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, ATEN2011_port->control_urb=kmalloc(sizeof(struct urb),GFP_KERNEL); } */ // port0 = serial->port[0]; ATEN2011_serial = usb_get_serial_data(serial); if (ATEN2011_serial == NULL) //|| port0 == NULL) { if (ATEN2011_serial == NULL) { return -ENODEV; } // increment the number of opened ports counter here /* increment the number of opened ports counter here */ ATEN2011_serial->NoOfOpenPorts++; //printk("the num of ports opend is:%d\n",ATEN2011_serial->NoOfOpenPorts); usb_clear_halt(serial->dev, port->write_urb->pipe); usb_clear_halt(serial->dev, port->read_urb->pipe); Loading Loading @@ -782,7 +766,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, * 0x08 : SP1/2 Control Reg *****************************************************************************/ //NEED to check the fallowing Block /* NEED to check the fallowing Block */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->SpRegOffset, &Data); Loading @@ -804,8 +788,8 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, return -1; } //End of block to be checked //**************************CHECK***************************// /* End of block to be checked */ /**************************CHECK***************************/ if (RS485mode == 0) Data = 0xC0; Loading @@ -820,7 +804,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("SCRATCH_PAD_REGISTER Writing success status%d\n", status); //**************************CHECK***************************// /**************************CHECK***************************/ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->ControlRegOffset, &Data); Loading @@ -828,8 +812,8 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("Reading Controlreg failed\n"); return -1; } Data |= 0x08; //Driver done bit Data |= 0x20; //rx_disable Data |= 0x08; /* Driver done bit */ Data |= 0x20; /* rx_disable */ status = 0; status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); Loading @@ -837,11 +821,11 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("writing Controlreg failed\n"); return -1; } //do register settings here // Set all regs to the device default values. //////////////////////////////////// // First Disable all interrupts. //////////////////////////////////// /* * do register settings here * Set all regs to the device default values. * First Disable all interrupts. */ Data = 0x00; status = set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); Loading @@ -849,7 +833,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("disableing interrupts failed\n"); return -1; } // Set FIFO_CONTROL_REGISTER to the default value /* Set FIFO_CONTROL_REGISTER to the default value */ Data = 0x00; status = set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); if (status < 0) { Loading @@ -857,18 +841,18 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, return -1; } Data = 0xcf; //chk Data = 0xcf; /* chk */ status = set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); if (status < 0) { DPRINTK("Writing FIFO_CONTROL_REGISTER failed\n"); return -1; } Data = 0x03; //LCR_BITS_8 Data = 0x03; /* LCR_BITS_8 */ status = set_uart_reg(port, LINE_CONTROL_REGISTER, Data); ATEN2011_port->shadowLCR = Data; Data = 0x0b; // MCR_DTR|MCR_RTS|MCR_MASTER_IE Data = 0x0b; /* MCR_DTR|MCR_RTS|MCR_MASTER_IE */ status = set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); ATEN2011_port->shadowMCR = Data; Loading @@ -877,7 +861,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, status = get_uart_reg(port, LINE_CONTROL_REGISTER, &Data); ATEN2011_port->shadowLCR = Data; Data |= SERIAL_LCR_DLAB; //data latch enable in LCR 0x80 Data |= SERIAL_LCR_DLAB; /* data latch enable in LCR 0x80 */ status = set_uart_reg(port, LINE_CONTROL_REGISTER, Data); Data = 0x0c; Loading @@ -889,12 +873,12 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, Data = 0x00; status = get_uart_reg(port, LINE_CONTROL_REGISTER, &Data); // Data = ATEN2011_port->shadowLCR; //data latch disable /* Data = ATEN2011_port->shadowLCR; */ /* data latch disable */ Data = Data & ~SERIAL_LCR_DLAB; status = set_uart_reg(port, LINE_CONTROL_REGISTER, Data); ATEN2011_port->shadowLCR = Data; #endif //clearing Bulkin and Bulkout Fifo /* clearing Bulkin and Bulkout Fifo */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->SpRegOffset, &Data); Loading @@ -903,18 +887,18 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, Data = Data & ~0x0c; status = set_reg_sync(port, ATEN2011_port->SpRegOffset, Data); //Finally enable all interrupts /* Finally enable all interrupts */ Data = 0x0; Data = 0x0c; status = set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); //clearing rx_disable /* clearing rx_disable */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->ControlRegOffset, &Data); Data = Data & ~0x20; status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); // rx_negate /* rx_negate */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->ControlRegOffset, &Data); Data = Data | 0x10; Loading @@ -935,22 +919,19 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, printk("Interrupt endpoint is %d \n",port->interrupt_in_endpointAddress); printk("port's number in the device is %d\n",ATEN2011_port->port_num); */ //////////////////////// //#ifdef CheckStatusPipe /* Check to see if we've set up our endpoint info yet * * (can't set it up in ATEN2011_startup as the structures * * were not set up at that time.) */ /* * Check to see if we've set up our endpoint info yet * (can't set it up in ATEN2011_startup as the structures * were not set up at that time.) */ if (ATEN2011_serial->NoOfOpenPorts == 1) { // start the status polling here /* start the status polling here */ ATEN2011_serial->status_polling_started = 1; //if (ATEN2011_serial->interrupt_in_buffer == NULL) // { /* If not yet set, Set here */ ATEN2011_serial->interrupt_in_buffer = serial->port[0]->interrupt_in_buffer; ATEN2011_serial->interrupt_in_endpoint = serial->port[0]->interrupt_in_endpointAddress; //printk(" interrupt endpoint:%d \n",ATEN2011_serial->interrupt_in_endpoint); ATEN2011_serial->interrupt_read_urb = serial->port[0]->interrupt_in_urb; Loading @@ -976,18 +957,14 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("%s - Error %d submitting interrupt urb", __FUNCTION__, response); } // else // printk(" interrupt URB submitted\n"); //} } //#endif /////////////////////// /* see if we've set up our endpoint info yet * * (can't set it up in ATEN2011_startup as the * * structures were not set up at that time.) */ /* * See if we've set up our endpoint info yet * (can't set it up in ATEN2011_startup as the * structures were not set up at that time.) */ DPRINTK("port number is %d \n", port->number); DPRINTK("serial number is %d \n", port->serial->minor); Loading Loading @@ -1047,7 +1024,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, ATEN2011_port->chaseResponsePending = 0; /* send a open port command */ ATEN2011_port->open = 1; //ATEN2011_change_port_settings(ATEN2011_port,old_termios); /* ATEN2011_change_port_settings(ATEN2011_port,old_termios); */ /* Setup termios */ ATEN2011_set_termios(tty, port, &tmp_termios); ATEN2011_port->icount.tx = 0; Loading @@ -1069,7 +1046,7 @@ static int ATEN2011_chars_in_buffer(struct tty_struct *tty) int chars = 0; struct ATENINTL_port *ATEN2011_port; //DPRINTK("%s \n"," ATEN2011_chars_in_buffer:entering ..........."); /* DPRINTK("%s \n"," ATEN2011_chars_in_buffer:entering ..........."); */ ATEN2011_port = usb_get_serial_port_data(port); if (ATEN2011_port == NULL) { Loading Loading @@ -1127,16 +1104,11 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, struct ATENINTL_port *ATEN2011_port; int no_urbs; __u16 Data; //__u16 Data1= 20; DPRINTK("%s\n", "ATEN2011_close:entering..."); /* MATRIX */ //ThreadState = 1; /* MATRIX */ //printk("Entering... :ATEN2011_close\n"); serial = port->serial; // take the Adpater and port's private data /* take the Adpater and port's private data */ ATEN2011_serial = usb_get_serial_data(serial); ATEN2011_port = usb_get_serial_port_data(port); if ((ATEN2011_serial == NULL) || (ATEN2011_port == NULL)) { Loading @@ -1146,7 +1118,7 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, /* flush and block(wait) until tx is empty */ ATEN2011_block_until_tx_empty(tty, ATEN2011_port); } // kill the ports URB's /* kill the ports URB's */ for (no_urbs = 0; no_urbs < NUM_URBS; no_urbs++) usb_kill_urb(ATEN2011_port->write_urb_pool[no_urbs]); /* Freeing Write URBs */ Loading @@ -1172,25 +1144,23 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, } if ((&ATEN2011_port->control_urb)) { DPRINTK("%s", "Shutdown control read\n"); // usb_kill_urb (ATEN2011_port->control_urb); /* usb_kill_urb (ATEN2011_port->control_urb); */ } } //if(ATEN2011_port->ctrl_buf != NULL) //kfree(ATEN2011_port->ctrl_buf); // decrement the no.of open ports counter of an individual USB-serial adapter. /* if(ATEN2011_port->ctrl_buf != NULL) */ /* kfree(ATEN2011_port->ctrl_buf); */ /* decrement the no.of open ports counter of an individual USB-serial adapter. */ ATEN2011_serial->NoOfOpenPorts--; DPRINTK("NoOfOpenPorts in close%d:in port%d\n", ATEN2011_serial->NoOfOpenPorts, port->number); //printk("the num of ports opend is:%d\n",ATEN2011_serial->NoOfOpenPorts); if (ATEN2011_serial->NoOfOpenPorts == 0) { //stop the stus polling here //printk("disabling the status polling flag to 0 :\n"); /* stop the stus polling here */ ATEN2011_serial->status_polling_started = 0; if (ATEN2011_serial->interrupt_read_urb) { DPRINTK("%s", "Shutdown interrupt_read_urb\n"); //ATEN2011_serial->interrupt_in_buffer=NULL; //usb_kill_urb (ATEN2011_serial->interrupt_read_urb); /* ATEN2011_serial->interrupt_in_buffer=NULL; */ /* usb_kill_urb (ATEN2011_serial->interrupt_read_urb); */ } } if (ATEN2011_port->write_urb) { Loading @@ -1200,7 +1170,7 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, } usb_free_urb(ATEN2011_port->write_urb); } // clear the MCR & IER /* clear the MCR & IER */ Data = 0x00; set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); Data = 0x00; Loading Loading @@ -1294,8 +1264,6 @@ static int ATEN2011_write_room(struct tty_struct *tty) int room = 0; struct ATENINTL_port *ATEN2011_port; // DPRINTK("%s \n"," ATEN2011_write_room:entering ..........."); ATEN2011_port = usb_get_serial_port_data(port); if (ATEN2011_port == NULL) { DPRINTK("%s \n", "ATEN2011_break:leaving ..........."); Loading Loading @@ -1326,7 +1294,6 @@ static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, struct usb_serial *serial; struct ATENINTL_serial *ATEN2011_serial; struct urb *urb; //__u16 Data; const unsigned char *current_position = data; unsigned char *data1; DPRINTK("%s \n", "entering ..........."); Loading Loading @@ -1373,7 +1340,7 @@ static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE); memcpy(urb->transfer_buffer, current_position, transfer_size); //usb_serial_debug_data (__FILE__, __FUNCTION__, transfer_size, urb->transfer_buffer); /* usb_serial_debug_data (__FILE__, __FUNCTION__, transfer_size, urb->transfer_buffer); */ /* fill urb with data and submit */ minor = port->serial->minor; Loading Loading @@ -1402,8 +1369,8 @@ static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, data1 = urb->transfer_buffer; DPRINTK("\nbulkout endpoint is %d", port->bulk_out_endpointAddress); //for(i=0;i < urb->actual_length;i++) // DPRINTK("Data is %c\n ",data1[i]); /* for(i=0;i < urb->actual_length;i++) */ /* DPRINTK("Data is %c\n ",data1[i]); */ /* send it down the pipe */ status = usb_submit_urb(urb, GFP_ATOMIC); Loading Loading @@ -1451,7 +1418,7 @@ static void ATEN2011_throttle(struct tty_struct *tty) /* if we are implementing XON/XOFF, send the stop character */ if (I_IXOFF(tty)) { unsigned char stop_char = STOP_CHAR(tty); status = ATEN2011_write(tty, port, &stop_char, 1); //FC4 status = ATEN2011_write(tty, port, &stop_char, 1); if (status <= 0) { return; } Loading Loading @@ -1495,7 +1462,7 @@ static void ATEN2011_unthrottle(struct tty_struct *tty) /* if we are implementing XON/XOFF, send the start character */ if (I_IXOFF(tty)) { unsigned char start_char = START_CHAR(tty); status = ATEN2011_write(tty, port, &start_char, 1); //FC4 status = ATEN2011_write(tty, port, &start_char, 1); if (status <= 0) { return; } Loading @@ -1517,12 +1484,11 @@ static void ATEN2011_unthrottle(struct tty_struct *tty) static int ATEN2011_tiocmget(struct tty_struct *tty, struct file *file) { struct usb_serial_port *port = tty->driver_data; //struct ti_port *tport = usb_get_serial_port_data(port); struct ATENINTL_port *ATEN2011_port; unsigned int result; __u16 msr; __u16 mcr; //unsigned int mcr; /* unsigned int mcr; */ int status = 0; ATEN2011_port = usb_get_serial_port_data(port); Loading @@ -1533,8 +1499,8 @@ static int ATEN2011_tiocmget(struct tty_struct *tty, struct file *file) status = get_uart_reg(port, MODEM_STATUS_REGISTER, &msr); status = get_uart_reg(port, MODEM_CONTROL_REGISTER, &mcr); // mcr = ATEN2011_port->shadowMCR; // COMMENT2: the Fallowing three line are commented for updating only MSR values /* mcr = ATEN2011_port->shadowMCR; */ /* COMMENT2: the Fallowing three line are commented for updating only MSR values */ result = ((mcr & MCR_DTR) ? TIOCM_DTR : 0) | ((mcr & MCR_RTS) ? TIOCM_RTS : 0) | ((mcr & MCR_LOOPBACK) ? TIOCM_LOOP : 0) Loading @@ -1553,7 +1519,6 @@ static int ATEN2011_tiocmset(struct tty_struct *tty, struct file *file, { struct usb_serial_port *port = tty->driver_data; struct ATENINTL_port *ATEN2011_port; //struct ti_port *tport = usb_get_serial_port_data(port); unsigned int mcr; unsigned int status; Loading Loading @@ -1823,8 +1788,6 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, int ATENret = 0; unsigned int __user *user_arg = (unsigned int __user *)arg; //printk("%s - port %d, cmd = 0x%x\n", __FUNCTION__, port->number, cmd); ATEN2011_port = usb_get_serial_port_data(port); if (ATEN2011_port == NULL) Loading Loading @@ -1855,10 +1818,7 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, case TIOCMSET: dbg("%s (%d) TIOCMSET/TIOCMBIC/TIOCMSET", __FUNCTION__, port->number); // printk("%s (%d) TIOCMSET/TIOCMBIC/TIOCMSET", __FUNCTION__, port->number); ATENret = set_modem_info(ATEN2011_port, cmd, user_arg); // printk(" %s: ret:%d\n",__FUNCTION__,ATENret); ATENret = set_modem_info(ATEN2011_port, cmd, user_arg); return ATENret; case TIOCMGET: Loading Loading @@ -1926,9 +1886,6 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, 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) { Loading Loading @@ -1985,12 +1942,14 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port dbg("%s - port = %d, baud = %d", __FUNCTION__, ATEN2011_port->port->number, baudRate); //reset clk_uart_sel in spregOffset /* reset clk_uart_sel in spregOffset */ if (baudRate > 115200) { #ifdef HW_flow_control //NOTE: need to see the pther register to modify //setting h/w flow control bit to 1; //Data = ATEN2011_port->shadowMCR ; /* * NOTE: need to see the pther register to modify * setting h/w flow control bit to 1; */ /* Data = ATEN2011_port->shadowMCR; */ Data = 0x2b; ATEN2011_port->shadowMCR = Data; status = set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); Loading @@ -2002,8 +1961,8 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port } else { #ifdef HW_flow_control //setting h/w flow control bit to 0; //Data = ATEN2011_port->shadowMCR ; /* setting h/w flow control bit to 0; */ /* Data = ATEN2011_port->shadowMCR; */ Data = 0xb; ATEN2011_port->shadowMCR = Data; status = set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); Loading @@ -2015,7 +1974,7 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port } if (1) //baudRate <= 115200) if (1) /* baudRate <= 115200) */ { clk_sel_val = 0x0; Data = 0x0; Loading Loading @@ -2109,8 +2068,8 @@ static void ATEN2011_change_port_settings(struct tty_struct *tty, /* Change the number of bits */ //COMMENT1: the below Line"if(cflag & CSIZE)" is added for the errors we get for serial loop data test i.e serial_loopback.pl -v //if(cflag & CSIZE) /* COMMENT1: the below Line"if(cflag & CSIZE)" is added for the errors we get for serial loop data test i.e serial_loopback.pl -v */ /* if(cflag & CSIZE) */ { switch (cflag & CSIZE) { case CS5: Loading Loading @@ -2247,8 +2206,6 @@ static int ATEN2011_calc_num_ports(struct usb_serial *serial) ATEN_RDREQ, ATEN_RD_RTYPE, 0, GPIO_REGISTER, &Data, VENDOR_READ_LENGTH, ATEN_WDR_TIMEOUT); //printk("ATEN2011_calc_num_ports GPIO is %x\n",Data); /* ghostgum: here is where the problem appears to bet */ /* Which of the following are needed? */ /* Greg used the serial->type->num_ports=2 */ Loading @@ -2258,7 +2215,7 @@ static int ATEN2011_calc_num_ports(struct usb_serial *serial) serial->type->num_ports = 2; serial->num_ports = 2; } //else if(serial->interface->cur_altsetting->desc.bNumEndpoints == 9) /* else if(serial->interface->cur_altsetting->desc.bNumEndpoints == 9) */ else { ATEN2011_2or4ports = 4; serial->type->num_ports = 4; Loading Loading @@ -2300,7 +2257,7 @@ static int ATEN2011_startup(struct usb_serial *serial) memset(ATEN2011_serial, 0, sizeof(struct ATENINTL_serial)); ATEN2011_serial->serial = serial; //initilize status polling flag to 0 /* initilize status polling flag to 0 */ ATEN2011_serial->status_polling_started = 0; usb_set_serial_data(serial, ATEN2011_serial); Loading @@ -2321,13 +2278,14 @@ static int ATEN2011_startup(struct usb_serial *serial) } memset(ATEN2011_port, 0, sizeof(struct ATENINTL_port)); /* Initialize all port interrupt end point to port 0 int endpoint * * Our device has only one interrupt end point comman to all port */ // serial->port[i]->interrupt_in_endpointAddress = serial->port[0]->interrupt_in_endpointAddress; /* * Initialize all port interrupt end point to port 0 * int endpoint. Our device has only one interrupt end point * comman to all port */ /* serial->port[i]->interrupt_in_endpointAddress = serial->port[0]->interrupt_in_endpointAddress; */ ATEN2011_port->port = serial->port[i]; // usb_set_serial_port_data(serial->port[i], ATEN2011_port); minor = serial->port[i]->serial->minor; Loading Loading @@ -2368,7 +2326,7 @@ static int ATEN2011_startup(struct usb_serial *serial) usb_set_serial_port_data(serial->port[i], ATEN2011_port); //enable rx_disable bit in control register /* enable rx_disable bit in control register */ status = get_reg_sync(serial->port[i], ATEN2011_port->ControlRegOffset, &Data); Loading @@ -2380,10 +2338,10 @@ static int ATEN2011_startup(struct usb_serial *serial) DPRINTK ("ControlReg Reading success val is %x, status%d\n", Data, status); Data |= 0x08; //setting driver done bit Data |= 0x04; //sp1_bit to have cts change reflect in modem status reg Data |= 0x08; /* setting driver done bit */ Data |= 0x04; /* sp1_bit to have cts change reflect in modem status reg */ //Data |= 0x20; //rx_disable bit /* Data |= 0x20; */ /* rx_disable bit */ status = set_reg_sync(serial->port[i], ATEN2011_port->ControlRegOffset, Data); if (status < 0) { Loading @@ -2396,7 +2354,10 @@ static int ATEN2011_startup(struct usb_serial *serial) ("ControlReg Writing success(rx_disable) status%d\n", status); //Write default values in DCR (i.e 0x01 in DCR0, 0x05 in DCR2 and 0x24 in DCR3 /* * Write default values in DCR (i.e 0x01 in DCR0, 0x05 in DCR2 * and 0x24 in DCR3 */ Data = 0x01; status = set_reg_sync(serial->port[i], (__u16)(ATEN2011_port->DcrRegOffset + 0), Loading Loading @@ -2427,7 +2388,7 @@ static int ATEN2011_startup(struct usb_serial *serial) } else DPRINTK("DCR2 Writing success status%d\n", status); // write values in clkstart0x0 and clkmulti 0x20 /* write values in clkstart0x0 and clkmulti 0x20 */ Data = 0x0; status = set_reg_sync(serial->port[i], CLK_START_VALUE_REGISTER, Data); Loading @@ -2453,7 +2414,7 @@ static int ATEN2011_startup(struct usb_serial *serial) DPRINTK("CLK_MULTI_REGISTER Writing success status%d\n", status); //Zero Length flag register /* Zero Length flag register */ if ((ATEN2011_port->port_num != 1) && (ATEN2011_serial->ATEN2011_spectrum_2or4ports == 2)) { Loading Loading @@ -2496,7 +2457,7 @@ static int ATEN2011_startup(struct usb_serial *serial) } //Zero Length flag enable /* Zero Length flag enable */ Data = 0x0f; status = set_reg_sync(serial->port[0], ZLP_REG5, Data); if (status < 0) { Loading @@ -2517,10 +2478,6 @@ static void ATEN2011_shutdown(struct usb_serial *serial) struct ATENINTL_port *ATEN2011_port; DPRINTK("%s \n", " shutdown :entering.........."); /* MATRIX */ //ThreadState = 1; /* MATRIX */ if (!serial) { DPRINTK("%s", "Invalid Handler \n"); return; Loading Loading
drivers/staging/uc2322/aten2011.c +99 −142 Original line number Diff line number Diff line Loading @@ -117,9 +117,8 @@ struct ATENINTL_port __u8 SpRegOffset; __u8 ControlRegOffset; __u8 DcrRegOffset; //for processing control URBS in interrupt context /* for processing control URBS in interrupt context */ struct urb *control_urb; // __le16 rx_creg; char *ctrl_buf; int MsrLsr; Loading @@ -141,10 +140,10 @@ struct ATENINTL_serial struct urb *read_urb; /* our bulk read urb */ __u8 bulk_out_endpoint; /* the bulk out endpoint handle */ struct usb_serial *serial; /* loop back to the owner of this object */ int ATEN2011_spectrum_2or4ports; //this says the number of ports in the device // Indicates about the no.of opened ports of an individual USB-serial adapater. int ATEN2011_spectrum_2or4ports; /* this says the number of ports in the device */ /* Indicates about the no.of opened ports of an individual USB-serial adapater. */ unsigned int NoOfOpenPorts; // a flag for Status endpoint polling /* a flag for Status endpoint polling */ unsigned char status_polling_started; }; Loading Loading @@ -350,11 +349,10 @@ static int handle_newLsr(struct ATENINTL_port *port, __u8 newLsr) 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. // /* * Parity and Framing errors only count if they occur exclusive * of a break being received. */ newLsr &= (__u8) (SERIAL_LSR_OE | SERIAL_LSR_BI); } Loading Loading @@ -430,11 +428,10 @@ static int ATEN2011_get_reg(struct ATENINTL_port *ATEN, __u16 Wval, __u16 reg, 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->wValue = cpu_to_le16(Wval); dr->wIndex = cpu_to_le16(reg); dr->wLength = cpu_to_le16(2); Loading @@ -459,12 +456,11 @@ static void ATEN2011_interrupt_callback(struct urb *urb) int i; __u16 wval; int minor; //printk("in the function ATEN2011_interrupt_callback Length %d, Data %x \n",urb->actual_length,(unsigned int)urb->transfer_buffer); DPRINTK("%s", " : Entering\n"); ATEN2011_serial = (struct ATENINTL_serial *)urb->context; if (!urb) // || ATEN2011_serial->status_polling_started == 0 ) { if (!urb) { DPRINTK("%s", "Invalid Pointer !!!!:\n"); return; } Loading @@ -488,7 +484,6 @@ static void ATEN2011_interrupt_callback(struct urb *urb) length = urb->actual_length; data = urb->transfer_buffer; //ATEN2011_serial= (struct ATENINTL_serial *)urb->context; serial = ATEN2011_serial->serial; /* ATENINTL get 5 bytes Loading @@ -513,12 +508,11 @@ static void ATEN2011_interrupt_callback(struct urb *urb) } else { sp[0] = (__u8) data[0]; sp[1] = (__u8) data[2]; //sp[2]=(__u8)data[2]; //sp[3]=(__u8)data[3]; /* sp[2]=(__u8)data[2]; */ /* sp[3]=(__u8)data[3]; */ st = (__u8) data[4]; } // printk("%s data is sp1:%x sp2:%x sp3:%x sp4:%x status:%x\n",__FUNCTION__,sp1,sp2,sp3,sp4,st); for (i = 0; i < serial->num_ports; i++) { ATEN2011_port = usb_get_serial_port_data(serial->port[i]); minor = serial->minor; Loading @@ -534,8 +528,6 @@ static void ATEN2011_interrupt_callback(struct urb *urb) (((__u16) serial->port[i]->number - (__u16) (minor)) + 1) << 8; if (ATEN2011_port->open != 0) { //printk("%s wval is:(for 2011) %x\n",__FUNCTION__,wval); if (sp[i] & 0x01) { DPRINTK("SP%d No Interrupt !!!\n", i); } else { Loading Loading @@ -596,8 +588,6 @@ static void ATEN2011_bulk_in_callback(struct urb *urb) if (urb->status) { DPRINTK("nonzero read bulk status received: %d", urb->status); // if(urb->status==84) //ThreadState=1; return; } Loading Loading @@ -630,7 +620,6 @@ static void ATEN2011_bulk_in_callback(struct urb *urb) ATEN2011_port->icount.rx += urb->actual_length; DPRINTK("ATEN2011_port->icount.rx is %d:\n", ATEN2011_port->icount.rx); //MATRIX } if (!ATEN2011_port->read_urb) { Loading Loading @@ -680,7 +669,7 @@ static void ATEN2011_bulk_out_data_callback(struct urb *urb) wake_up_interruptible(&tty->write_wait); } //schedule_work(&ATEN2011_port->port->work); /* schedule_work(&ATEN2011_port->port->work); */ tty_kref_put(tty); } Loading @@ -704,7 +693,6 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, int response; int j; struct usb_serial *serial; // struct usb_serial_port *port0; struct urb *urb; __u16 Data; int status; Loading @@ -713,7 +701,6 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, struct ktermios tmp_termios; int minor; //ATEN2011_serial->NoOfOpenPorts++; serial = port->serial; ATEN2011_port = usb_get_serial_port_data(port); Loading @@ -736,17 +723,14 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, ATEN2011_port->control_urb=kmalloc(sizeof(struct urb),GFP_KERNEL); } */ // port0 = serial->port[0]; ATEN2011_serial = usb_get_serial_data(serial); if (ATEN2011_serial == NULL) //|| port0 == NULL) { if (ATEN2011_serial == NULL) { return -ENODEV; } // increment the number of opened ports counter here /* increment the number of opened ports counter here */ ATEN2011_serial->NoOfOpenPorts++; //printk("the num of ports opend is:%d\n",ATEN2011_serial->NoOfOpenPorts); usb_clear_halt(serial->dev, port->write_urb->pipe); usb_clear_halt(serial->dev, port->read_urb->pipe); Loading Loading @@ -782,7 +766,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, * 0x08 : SP1/2 Control Reg *****************************************************************************/ //NEED to check the fallowing Block /* NEED to check the fallowing Block */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->SpRegOffset, &Data); Loading @@ -804,8 +788,8 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, return -1; } //End of block to be checked //**************************CHECK***************************// /* End of block to be checked */ /**************************CHECK***************************/ if (RS485mode == 0) Data = 0xC0; Loading @@ -820,7 +804,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("SCRATCH_PAD_REGISTER Writing success status%d\n", status); //**************************CHECK***************************// /**************************CHECK***************************/ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->ControlRegOffset, &Data); Loading @@ -828,8 +812,8 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("Reading Controlreg failed\n"); return -1; } Data |= 0x08; //Driver done bit Data |= 0x20; //rx_disable Data |= 0x08; /* Driver done bit */ Data |= 0x20; /* rx_disable */ status = 0; status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); Loading @@ -837,11 +821,11 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("writing Controlreg failed\n"); return -1; } //do register settings here // Set all regs to the device default values. //////////////////////////////////// // First Disable all interrupts. //////////////////////////////////// /* * do register settings here * Set all regs to the device default values. * First Disable all interrupts. */ Data = 0x00; status = set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); Loading @@ -849,7 +833,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("disableing interrupts failed\n"); return -1; } // Set FIFO_CONTROL_REGISTER to the default value /* Set FIFO_CONTROL_REGISTER to the default value */ Data = 0x00; status = set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); if (status < 0) { Loading @@ -857,18 +841,18 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, return -1; } Data = 0xcf; //chk Data = 0xcf; /* chk */ status = set_uart_reg(port, FIFO_CONTROL_REGISTER, Data); if (status < 0) { DPRINTK("Writing FIFO_CONTROL_REGISTER failed\n"); return -1; } Data = 0x03; //LCR_BITS_8 Data = 0x03; /* LCR_BITS_8 */ status = set_uart_reg(port, LINE_CONTROL_REGISTER, Data); ATEN2011_port->shadowLCR = Data; Data = 0x0b; // MCR_DTR|MCR_RTS|MCR_MASTER_IE Data = 0x0b; /* MCR_DTR|MCR_RTS|MCR_MASTER_IE */ status = set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); ATEN2011_port->shadowMCR = Data; Loading @@ -877,7 +861,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, status = get_uart_reg(port, LINE_CONTROL_REGISTER, &Data); ATEN2011_port->shadowLCR = Data; Data |= SERIAL_LCR_DLAB; //data latch enable in LCR 0x80 Data |= SERIAL_LCR_DLAB; /* data latch enable in LCR 0x80 */ status = set_uart_reg(port, LINE_CONTROL_REGISTER, Data); Data = 0x0c; Loading @@ -889,12 +873,12 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, Data = 0x00; status = get_uart_reg(port, LINE_CONTROL_REGISTER, &Data); // Data = ATEN2011_port->shadowLCR; //data latch disable /* Data = ATEN2011_port->shadowLCR; */ /* data latch disable */ Data = Data & ~SERIAL_LCR_DLAB; status = set_uart_reg(port, LINE_CONTROL_REGISTER, Data); ATEN2011_port->shadowLCR = Data; #endif //clearing Bulkin and Bulkout Fifo /* clearing Bulkin and Bulkout Fifo */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->SpRegOffset, &Data); Loading @@ -903,18 +887,18 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, Data = Data & ~0x0c; status = set_reg_sync(port, ATEN2011_port->SpRegOffset, Data); //Finally enable all interrupts /* Finally enable all interrupts */ Data = 0x0; Data = 0x0c; status = set_uart_reg(port, INTERRUPT_ENABLE_REGISTER, Data); //clearing rx_disable /* clearing rx_disable */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->ControlRegOffset, &Data); Data = Data & ~0x20; status = set_reg_sync(port, ATEN2011_port->ControlRegOffset, Data); // rx_negate /* rx_negate */ Data = 0x0; status = get_reg_sync(port, ATEN2011_port->ControlRegOffset, &Data); Data = Data | 0x10; Loading @@ -935,22 +919,19 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, printk("Interrupt endpoint is %d \n",port->interrupt_in_endpointAddress); printk("port's number in the device is %d\n",ATEN2011_port->port_num); */ //////////////////////// //#ifdef CheckStatusPipe /* Check to see if we've set up our endpoint info yet * * (can't set it up in ATEN2011_startup as the structures * * were not set up at that time.) */ /* * Check to see if we've set up our endpoint info yet * (can't set it up in ATEN2011_startup as the structures * were not set up at that time.) */ if (ATEN2011_serial->NoOfOpenPorts == 1) { // start the status polling here /* start the status polling here */ ATEN2011_serial->status_polling_started = 1; //if (ATEN2011_serial->interrupt_in_buffer == NULL) // { /* If not yet set, Set here */ ATEN2011_serial->interrupt_in_buffer = serial->port[0]->interrupt_in_buffer; ATEN2011_serial->interrupt_in_endpoint = serial->port[0]->interrupt_in_endpointAddress; //printk(" interrupt endpoint:%d \n",ATEN2011_serial->interrupt_in_endpoint); ATEN2011_serial->interrupt_read_urb = serial->port[0]->interrupt_in_urb; Loading @@ -976,18 +957,14 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, DPRINTK("%s - Error %d submitting interrupt urb", __FUNCTION__, response); } // else // printk(" interrupt URB submitted\n"); //} } //#endif /////////////////////// /* see if we've set up our endpoint info yet * * (can't set it up in ATEN2011_startup as the * * structures were not set up at that time.) */ /* * See if we've set up our endpoint info yet * (can't set it up in ATEN2011_startup as the * structures were not set up at that time.) */ DPRINTK("port number is %d \n", port->number); DPRINTK("serial number is %d \n", port->serial->minor); Loading Loading @@ -1047,7 +1024,7 @@ static int ATEN2011_open(struct tty_struct *tty, struct usb_serial_port *port, ATEN2011_port->chaseResponsePending = 0; /* send a open port command */ ATEN2011_port->open = 1; //ATEN2011_change_port_settings(ATEN2011_port,old_termios); /* ATEN2011_change_port_settings(ATEN2011_port,old_termios); */ /* Setup termios */ ATEN2011_set_termios(tty, port, &tmp_termios); ATEN2011_port->icount.tx = 0; Loading @@ -1069,7 +1046,7 @@ static int ATEN2011_chars_in_buffer(struct tty_struct *tty) int chars = 0; struct ATENINTL_port *ATEN2011_port; //DPRINTK("%s \n"," ATEN2011_chars_in_buffer:entering ..........."); /* DPRINTK("%s \n"," ATEN2011_chars_in_buffer:entering ..........."); */ ATEN2011_port = usb_get_serial_port_data(port); if (ATEN2011_port == NULL) { Loading Loading @@ -1127,16 +1104,11 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, struct ATENINTL_port *ATEN2011_port; int no_urbs; __u16 Data; //__u16 Data1= 20; DPRINTK("%s\n", "ATEN2011_close:entering..."); /* MATRIX */ //ThreadState = 1; /* MATRIX */ //printk("Entering... :ATEN2011_close\n"); serial = port->serial; // take the Adpater and port's private data /* take the Adpater and port's private data */ ATEN2011_serial = usb_get_serial_data(serial); ATEN2011_port = usb_get_serial_port_data(port); if ((ATEN2011_serial == NULL) || (ATEN2011_port == NULL)) { Loading @@ -1146,7 +1118,7 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, /* flush and block(wait) until tx is empty */ ATEN2011_block_until_tx_empty(tty, ATEN2011_port); } // kill the ports URB's /* kill the ports URB's */ for (no_urbs = 0; no_urbs < NUM_URBS; no_urbs++) usb_kill_urb(ATEN2011_port->write_urb_pool[no_urbs]); /* Freeing Write URBs */ Loading @@ -1172,25 +1144,23 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, } if ((&ATEN2011_port->control_urb)) { DPRINTK("%s", "Shutdown control read\n"); // usb_kill_urb (ATEN2011_port->control_urb); /* usb_kill_urb (ATEN2011_port->control_urb); */ } } //if(ATEN2011_port->ctrl_buf != NULL) //kfree(ATEN2011_port->ctrl_buf); // decrement the no.of open ports counter of an individual USB-serial adapter. /* if(ATEN2011_port->ctrl_buf != NULL) */ /* kfree(ATEN2011_port->ctrl_buf); */ /* decrement the no.of open ports counter of an individual USB-serial adapter. */ ATEN2011_serial->NoOfOpenPorts--; DPRINTK("NoOfOpenPorts in close%d:in port%d\n", ATEN2011_serial->NoOfOpenPorts, port->number); //printk("the num of ports opend is:%d\n",ATEN2011_serial->NoOfOpenPorts); if (ATEN2011_serial->NoOfOpenPorts == 0) { //stop the stus polling here //printk("disabling the status polling flag to 0 :\n"); /* stop the stus polling here */ ATEN2011_serial->status_polling_started = 0; if (ATEN2011_serial->interrupt_read_urb) { DPRINTK("%s", "Shutdown interrupt_read_urb\n"); //ATEN2011_serial->interrupt_in_buffer=NULL; //usb_kill_urb (ATEN2011_serial->interrupt_read_urb); /* ATEN2011_serial->interrupt_in_buffer=NULL; */ /* usb_kill_urb (ATEN2011_serial->interrupt_read_urb); */ } } if (ATEN2011_port->write_urb) { Loading @@ -1200,7 +1170,7 @@ static void ATEN2011_close(struct tty_struct *tty, struct usb_serial_port *port, } usb_free_urb(ATEN2011_port->write_urb); } // clear the MCR & IER /* clear the MCR & IER */ Data = 0x00; set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); Data = 0x00; Loading Loading @@ -1294,8 +1264,6 @@ static int ATEN2011_write_room(struct tty_struct *tty) int room = 0; struct ATENINTL_port *ATEN2011_port; // DPRINTK("%s \n"," ATEN2011_write_room:entering ..........."); ATEN2011_port = usb_get_serial_port_data(port); if (ATEN2011_port == NULL) { DPRINTK("%s \n", "ATEN2011_break:leaving ..........."); Loading Loading @@ -1326,7 +1294,6 @@ static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, struct usb_serial *serial; struct ATENINTL_serial *ATEN2011_serial; struct urb *urb; //__u16 Data; const unsigned char *current_position = data; unsigned char *data1; DPRINTK("%s \n", "entering ..........."); Loading Loading @@ -1373,7 +1340,7 @@ static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, transfer_size = min(count, URB_TRANSFER_BUFFER_SIZE); memcpy(urb->transfer_buffer, current_position, transfer_size); //usb_serial_debug_data (__FILE__, __FUNCTION__, transfer_size, urb->transfer_buffer); /* usb_serial_debug_data (__FILE__, __FUNCTION__, transfer_size, urb->transfer_buffer); */ /* fill urb with data and submit */ minor = port->serial->minor; Loading Loading @@ -1402,8 +1369,8 @@ static int ATEN2011_write(struct tty_struct *tty, struct usb_serial_port *port, data1 = urb->transfer_buffer; DPRINTK("\nbulkout endpoint is %d", port->bulk_out_endpointAddress); //for(i=0;i < urb->actual_length;i++) // DPRINTK("Data is %c\n ",data1[i]); /* for(i=0;i < urb->actual_length;i++) */ /* DPRINTK("Data is %c\n ",data1[i]); */ /* send it down the pipe */ status = usb_submit_urb(urb, GFP_ATOMIC); Loading Loading @@ -1451,7 +1418,7 @@ static void ATEN2011_throttle(struct tty_struct *tty) /* if we are implementing XON/XOFF, send the stop character */ if (I_IXOFF(tty)) { unsigned char stop_char = STOP_CHAR(tty); status = ATEN2011_write(tty, port, &stop_char, 1); //FC4 status = ATEN2011_write(tty, port, &stop_char, 1); if (status <= 0) { return; } Loading Loading @@ -1495,7 +1462,7 @@ static void ATEN2011_unthrottle(struct tty_struct *tty) /* if we are implementing XON/XOFF, send the start character */ if (I_IXOFF(tty)) { unsigned char start_char = START_CHAR(tty); status = ATEN2011_write(tty, port, &start_char, 1); //FC4 status = ATEN2011_write(tty, port, &start_char, 1); if (status <= 0) { return; } Loading @@ -1517,12 +1484,11 @@ static void ATEN2011_unthrottle(struct tty_struct *tty) static int ATEN2011_tiocmget(struct tty_struct *tty, struct file *file) { struct usb_serial_port *port = tty->driver_data; //struct ti_port *tport = usb_get_serial_port_data(port); struct ATENINTL_port *ATEN2011_port; unsigned int result; __u16 msr; __u16 mcr; //unsigned int mcr; /* unsigned int mcr; */ int status = 0; ATEN2011_port = usb_get_serial_port_data(port); Loading @@ -1533,8 +1499,8 @@ static int ATEN2011_tiocmget(struct tty_struct *tty, struct file *file) status = get_uart_reg(port, MODEM_STATUS_REGISTER, &msr); status = get_uart_reg(port, MODEM_CONTROL_REGISTER, &mcr); // mcr = ATEN2011_port->shadowMCR; // COMMENT2: the Fallowing three line are commented for updating only MSR values /* mcr = ATEN2011_port->shadowMCR; */ /* COMMENT2: the Fallowing three line are commented for updating only MSR values */ result = ((mcr & MCR_DTR) ? TIOCM_DTR : 0) | ((mcr & MCR_RTS) ? TIOCM_RTS : 0) | ((mcr & MCR_LOOPBACK) ? TIOCM_LOOP : 0) Loading @@ -1553,7 +1519,6 @@ static int ATEN2011_tiocmset(struct tty_struct *tty, struct file *file, { struct usb_serial_port *port = tty->driver_data; struct ATENINTL_port *ATEN2011_port; //struct ti_port *tport = usb_get_serial_port_data(port); unsigned int mcr; unsigned int status; Loading Loading @@ -1823,8 +1788,6 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, int ATENret = 0; unsigned int __user *user_arg = (unsigned int __user *)arg; //printk("%s - port %d, cmd = 0x%x\n", __FUNCTION__, port->number, cmd); ATEN2011_port = usb_get_serial_port_data(port); if (ATEN2011_port == NULL) Loading Loading @@ -1855,10 +1818,7 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, case TIOCMSET: dbg("%s (%d) TIOCMSET/TIOCMBIC/TIOCMSET", __FUNCTION__, port->number); // printk("%s (%d) TIOCMSET/TIOCMBIC/TIOCMSET", __FUNCTION__, port->number); ATENret = set_modem_info(ATEN2011_port, cmd, user_arg); // printk(" %s: ret:%d\n",__FUNCTION__,ATENret); ATENret = set_modem_info(ATEN2011_port, cmd, user_arg); return ATENret; case TIOCMGET: Loading Loading @@ -1926,9 +1886,6 @@ static int ATEN2011_ioctl(struct tty_struct *tty, struct file *file, 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) { Loading Loading @@ -1985,12 +1942,14 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port dbg("%s - port = %d, baud = %d", __FUNCTION__, ATEN2011_port->port->number, baudRate); //reset clk_uart_sel in spregOffset /* reset clk_uart_sel in spregOffset */ if (baudRate > 115200) { #ifdef HW_flow_control //NOTE: need to see the pther register to modify //setting h/w flow control bit to 1; //Data = ATEN2011_port->shadowMCR ; /* * NOTE: need to see the pther register to modify * setting h/w flow control bit to 1; */ /* Data = ATEN2011_port->shadowMCR; */ Data = 0x2b; ATEN2011_port->shadowMCR = Data; status = set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); Loading @@ -2002,8 +1961,8 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port } else { #ifdef HW_flow_control //setting h/w flow control bit to 0; //Data = ATEN2011_port->shadowMCR ; /* setting h/w flow control bit to 0; */ /* Data = ATEN2011_port->shadowMCR; */ Data = 0xb; ATEN2011_port->shadowMCR = Data; status = set_uart_reg(port, MODEM_CONTROL_REGISTER, Data); Loading @@ -2015,7 +1974,7 @@ static int ATEN2011_send_cmd_write_baud_rate(struct ATENINTL_port } if (1) //baudRate <= 115200) if (1) /* baudRate <= 115200) */ { clk_sel_val = 0x0; Data = 0x0; Loading Loading @@ -2109,8 +2068,8 @@ static void ATEN2011_change_port_settings(struct tty_struct *tty, /* Change the number of bits */ //COMMENT1: the below Line"if(cflag & CSIZE)" is added for the errors we get for serial loop data test i.e serial_loopback.pl -v //if(cflag & CSIZE) /* COMMENT1: the below Line"if(cflag & CSIZE)" is added for the errors we get for serial loop data test i.e serial_loopback.pl -v */ /* if(cflag & CSIZE) */ { switch (cflag & CSIZE) { case CS5: Loading Loading @@ -2247,8 +2206,6 @@ static int ATEN2011_calc_num_ports(struct usb_serial *serial) ATEN_RDREQ, ATEN_RD_RTYPE, 0, GPIO_REGISTER, &Data, VENDOR_READ_LENGTH, ATEN_WDR_TIMEOUT); //printk("ATEN2011_calc_num_ports GPIO is %x\n",Data); /* ghostgum: here is where the problem appears to bet */ /* Which of the following are needed? */ /* Greg used the serial->type->num_ports=2 */ Loading @@ -2258,7 +2215,7 @@ static int ATEN2011_calc_num_ports(struct usb_serial *serial) serial->type->num_ports = 2; serial->num_ports = 2; } //else if(serial->interface->cur_altsetting->desc.bNumEndpoints == 9) /* else if(serial->interface->cur_altsetting->desc.bNumEndpoints == 9) */ else { ATEN2011_2or4ports = 4; serial->type->num_ports = 4; Loading Loading @@ -2300,7 +2257,7 @@ static int ATEN2011_startup(struct usb_serial *serial) memset(ATEN2011_serial, 0, sizeof(struct ATENINTL_serial)); ATEN2011_serial->serial = serial; //initilize status polling flag to 0 /* initilize status polling flag to 0 */ ATEN2011_serial->status_polling_started = 0; usb_set_serial_data(serial, ATEN2011_serial); Loading @@ -2321,13 +2278,14 @@ static int ATEN2011_startup(struct usb_serial *serial) } memset(ATEN2011_port, 0, sizeof(struct ATENINTL_port)); /* Initialize all port interrupt end point to port 0 int endpoint * * Our device has only one interrupt end point comman to all port */ // serial->port[i]->interrupt_in_endpointAddress = serial->port[0]->interrupt_in_endpointAddress; /* * Initialize all port interrupt end point to port 0 * int endpoint. Our device has only one interrupt end point * comman to all port */ /* serial->port[i]->interrupt_in_endpointAddress = serial->port[0]->interrupt_in_endpointAddress; */ ATEN2011_port->port = serial->port[i]; // usb_set_serial_port_data(serial->port[i], ATEN2011_port); minor = serial->port[i]->serial->minor; Loading Loading @@ -2368,7 +2326,7 @@ static int ATEN2011_startup(struct usb_serial *serial) usb_set_serial_port_data(serial->port[i], ATEN2011_port); //enable rx_disable bit in control register /* enable rx_disable bit in control register */ status = get_reg_sync(serial->port[i], ATEN2011_port->ControlRegOffset, &Data); Loading @@ -2380,10 +2338,10 @@ static int ATEN2011_startup(struct usb_serial *serial) DPRINTK ("ControlReg Reading success val is %x, status%d\n", Data, status); Data |= 0x08; //setting driver done bit Data |= 0x04; //sp1_bit to have cts change reflect in modem status reg Data |= 0x08; /* setting driver done bit */ Data |= 0x04; /* sp1_bit to have cts change reflect in modem status reg */ //Data |= 0x20; //rx_disable bit /* Data |= 0x20; */ /* rx_disable bit */ status = set_reg_sync(serial->port[i], ATEN2011_port->ControlRegOffset, Data); if (status < 0) { Loading @@ -2396,7 +2354,10 @@ static int ATEN2011_startup(struct usb_serial *serial) ("ControlReg Writing success(rx_disable) status%d\n", status); //Write default values in DCR (i.e 0x01 in DCR0, 0x05 in DCR2 and 0x24 in DCR3 /* * Write default values in DCR (i.e 0x01 in DCR0, 0x05 in DCR2 * and 0x24 in DCR3 */ Data = 0x01; status = set_reg_sync(serial->port[i], (__u16)(ATEN2011_port->DcrRegOffset + 0), Loading Loading @@ -2427,7 +2388,7 @@ static int ATEN2011_startup(struct usb_serial *serial) } else DPRINTK("DCR2 Writing success status%d\n", status); // write values in clkstart0x0 and clkmulti 0x20 /* write values in clkstart0x0 and clkmulti 0x20 */ Data = 0x0; status = set_reg_sync(serial->port[i], CLK_START_VALUE_REGISTER, Data); Loading @@ -2453,7 +2414,7 @@ static int ATEN2011_startup(struct usb_serial *serial) DPRINTK("CLK_MULTI_REGISTER Writing success status%d\n", status); //Zero Length flag register /* Zero Length flag register */ if ((ATEN2011_port->port_num != 1) && (ATEN2011_serial->ATEN2011_spectrum_2or4ports == 2)) { Loading Loading @@ -2496,7 +2457,7 @@ static int ATEN2011_startup(struct usb_serial *serial) } //Zero Length flag enable /* Zero Length flag enable */ Data = 0x0f; status = set_reg_sync(serial->port[0], ZLP_REG5, Data); if (status < 0) { Loading @@ -2517,10 +2478,6 @@ static void ATEN2011_shutdown(struct usb_serial *serial) struct ATENINTL_port *ATEN2011_port; DPRINTK("%s \n", " shutdown :entering.........."); /* MATRIX */ //ThreadState = 1; /* MATRIX */ if (!serial) { DPRINTK("%s", "Invalid Handler \n"); return; Loading