15fd54aceSGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0 2019ccc73SDan Williams /* 3019ccc73SDan Williams * Qualcomm USB Auxiliary Serial Port driver 4019ccc73SDan Williams * 5019ccc73SDan Williams * Copyright (C) 2008 Greg Kroah-Hartman <greg@kroah.com> 6019ccc73SDan Williams * Copyright (C) 2010 Dan Williams <dcbw@redhat.com> 7019ccc73SDan Williams * 8019ccc73SDan Williams * Devices listed here usually provide a CDC ACM port on which normal modem 9019ccc73SDan Williams * AT commands and PPP can be used. But when that port is in-use by PPP it 10019ccc73SDan Williams * cannot be used simultaneously for status or signal strength. Instead, the 11019ccc73SDan Williams * ports here can be queried for that information using the Qualcomm DM 12019ccc73SDan Williams * protocol. 13019ccc73SDan Williams */ 14019ccc73SDan Williams 15019ccc73SDan Williams #include <linux/kernel.h> 16019ccc73SDan Williams #include <linux/tty.h> 17019ccc73SDan Williams #include <linux/module.h> 18019ccc73SDan Williams #include <linux/usb.h> 19019ccc73SDan Williams #include <linux/usb/serial.h> 20019ccc73SDan Williams 21019ccc73SDan Williams /* NOTE: for now, only use this driver for devices that provide a CDC-ACM port 22019ccc73SDan Williams * for normal AT commands, but also provide secondary USB interfaces for the 23019ccc73SDan Williams * QCDM-capable ports. Devices that do not provide a CDC-ACM port should 24019ccc73SDan Williams * probably be driven by option.ko. 25019ccc73SDan Williams */ 26019ccc73SDan Williams 27019ccc73SDan Williams /* UTStarcom/Pantech/Curitel devices */ 28019ccc73SDan Williams #define UTSTARCOM_VENDOR_ID 0x106c 29019ccc73SDan Williams #define UTSTARCOM_PRODUCT_PC5740 0x3701 30019ccc73SDan Williams #define UTSTARCOM_PRODUCT_PC5750 0x3702 /* aka Pantech PX-500 */ 31019ccc73SDan Williams #define UTSTARCOM_PRODUCT_UM150 0x3711 32019ccc73SDan Williams #define UTSTARCOM_PRODUCT_UM175_V1 0x3712 33019ccc73SDan Williams #define UTSTARCOM_PRODUCT_UM175_V2 0x3714 34019ccc73SDan Williams #define UTSTARCOM_PRODUCT_UM175_ALLTEL 0x3715 35019ccc73SDan Williams 36019ccc73SDan Williams /* CMOTECH devices */ 37019ccc73SDan Williams #define CMOTECH_VENDOR_ID 0x16d8 38019ccc73SDan Williams #define CMOTECH_PRODUCT_CDU550 0x5553 39019ccc73SDan Williams #define CMOTECH_PRODUCT_CDX650 0x6512 40019ccc73SDan Williams 41898f89c3SDan Williams /* LG devices */ 42898f89c3SDan Williams #define LG_VENDOR_ID 0x1004 43898f89c3SDan Williams #define LG_PRODUCT_VX4400_6000 0x6000 /* VX4400/VX6000/Rumor */ 44898f89c3SDan Williams 45898f89c3SDan Williams /* Sanyo devices */ 46898f89c3SDan Williams #define SANYO_VENDOR_ID 0x0474 47898f89c3SDan Williams #define SANYO_PRODUCT_KATANA_LX 0x0754 /* SCP-3800 (Katana LX) */ 48898f89c3SDan Williams 49f5cddcd0SDan Williams /* Samsung devices */ 50f5cddcd0SDan Williams #define SAMSUNG_VENDOR_ID 0x04e8 51f5cddcd0SDan Williams #define SAMSUNG_PRODUCT_U520 0x6640 /* SCH-U520 */ 52f5cddcd0SDan Williams 535c6b98ddSJohan Hovold static const struct usb_device_id id_table[] = { 54019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, UTSTARCOM_PRODUCT_PC5740, 0xff, 0x00, 0x00) }, 55019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, UTSTARCOM_PRODUCT_PC5750, 0xff, 0x00, 0x00) }, 56019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, UTSTARCOM_PRODUCT_UM150, 0xff, 0x00, 0x00) }, 57019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, UTSTARCOM_PRODUCT_UM175_V1, 0xff, 0x00, 0x00) }, 58019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, UTSTARCOM_PRODUCT_UM175_V2, 0xff, 0x00, 0x00) }, 59019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, UTSTARCOM_PRODUCT_UM175_ALLTEL, 0xff, 0x00, 0x00) }, 60019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDU550, 0xff, 0xff, 0x00) }, 61019ccc73SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(CMOTECH_VENDOR_ID, CMOTECH_PRODUCT_CDX650, 0xff, 0xff, 0x00) }, 62898f89c3SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(LG_VENDOR_ID, LG_PRODUCT_VX4400_6000, 0xff, 0xff, 0x00) }, 63898f89c3SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(SANYO_VENDOR_ID, SANYO_PRODUCT_KATANA_LX, 0xff, 0xff, 0x00) }, 64f5cddcd0SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(SAMSUNG_VENDOR_ID, SAMSUNG_PRODUCT_U520, 0xff, 0x00, 0x00) }, 65c638eb28SBjørn Mork { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfd, 0xff) }, /* NMEA */ 66c638eb28SBjørn Mork { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xfe, 0xff) }, /* WMC */ 67c638eb28SBjørn Mork { USB_VENDOR_AND_INTERFACE_INFO(UTSTARCOM_VENDOR_ID, 0xff, 0xff, 0xff) }, /* DIAG */ 682d90e636SDan Williams { USB_DEVICE_AND_INTERFACE_INFO(0x1fac, 0x0151, 0xff, 0xff, 0xff) }, 69019ccc73SDan Williams { }, 70019ccc73SDan Williams }; 71019ccc73SDan Williams MODULE_DEVICE_TABLE(usb, id_table); 72019ccc73SDan Williams 73019ccc73SDan Williams static struct usb_serial_driver qcaux_device = { 74019ccc73SDan Williams .driver = { 75019ccc73SDan Williams .owner = THIS_MODULE, 76019ccc73SDan Williams .name = "qcaux", 77019ccc73SDan Williams }, 78019ccc73SDan Williams .id_table = id_table, 79019ccc73SDan Williams .num_ports = 1, 80019ccc73SDan Williams }; 81019ccc73SDan Williams 82d860322fSAlan Stern static struct usb_serial_driver * const serial_drivers[] = { 83d860322fSAlan Stern &qcaux_device, NULL 84d860322fSAlan Stern }; 85d860322fSAlan Stern 8668e24113SGreg Kroah-Hartman module_usb_serial_driver(serial_drivers, id_table); 87*627cfa89SJohan Hovold MODULE_LICENSE("GPL v2"); 88