Lines Matching refs:mos7840_port

363 				     struct moschip_port *mos7840_port)  in mos7840_dump_serial_port()  argument
366 dev_dbg(&port->dev, "SpRegOffset is %2x\n", mos7840_port->SpRegOffset); in mos7840_dump_serial_port()
367 dev_dbg(&port->dev, "ControlRegOffset is %2x\n", mos7840_port->ControlRegOffset); in mos7840_dump_serial_port()
368 dev_dbg(&port->dev, "DCRRegOffset is %2x\n", mos7840_port->DcrRegOffset); in mos7840_dump_serial_port()
394 struct moschip_port *mos7840_port; in mos7840_handle_new_msr() local
396 mos7840_port = port; in mos7840_handle_new_msr()
400 icount = &mos7840_port->port->icount; in mos7840_handle_new_msr()
451 struct moschip_port *mos7840_port; in mos7840_control_callback() local
456 mos7840_port = urb->context; in mos7840_control_callback()
475 mos7840_port->MsrLsr, mos7840_port->port_num); in mos7840_control_callback()
479 if (mos7840_port->MsrLsr == 0) in mos7840_control_callback()
480 mos7840_handle_new_msr(mos7840_port, regval); in mos7840_control_callback()
481 else if (mos7840_port->MsrLsr == 1) in mos7840_control_callback()
482 mos7840_handle_new_lsr(mos7840_port, regval); in mos7840_control_callback()
484 clear_bit_unlock(MOS7840_FLAG_CTRL_BUSY, &mos7840_port->flags); in mos7840_control_callback()
580 struct moschip_port *mos7840_port = usb_get_serial_port_data(port); in mos7840_led_activity() local
582 if (test_and_set_bit_lock(MOS7840_FLAG_LED_BUSY, &mos7840_port->flags)) in mos7840_led_activity()
585 mos7840_set_led_async(mos7840_port, 0x0301, MODEM_CONTROL_REGISTER); in mos7840_led_activity()
586 mod_timer(&mos7840_port->led_timer1, in mos7840_led_activity()
600 struct moschip_port *mos7840_port; in mos7840_interrupt_callback() local
650 mos7840_port = mos7840_get_port_private(serial->port[i]); in mos7840_interrupt_callback()
652 if (mos7840_port->open) { in mos7840_interrupt_callback()
660 mos7840_port->MsrLsr = 1; in mos7840_interrupt_callback()
665 mos7840_port->MsrLsr = 0; in mos7840_interrupt_callback()
669 rv = mos7840_get_reg(mos7840_port, wval, wreg, &Data); in mos7840_interrupt_callback()
743 struct moschip_port *mos7840_port; in mos7840_bulk_in_callback() local
746 mos7840_port = urb->context; in mos7840_bulk_in_callback()
747 if (!mos7840_port) in mos7840_bulk_in_callback()
752 mos7840_port->read_urb_busy = false; in mos7840_bulk_in_callback()
756 port = mos7840_port->port; in mos7840_bulk_in_callback()
758 mos7840_port->read_urb_busy = false; in mos7840_bulk_in_callback()
764 mos7840_port->read_urb_busy = false; in mos7840_bulk_in_callback()
772 struct tty_port *tport = &mos7840_port->port->port; in mos7840_bulk_in_callback()
779 if (!mos7840_port->read_urb) { in mos7840_bulk_in_callback()
781 mos7840_port->read_urb_busy = false; in mos7840_bulk_in_callback()
785 if (mos7840_port->has_led) in mos7840_bulk_in_callback()
788 mos7840_port->read_urb_busy = true; in mos7840_bulk_in_callback()
789 retval = usb_submit_urb(mos7840_port->read_urb, GFP_ATOMIC); in mos7840_bulk_in_callback()
793 mos7840_port->read_urb_busy = false; in mos7840_bulk_in_callback()
805 struct moschip_port *mos7840_port; in mos7840_bulk_out_data_callback() local
810 mos7840_port = urb->context; in mos7840_bulk_out_data_callback()
811 port = mos7840_port->port; in mos7840_bulk_out_data_callback()
812 spin_lock(&mos7840_port->pool_lock); in mos7840_bulk_out_data_callback()
814 if (urb == mos7840_port->write_urb_pool[i]) { in mos7840_bulk_out_data_callback()
815 mos7840_port->busy[i] = 0; in mos7840_bulk_out_data_callback()
819 spin_unlock(&mos7840_port->pool_lock); in mos7840_bulk_out_data_callback()
829 if (mos7840_port->open) in mos7840_bulk_out_data_callback()
853 struct moschip_port *mos7840_port; in mos7840_open() local
864 mos7840_port = mos7840_get_port_private(port); in mos7840_open()
867 if (mos7840_port == NULL || port0 == NULL) in mos7840_open()
877 mos7840_port->write_urb_pool[j] = urb; in mos7840_open()
885 mos7840_port->write_urb_pool[j] = NULL; in mos7840_open()
905 status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data); in mos7840_open()
911 status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); in mos7840_open()
918 status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); in mos7840_open()
926 status = mos7840_get_reg_sync(port, mos7840_port->ControlRegOffset, in mos7840_open()
935 mos7840_port->ControlRegOffset, Data); in mos7840_open()
968 mos7840_port->shadowLCR = Data; in mos7840_open()
972 mos7840_port->shadowMCR = Data; in mos7840_open()
976 mos7840_port->shadowLCR = Data; in mos7840_open()
992 mos7840_port->shadowLCR = Data; in mos7840_open()
996 status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, &Data); in mos7840_open()
999 status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); in mos7840_open()
1002 status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, Data); in mos7840_open()
1009 status = mos7840_get_reg_sync(port, mos7840_port->ControlRegOffset, in mos7840_open()
1012 status = mos7840_set_reg_sync(port, mos7840_port->ControlRegOffset, in mos7840_open()
1017 status = mos7840_get_reg_sync(port, mos7840_port->ControlRegOffset, in mos7840_open()
1020 status = mos7840_set_reg_sync(port, mos7840_port->ControlRegOffset, in mos7840_open()
1064 dev_dbg(&port->dev, "port's number in the device is %d\n", mos7840_port->port_num); in mos7840_open()
1065 mos7840_port->read_urb = port->read_urb; in mos7840_open()
1069 usb_fill_bulk_urb(mos7840_port->read_urb, in mos7840_open()
1074 mos7840_port->read_urb->transfer_buffer_length, in mos7840_open()
1075 mos7840_bulk_in_callback, mos7840_port); in mos7840_open()
1077 usb_fill_bulk_urb(mos7840_port->read_urb, in mos7840_open()
1082 mos7840_port->read_urb->transfer_buffer_length, in mos7840_open()
1083 mos7840_bulk_in_callback, mos7840_port); in mos7840_open()
1087 mos7840_port->read_urb_busy = true; in mos7840_open()
1088 response = usb_submit_urb(mos7840_port->read_urb, GFP_KERNEL); in mos7840_open()
1092 mos7840_port->read_urb_busy = false; in mos7840_open()
1097 mos7840_port->shadowMCR = MCR_MASTER_IE; in mos7840_open()
1099 mos7840_port->open = 1; in mos7840_open()
1105 urb = mos7840_port->write_urb_pool[j]; in mos7840_open()
1130 struct moschip_port *mos7840_port; in mos7840_chars_in_buffer() local
1135 mos7840_port = mos7840_get_port_private(port); in mos7840_chars_in_buffer()
1136 if (mos7840_port == NULL) in mos7840_chars_in_buffer()
1139 spin_lock_irqsave(&mos7840_port->pool_lock, flags); in mos7840_chars_in_buffer()
1141 if (mos7840_port->busy[i]) { in mos7840_chars_in_buffer()
1142 struct urb *urb = mos7840_port->write_urb_pool[i]; in mos7840_chars_in_buffer()
1146 spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); in mos7840_chars_in_buffer()
1160 struct moschip_port *mos7840_port; in mos7840_close() local
1172 mos7840_port = mos7840_get_port_private(port); in mos7840_close()
1175 if (mos7840_port == NULL || port0 == NULL) in mos7840_close()
1179 usb_kill_urb(mos7840_port->write_urb_pool[j]); in mos7840_close()
1183 if (mos7840_port->write_urb_pool[j]) { in mos7840_close()
1184 kfree(mos7840_port->write_urb_pool[j]->transfer_buffer); in mos7840_close()
1185 usb_free_urb(mos7840_port->write_urb_pool[j]); in mos7840_close()
1189 usb_kill_urb(mos7840_port->write_urb); in mos7840_close()
1190 usb_kill_urb(mos7840_port->read_urb); in mos7840_close()
1191 mos7840_port->read_urb_busy = false; in mos7840_close()
1202 if (mos7840_port->write_urb) { in mos7840_close()
1204 kfree(mos7840_port->write_urb->transfer_buffer); in mos7840_close()
1205 usb_free_urb(mos7840_port->write_urb); in mos7840_close()
1214 mos7840_port->open = 0; in mos7840_close()
1226 struct moschip_port *mos7840_port; in mos7840_break() local
1235 mos7840_port = mos7840_get_port_private(port); in mos7840_break()
1237 if (mos7840_port == NULL) in mos7840_break()
1241 data = mos7840_port->shadowLCR | LCR_SET_BREAK; in mos7840_break()
1243 data = mos7840_port->shadowLCR & ~LCR_SET_BREAK; in mos7840_break()
1246 mos7840_port->shadowLCR = data; in mos7840_break()
1247 dev_dbg(&port->dev, "%s mos7840_port->shadowLCR is %x\n", __func__, mos7840_port->shadowLCR); in mos7840_break()
1249 mos7840_port->shadowLCR); in mos7840_break()
1266 struct moschip_port *mos7840_port; in mos7840_write_room() local
1271 mos7840_port = mos7840_get_port_private(port); in mos7840_write_room()
1272 if (mos7840_port == NULL) in mos7840_write_room()
1275 spin_lock_irqsave(&mos7840_port->pool_lock, flags); in mos7840_write_room()
1277 if (!mos7840_port->busy[i]) in mos7840_write_room()
1280 spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); in mos7840_write_room()
1283 dev_dbg(&mos7840_port->port->dev, "%s - returns %d\n", __func__, room); in mos7840_write_room()
1305 struct moschip_port *mos7840_port; in mos7840_write() local
1319 mos7840_port = mos7840_get_port_private(port); in mos7840_write()
1320 if (mos7840_port == NULL) in mos7840_write()
1326 spin_lock_irqsave(&mos7840_port->pool_lock, flags); in mos7840_write()
1328 if (!mos7840_port->busy[i]) { in mos7840_write()
1329 mos7840_port->busy[i] = 1; in mos7840_write()
1330 urb = mos7840_port->write_urb_pool[i]; in mos7840_write()
1335 spin_unlock_irqrestore(&mos7840_port->pool_lock, flags); in mos7840_write()
1360 mos7840_bulk_out_data_callback, mos7840_port); in mos7840_write()
1368 mos7840_bulk_out_data_callback, mos7840_port); in mos7840_write()
1374 if (mos7840_port->has_led) in mos7840_write()
1381 mos7840_port->busy[i] = 0; in mos7840_write()
1404 struct moschip_port *mos7840_port; in mos7840_throttle() local
1410 mos7840_port = mos7840_get_port_private(port); in mos7840_throttle()
1412 if (mos7840_port == NULL) in mos7840_throttle()
1415 if (!mos7840_port->open) { in mos7840_throttle()
1429 mos7840_port->shadowMCR &= ~MCR_RTS; in mos7840_throttle()
1431 mos7840_port->shadowMCR); in mos7840_throttle()
1447 struct moschip_port *mos7840_port = mos7840_get_port_private(port); in mos7840_unthrottle() local
1452 if (mos7840_port == NULL) in mos7840_unthrottle()
1455 if (!mos7840_port->open) { in mos7840_unthrottle()
1470 mos7840_port->shadowMCR |= MCR_RTS; in mos7840_unthrottle()
1472 mos7840_port->shadowMCR); in mos7840_unthrottle()
1481 struct moschip_port *mos7840_port; in mos7840_tiocmget() local
1486 mos7840_port = mos7840_get_port_private(port); in mos7840_tiocmget()
1488 if (mos7840_port == NULL) in mos7840_tiocmget()
1514 struct moschip_port *mos7840_port; in mos7840_tiocmset() local
1518 mos7840_port = mos7840_get_port_private(port); in mos7840_tiocmset()
1520 if (mos7840_port == NULL) in mos7840_tiocmset()
1524 mcr = mos7840_port->shadowMCR; in mos7840_tiocmset()
1539 mos7840_port->shadowMCR = mcr; in mos7840_tiocmset()
1596 static int mos7840_send_cmd_write_baud_rate(struct moschip_port *mos7840_port, in mos7840_send_cmd_write_baud_rate() argument
1606 if (mos7840_port == NULL) in mos7840_send_cmd_write_baud_rate()
1609 port = mos7840_port->port; in mos7840_send_cmd_write_baud_rate()
1616 number = mos7840_port->port->port_number; in mos7840_send_cmd_write_baud_rate()
1625 mos7840_port->shadowMCR = Data; in mos7840_send_cmd_write_baud_rate()
1638 mos7840_port->shadowMCR = Data; in mos7840_send_cmd_write_baud_rate()
1654 status = mos7840_get_reg_sync(port, mos7840_port->SpRegOffset, in mos7840_send_cmd_write_baud_rate()
1661 status = mos7840_set_reg_sync(port, mos7840_port->SpRegOffset, in mos7840_send_cmd_write_baud_rate()
1674 Data = mos7840_port->shadowLCR | SERIAL_LCR_DLAB; in mos7840_send_cmd_write_baud_rate()
1675 mos7840_port->shadowLCR = Data; in mos7840_send_cmd_write_baud_rate()
1688 Data = mos7840_port->shadowLCR & ~SERIAL_LCR_DLAB; in mos7840_send_cmd_write_baud_rate()
1689 mos7840_port->shadowLCR = Data; in mos7840_send_cmd_write_baud_rate()
1703 struct moschip_port *mos7840_port, struct ktermios *old_termios) in mos7840_change_port_settings() argument
1716 if (mos7840_port == NULL) in mos7840_change_port_settings()
1719 port = mos7840_port->port; in mos7840_change_port_settings()
1729 if (!mos7840_port->open) { in mos7840_change_port_settings()
1788 mos7840_port->shadowLCR &= in mos7840_change_port_settings()
1790 mos7840_port->shadowLCR |= (lData | lParity | lStop); in mos7840_change_port_settings()
1793 mos7840_port->shadowLCR); in mos7840_change_port_settings()
1805 Data = mos7840_port->shadowLCR; in mos7840_change_port_settings()
1810 mos7840_port->shadowMCR = Data; in mos7840_change_port_settings()
1817 mos7840_port->shadowMCR = MCR_MASTER_IE; in mos7840_change_port_settings()
1819 mos7840_port->shadowMCR |= (MCR_DTR | MCR_RTS); in mos7840_change_port_settings()
1822 mos7840_port->shadowMCR |= (MCR_XON_ANY); in mos7840_change_port_settings()
1824 mos7840_port->shadowMCR &= ~(MCR_XON_ANY); in mos7840_change_port_settings()
1826 Data = mos7840_port->shadowMCR; in mos7840_change_port_settings()
1839 status = mos7840_send_cmd_write_baud_rate(mos7840_port, baud); in mos7840_change_port_settings()
1845 if (mos7840_port->read_urb_busy == false) { in mos7840_change_port_settings()
1846 mos7840_port->read_urb_busy = true; in mos7840_change_port_settings()
1847 status = usb_submit_urb(mos7840_port->read_urb, GFP_KERNEL); in mos7840_change_port_settings()
1851 mos7840_port->read_urb_busy = false; in mos7840_change_port_settings()
1855 mos7840_port->shadowLCR); in mos7840_change_port_settings()
1871 struct moschip_port *mos7840_port; in mos7840_set_termios() local
1881 mos7840_port = mos7840_get_port_private(port); in mos7840_set_termios()
1883 if (mos7840_port == NULL) in mos7840_set_termios()
1886 if (!mos7840_port->open) { in mos7840_set_termios()
1902 mos7840_change_port_settings(tty, mos7840_port, old_termios); in mos7840_set_termios()
1904 if (!mos7840_port->read_urb) { in mos7840_set_termios()
1909 if (mos7840_port->read_urb_busy == false) { in mos7840_set_termios()
1910 mos7840_port->read_urb_busy = true; in mos7840_set_termios()
1911 status = usb_submit_urb(mos7840_port->read_urb, GFP_KERNEL); in mos7840_set_termios()
1915 mos7840_port->read_urb_busy = false; in mos7840_set_termios()
1951 static int mos7840_get_serial_info(struct moschip_port *mos7840_port, in mos7840_get_serial_info() argument
1956 if (mos7840_port == NULL) in mos7840_get_serial_info()
1965 tmp.line = mos7840_port->port->minor; in mos7840_get_serial_info()
1966 tmp.port = mos7840_port->port->port_number; in mos7840_get_serial_info()
1989 struct moschip_port *mos7840_port; in mos7840_ioctl() local
1994 mos7840_port = mos7840_get_port_private(port); in mos7840_ioctl()
1996 if (mos7840_port == NULL) in mos7840_ioctl()
2008 return mos7840_get_serial_info(mos7840_port, argp); in mos7840_ioctl()
2123 struct moschip_port *mos7840_port; in mos7840_port_probe() local
2134 mos7840_port = kzalloc(sizeof(struct moschip_port), GFP_KERNEL); in mos7840_port_probe()
2135 if (!mos7840_port) in mos7840_port_probe()
2142 mos7840_port->port = port; in mos7840_port_probe()
2143 mos7840_set_port_private(port, mos7840_port); in mos7840_port_probe()
2144 spin_lock_init(&mos7840_port->pool_lock); in mos7840_port_probe()
2149 mos7840_port->port_num = pnum + 1; in mos7840_port_probe()
2151 dev_dbg(&port->dev, "mos7840_port->port_num = %d\n", mos7840_port->port_num); in mos7840_port_probe()
2153 if (mos7840_port->port_num == 1) { in mos7840_port_probe()
2154 mos7840_port->SpRegOffset = 0x0; in mos7840_port_probe()
2155 mos7840_port->ControlRegOffset = 0x1; in mos7840_port_probe()
2156 mos7840_port->DcrRegOffset = 0x4; in mos7840_port_probe()
2157 } else if ((mos7840_port->port_num == 2) && (serial->num_ports == 4)) { in mos7840_port_probe()
2158 mos7840_port->SpRegOffset = 0x8; in mos7840_port_probe()
2159 mos7840_port->ControlRegOffset = 0x9; in mos7840_port_probe()
2160 mos7840_port->DcrRegOffset = 0x16; in mos7840_port_probe()
2161 } else if ((mos7840_port->port_num == 2) && (serial->num_ports == 2)) { in mos7840_port_probe()
2162 mos7840_port->SpRegOffset = 0xa; in mos7840_port_probe()
2163 mos7840_port->ControlRegOffset = 0xb; in mos7840_port_probe()
2164 mos7840_port->DcrRegOffset = 0x19; in mos7840_port_probe()
2165 } else if ((mos7840_port->port_num == 3) && (serial->num_ports == 4)) { in mos7840_port_probe()
2166 mos7840_port->SpRegOffset = 0xa; in mos7840_port_probe()
2167 mos7840_port->ControlRegOffset = 0xb; in mos7840_port_probe()
2168 mos7840_port->DcrRegOffset = 0x19; in mos7840_port_probe()
2169 } else if ((mos7840_port->port_num == 4) && (serial->num_ports == 4)) { in mos7840_port_probe()
2170 mos7840_port->SpRegOffset = 0xc; in mos7840_port_probe()
2171 mos7840_port->ControlRegOffset = 0xd; in mos7840_port_probe()
2172 mos7840_port->DcrRegOffset = 0x1c; in mos7840_port_probe()
2174 mos7840_dump_serial_port(port, mos7840_port); in mos7840_port_probe()
2175 mos7840_set_port_private(port, mos7840_port); in mos7840_port_probe()
2179 mos7840_port->ControlRegOffset, &Data); in mos7840_port_probe()
2191 mos7840_port->ControlRegOffset, Data); in mos7840_port_probe()
2202 (__u16) (mos7840_port->DcrRegOffset + 0), Data); in mos7840_port_probe()
2211 (__u16) (mos7840_port->DcrRegOffset + 1), Data); in mos7840_port_probe()
2220 (__u16) (mos7840_port->DcrRegOffset + 2), Data); in mos7840_port_probe()
2254 if ((mos7840_port->port_num != 1) && (serial->num_ports == 2)) { in mos7840_port_probe()
2258 ((__u16)mos7840_port->port_num)), Data); in mos7840_port_probe()
2260 (__u16)(ZLP_REG1 + ((__u16) mos7840_port->port_num))); in mos7840_port_probe()
2270 ((__u16)mos7840_port->port_num) - 0x1), Data); in mos7840_port_probe()
2272 (__u16)(ZLP_REG1 + ((__u16) mos7840_port->port_num) - 0x1)); in mos7840_port_probe()
2280 mos7840_port->control_urb = usb_alloc_urb(0, GFP_KERNEL); in mos7840_port_probe()
2281 mos7840_port->ctrl_buf = kmalloc(16, GFP_KERNEL); in mos7840_port_probe()
2282 mos7840_port->dr = kmalloc(sizeof(struct usb_ctrlrequest), in mos7840_port_probe()
2284 if (!mos7840_port->control_urb || !mos7840_port->ctrl_buf || in mos7840_port_probe()
2285 !mos7840_port->dr) { in mos7840_port_probe()
2290 mos7840_port->has_led = false; in mos7840_port_probe()
2294 mos7840_port->has_led = true; in mos7840_port_probe()
2296 mos7840_port->led_urb = usb_alloc_urb(0, GFP_KERNEL); in mos7840_port_probe()
2297 mos7840_port->led_dr = kmalloc(sizeof(*mos7840_port->led_dr), in mos7840_port_probe()
2299 if (!mos7840_port->led_urb || !mos7840_port->led_dr) { in mos7840_port_probe()
2304 init_timer(&mos7840_port->led_timer1); in mos7840_port_probe()
2305 mos7840_port->led_timer1.function = mos7840_led_off; in mos7840_port_probe()
2306 mos7840_port->led_timer1.expires = in mos7840_port_probe()
2308 mos7840_port->led_timer1.data = (unsigned long)mos7840_port; in mos7840_port_probe()
2310 init_timer(&mos7840_port->led_timer2); in mos7840_port_probe()
2311 mos7840_port->led_timer2.function = mos7840_led_flag_off; in mos7840_port_probe()
2312 mos7840_port->led_timer2.expires = in mos7840_port_probe()
2314 mos7840_port->led_timer2.data = (unsigned long)mos7840_port; in mos7840_port_probe()
2337 kfree(mos7840_port->led_dr); in mos7840_port_probe()
2338 usb_free_urb(mos7840_port->led_urb); in mos7840_port_probe()
2339 kfree(mos7840_port->dr); in mos7840_port_probe()
2340 kfree(mos7840_port->ctrl_buf); in mos7840_port_probe()
2341 usb_free_urb(mos7840_port->control_urb); in mos7840_port_probe()
2342 kfree(mos7840_port); in mos7840_port_probe()
2349 struct moschip_port *mos7840_port; in mos7840_port_remove() local
2351 mos7840_port = mos7840_get_port_private(port); in mos7840_port_remove()
2353 if (mos7840_port->has_led) { in mos7840_port_remove()
2357 del_timer_sync(&mos7840_port->led_timer1); in mos7840_port_remove()
2358 del_timer_sync(&mos7840_port->led_timer2); in mos7840_port_remove()
2360 usb_kill_urb(mos7840_port->led_urb); in mos7840_port_remove()
2361 usb_free_urb(mos7840_port->led_urb); in mos7840_port_remove()
2362 kfree(mos7840_port->led_dr); in mos7840_port_remove()
2364 usb_kill_urb(mos7840_port->control_urb); in mos7840_port_remove()
2365 usb_free_urb(mos7840_port->control_urb); in mos7840_port_remove()
2366 kfree(mos7840_port->ctrl_buf); in mos7840_port_remove()
2367 kfree(mos7840_port->dr); in mos7840_port_remove()
2368 kfree(mos7840_port); in mos7840_port_remove()