2 * Copyright (c) 2012 GCT Semiconductor, Inc. All rights reserved.
4 * This software is licensed under the terms of the GNU General Public
5 * License version 2, as published by the Free Software Foundation, and
6 * may be copied, distributed, and modified under those terms.
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
14 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
16 #include <linux/module.h>
17 #include <linux/kernel.h>
18 #include <linux/usb.h>
19 #include <linux/errno.h>
20 #include <linux/init.h>
21 #include <linux/tty.h>
22 #include <linux/tty_driver.h>
23 #include <linux/tty_flip.h>
24 #include <linux/slab.h>
25 #include <linux/usb/cdc.h>
29 static struct workqueue_struct
*mux_rx_wq
;
31 static u16 packet_type
[TTY_MAX_COUNT
] = {0xF011, 0xF010};
33 #define USB_DEVICE_CDC_DATA(vid, pid) \
35 USB_DEVICE_ID_MATCH_DEVICE |\
36 USB_DEVICE_ID_MATCH_INT_CLASS |\
37 USB_DEVICE_ID_MATCH_INT_SUBCLASS,\
40 .bInterfaceClass = USB_CLASS_COMM,\
41 .bInterfaceSubClass = USB_CDC_SUBCLASS_ACM
43 static const struct usb_device_id id_table
[] = {
44 { USB_DEVICE_CDC_DATA(0x1076, 0x8000) }, /* GCT GDM7240 */
45 { USB_DEVICE_CDC_DATA(0x1076, 0x8f00) }, /* GCT GDM7243 */
46 { USB_DEVICE_CDC_DATA(0x1076, 0x9000) }, /* GCT GDM7243 */
47 { USB_DEVICE_CDC_DATA(0x1d74, 0x2300) }, /* LGIT Phoenix */
51 MODULE_DEVICE_TABLE(usb
, id_table
);
53 static int packet_type_to_index(u16 packetType
)
57 for (i
= 0; i
< TTY_MAX_COUNT
; i
++) {
58 if (packet_type
[i
] == packetType
)
65 static struct mux_tx
*alloc_mux_tx(int len
)
67 struct mux_tx
*t
= NULL
;
69 t
= kzalloc(sizeof(*t
), GFP_ATOMIC
);
73 t
->urb
= usb_alloc_urb(0, GFP_ATOMIC
);
74 t
->buf
= kmalloc(MUX_TX_MAX_SIZE
, GFP_ATOMIC
);
75 if (!t
->urb
|| !t
->buf
) {
85 static void free_mux_tx(struct mux_tx
*t
)
94 static struct mux_rx
*alloc_mux_rx(void)
96 struct mux_rx
*r
= NULL
;
98 r
= kzalloc(sizeof(*r
), GFP_KERNEL
);
102 r
->urb
= usb_alloc_urb(0, GFP_KERNEL
);
103 r
->buf
= kmalloc(MUX_RX_MAX_SIZE
, GFP_KERNEL
);
104 if (!r
->urb
|| !r
->buf
) {
105 usb_free_urb(r
->urb
);
114 static void free_mux_rx(struct mux_rx
*r
)
117 usb_free_urb(r
->urb
);
123 static struct mux_rx
*get_rx_struct(struct rx_cxt
*rx
)
128 spin_lock_irqsave(&rx
->free_list_lock
, flags
);
130 if (list_empty(&rx
->rx_free_list
)) {
131 spin_unlock_irqrestore(&rx
->free_list_lock
, flags
);
135 r
= list_entry(rx
->rx_free_list
.prev
, struct mux_rx
, free_list
);
136 list_del(&r
->free_list
);
138 spin_unlock_irqrestore(&rx
->free_list_lock
, flags
);
143 static void put_rx_struct(struct rx_cxt
*rx
, struct mux_rx
*r
)
147 spin_lock_irqsave(&rx
->free_list_lock
, flags
);
148 list_add_tail(&r
->free_list
, &rx
->rx_free_list
);
149 spin_unlock_irqrestore(&rx
->free_list_lock
, flags
);
152 static int up_to_host(struct mux_rx
*r
)
154 struct mux_dev
*mux_dev
= r
->mux_dev
;
155 struct mux_pkt_header
*mux_header
;
156 unsigned int start_flag
;
157 unsigned int payload_size
;
158 unsigned short packet_type
;
160 u32 packet_size_sum
= r
->offset
;
162 int ret
= TO_HOST_INVALID_PACKET
;
166 mux_header
= (struct mux_pkt_header
*)(r
->buf
+
168 start_flag
= __le32_to_cpu(mux_header
->start_flag
);
169 payload_size
= __le32_to_cpu(mux_header
->payload_size
);
170 packet_type
= __le16_to_cpu(mux_header
->packet_type
);
172 if (start_flag
!= START_FLAG
) {
173 pr_err("invalid START_FLAG %x\n", start_flag
);
177 total_len
= ALIGN(MUX_HEADER_SIZE
+ payload_size
, 4);
179 if (len
- packet_size_sum
<
181 pr_err("invalid payload : %d %d %04x\n",
182 payload_size
, len
, packet_type
);
186 index
= packet_type_to_index(packet_type
);
188 pr_err("invalid index %d\n", index
);
192 ret
= r
->callback(mux_header
->data
,
196 RECV_PACKET_PROCESS_CONTINUE
198 if (ret
== TO_HOST_BUFFER_REQUEST_FAIL
) {
199 r
->offset
+= packet_size_sum
;
203 packet_size_sum
+= total_len
;
204 if (len
- packet_size_sum
<= MUX_HEADER_SIZE
+ 2) {
205 ret
= r
->callback(NULL
,
209 RECV_PACKET_PROCESS_COMPLETE
218 static void do_rx(struct work_struct
*work
)
220 struct mux_dev
*mux_dev
=
221 container_of(work
, struct mux_dev
, work_rx
.work
);
223 struct rx_cxt
*rx
= &mux_dev
->rx
;
228 spin_lock_irqsave(&rx
->to_host_lock
, flags
);
229 if (list_empty(&rx
->to_host_list
)) {
230 spin_unlock_irqrestore(&rx
->to_host_lock
, flags
);
233 r
= list_entry(rx
->to_host_list
.next
, struct mux_rx
,
235 list_del(&r
->to_host_list
);
236 spin_unlock_irqrestore(&rx
->to_host_lock
, flags
);
239 if (ret
== TO_HOST_BUFFER_REQUEST_FAIL
)
240 pr_err("failed to send mux data to host\n");
242 put_rx_struct(rx
, r
);
246 static void remove_rx_submit_list(struct mux_rx
*r
, struct rx_cxt
*rx
)
249 struct mux_rx
*r_remove
, *r_remove_next
;
251 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
252 list_for_each_entry_safe(r_remove
, r_remove_next
, &rx
->rx_submit_list
,
255 list_del(&r
->rx_submit_list
);
257 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
260 static void gdm_mux_rcv_complete(struct urb
*urb
)
262 struct mux_rx
*r
= urb
->context
;
263 struct mux_dev
*mux_dev
= r
->mux_dev
;
264 struct rx_cxt
*rx
= &mux_dev
->rx
;
267 remove_rx_submit_list(r
, rx
);
270 if (mux_dev
->usb_state
== PM_NORMAL
)
271 dev_err(&urb
->dev
->dev
, "%s: urb status error %d\n",
272 __func__
, urb
->status
);
273 put_rx_struct(rx
, r
);
275 r
->len
= r
->urb
->actual_length
;
276 spin_lock_irqsave(&rx
->to_host_lock
, flags
);
277 list_add_tail(&r
->to_host_list
, &rx
->to_host_list
);
278 queue_work(mux_rx_wq
, &mux_dev
->work_rx
.work
);
279 spin_unlock_irqrestore(&rx
->to_host_lock
, flags
);
283 static int gdm_mux_recv(void *priv_dev
, int (*cb
)(void *data
, int len
,
284 int tty_index
, struct tty_dev
*tty_dev
, int complete
))
286 struct mux_dev
*mux_dev
= priv_dev
;
287 struct usb_device
*usbdev
= mux_dev
->usbdev
;
289 struct rx_cxt
*rx
= &mux_dev
->rx
;
294 pr_err("device is disconnected\n");
298 r
= get_rx_struct(rx
);
300 pr_err("get_rx_struct fail\n");
305 r
->mux_dev
= (void *)mux_dev
;
309 usb_fill_bulk_urb(r
->urb
,
311 usb_rcvbulkpipe(usbdev
, 0x86),
314 gdm_mux_rcv_complete
,
317 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
318 list_add_tail(&r
->rx_submit_list
, &rx
->rx_submit_list
);
319 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
321 ret
= usb_submit_urb(r
->urb
, GFP_KERNEL
);
324 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
325 list_del(&r
->rx_submit_list
);
326 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
328 put_rx_struct(rx
, r
);
330 pr_err("usb_submit_urb ret=%d\n", ret
);
333 usb_mark_last_busy(usbdev
);
338 static void gdm_mux_send_complete(struct urb
*urb
)
340 struct mux_tx
*t
= urb
->context
;
342 if (urb
->status
== -ECONNRESET
) {
343 dev_info(&urb
->dev
->dev
, "CONNRESET\n");
349 t
->callback(t
->cb_data
);
354 static int gdm_mux_send(void *priv_dev
, void *data
, int len
, int tty_index
,
355 void (*cb
)(void *data
), void *cb_data
)
357 struct mux_dev
*mux_dev
= priv_dev
;
358 struct usb_device
*usbdev
= mux_dev
->usbdev
;
359 struct mux_pkt_header
*mux_header
;
360 struct mux_tx
*t
= NULL
;
361 static u32 seq_num
= 1;
366 if (mux_dev
->usb_state
== PM_SUSPEND
) {
367 ret
= usb_autopm_get_interface(mux_dev
->intf
);
369 usb_autopm_put_interface(mux_dev
->intf
);
372 spin_lock_irqsave(&mux_dev
->write_lock
, flags
);
374 total_len
= ALIGN(MUX_HEADER_SIZE
+ len
, 4);
376 t
= alloc_mux_tx(total_len
);
378 pr_err("alloc_mux_tx fail\n");
379 spin_unlock_irqrestore(&mux_dev
->write_lock
, flags
);
383 mux_header
= (struct mux_pkt_header
*)t
->buf
;
384 mux_header
->start_flag
= __cpu_to_le32(START_FLAG
);
385 mux_header
->seq_num
= __cpu_to_le32(seq_num
++);
386 mux_header
->payload_size
= __cpu_to_le32((u32
)len
);
387 mux_header
->packet_type
= __cpu_to_le16(packet_type
[tty_index
]);
389 memcpy(t
->buf
+ MUX_HEADER_SIZE
, data
, len
);
390 memset(t
->buf
+ MUX_HEADER_SIZE
+ len
, 0, total_len
- MUX_HEADER_SIZE
-
395 t
->cb_data
= cb_data
;
397 usb_fill_bulk_urb(t
->urb
,
399 usb_sndbulkpipe(usbdev
, 5),
402 gdm_mux_send_complete
,
405 ret
= usb_submit_urb(t
->urb
, GFP_ATOMIC
);
407 spin_unlock_irqrestore(&mux_dev
->write_lock
, flags
);
410 pr_err("usb_submit_urb Error: %d\n", ret
);
412 usb_mark_last_busy(usbdev
);
417 static int gdm_mux_send_control(void *priv_dev
, int request
, int value
,
420 struct mux_dev
*mux_dev
= priv_dev
;
421 struct usb_device
*usbdev
= mux_dev
->usbdev
;
424 ret
= usb_control_msg(usbdev
,
425 usb_sndctrlpipe(usbdev
, 0),
436 pr_err("usb_control_msg error: %d\n", ret
);
438 return ret
< 0 ? ret
: 0;
441 static void release_usb(struct mux_dev
*mux_dev
)
443 struct rx_cxt
*rx
= &mux_dev
->rx
;
444 struct mux_rx
*r
, *r_next
;
447 cancel_delayed_work(&mux_dev
->work_rx
);
449 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
450 list_for_each_entry_safe(r
, r_next
, &rx
->rx_submit_list
,
452 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
453 usb_kill_urb(r
->urb
);
454 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
456 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
458 spin_lock_irqsave(&rx
->free_list_lock
, flags
);
459 list_for_each_entry_safe(r
, r_next
, &rx
->rx_free_list
, free_list
) {
460 list_del(&r
->free_list
);
463 spin_unlock_irqrestore(&rx
->free_list_lock
, flags
);
465 spin_lock_irqsave(&rx
->to_host_lock
, flags
);
466 list_for_each_entry_safe(r
, r_next
, &rx
->to_host_list
, to_host_list
) {
467 if (r
->mux_dev
== (void *)mux_dev
) {
468 list_del(&r
->to_host_list
);
472 spin_unlock_irqrestore(&rx
->to_host_lock
, flags
);
475 static int init_usb(struct mux_dev
*mux_dev
)
478 struct rx_cxt
*rx
= &mux_dev
->rx
;
482 spin_lock_init(&mux_dev
->write_lock
);
483 INIT_LIST_HEAD(&rx
->to_host_list
);
484 INIT_LIST_HEAD(&rx
->rx_submit_list
);
485 INIT_LIST_HEAD(&rx
->rx_free_list
);
486 spin_lock_init(&rx
->to_host_lock
);
487 spin_lock_init(&rx
->submit_list_lock
);
488 spin_lock_init(&rx
->free_list_lock
);
490 for (i
= 0; i
< MAX_ISSUE_NUM
* 2; i
++) {
497 list_add(&r
->free_list
, &rx
->rx_free_list
);
500 INIT_DELAYED_WORK(&mux_dev
->work_rx
, do_rx
);
505 static int gdm_mux_probe(struct usb_interface
*intf
,
506 const struct usb_device_id
*id
)
508 struct mux_dev
*mux_dev
;
509 struct tty_dev
*tty_dev
;
510 u16 idVendor
, idProduct
;
511 int bInterfaceNumber
;
514 struct usb_device
*usbdev
= interface_to_usbdev(intf
);
516 bInterfaceNumber
= intf
->cur_altsetting
->desc
.bInterfaceNumber
;
518 idVendor
= __le16_to_cpu(usbdev
->descriptor
.idVendor
);
519 idProduct
= __le16_to_cpu(usbdev
->descriptor
.idProduct
);
521 pr_info("mux vid = 0x%04x pid = 0x%04x\n", idVendor
, idProduct
);
523 if (bInterfaceNumber
!= 2)
526 mux_dev
= kzalloc(sizeof(*mux_dev
), GFP_KERNEL
);
530 tty_dev
= kzalloc(sizeof(*tty_dev
), GFP_KERNEL
);
536 mux_dev
->usbdev
= usbdev
;
537 mux_dev
->control_intf
= intf
;
539 ret
= init_usb(mux_dev
);
543 tty_dev
->priv_dev
= (void *)mux_dev
;
544 tty_dev
->send_func
= gdm_mux_send
;
545 tty_dev
->recv_func
= gdm_mux_recv
;
546 tty_dev
->send_control
= gdm_mux_send_control
;
548 ret
= register_lte_tty_device(tty_dev
, &intf
->dev
);
550 goto err_unregister_tty
;
552 for (i
= 0; i
< TTY_MAX_COUNT
; i
++)
553 mux_dev
->tty_dev
= tty_dev
;
555 mux_dev
->intf
= intf
;
556 mux_dev
->usb_state
= PM_NORMAL
;
559 usb_set_intfdata(intf
, tty_dev
);
564 unregister_lte_tty_device(tty_dev
);
566 release_usb(mux_dev
);
574 static void gdm_mux_disconnect(struct usb_interface
*intf
)
576 struct tty_dev
*tty_dev
;
577 struct mux_dev
*mux_dev
;
578 struct usb_device
*usbdev
= interface_to_usbdev(intf
);
580 tty_dev
= usb_get_intfdata(intf
);
582 mux_dev
= tty_dev
->priv_dev
;
584 release_usb(mux_dev
);
585 unregister_lte_tty_device(tty_dev
);
593 static int gdm_mux_suspend(struct usb_interface
*intf
, pm_message_t pm_msg
)
595 struct tty_dev
*tty_dev
;
596 struct mux_dev
*mux_dev
;
598 struct mux_rx
*r
, *r_next
;
601 tty_dev
= usb_get_intfdata(intf
);
602 mux_dev
= tty_dev
->priv_dev
;
605 if (mux_dev
->usb_state
!= PM_NORMAL
) {
606 dev_err(intf
->usb_dev
, "usb suspend - invalid state\n");
610 mux_dev
->usb_state
= PM_SUSPEND
;
612 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
613 list_for_each_entry_safe(r
, r_next
, &rx
->rx_submit_list
,
615 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
616 usb_kill_urb(r
->urb
);
617 spin_lock_irqsave(&rx
->submit_list_lock
, flags
);
619 spin_unlock_irqrestore(&rx
->submit_list_lock
, flags
);
624 static int gdm_mux_resume(struct usb_interface
*intf
)
626 struct tty_dev
*tty_dev
;
627 struct mux_dev
*mux_dev
;
630 tty_dev
= usb_get_intfdata(intf
);
631 mux_dev
= tty_dev
->priv_dev
;
633 if (mux_dev
->usb_state
!= PM_SUSPEND
) {
634 dev_err(intf
->usb_dev
, "usb resume - invalid state\n");
638 mux_dev
->usb_state
= PM_NORMAL
;
640 for (i
= 0; i
< MAX_ISSUE_NUM
; i
++)
641 gdm_mux_recv(mux_dev
, mux_dev
->rx_cb
);
646 static struct usb_driver gdm_mux_driver
= {
648 .probe
= gdm_mux_probe
,
649 .disconnect
= gdm_mux_disconnect
,
650 .id_table
= id_table
,
651 .supports_autosuspend
= 1,
652 .suspend
= gdm_mux_suspend
,
653 .resume
= gdm_mux_resume
,
654 .reset_resume
= gdm_mux_resume
,
657 static int __init
gdm_usb_mux_init(void)
660 mux_rx_wq
= create_workqueue("mux_rx_wq");
662 pr_err("work queue create fail\n");
666 register_lte_tty_driver();
668 return usb_register(&gdm_mux_driver
);
671 static void __exit
gdm_usb_mux_exit(void)
673 unregister_lte_tty_driver();
676 flush_workqueue(mux_rx_wq
);
677 destroy_workqueue(mux_rx_wq
);
680 usb_deregister(&gdm_mux_driver
);
683 module_init(gdm_usb_mux_init
);
684 module_exit(gdm_usb_mux_exit
);
686 MODULE_DESCRIPTION("GCT LTE TTY Device Driver");
687 MODULE_LICENSE("GPL");