162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * USB Serial "Simple" driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 2001-2006,2008,2013 Greg Kroah-Hartman <greg@kroah.com> 662306a36Sopenharmony_ci * Copyright (C) 2005 Arthur Huillet (ahuillet@users.sf.net) 762306a36Sopenharmony_ci * Copyright (C) 2005 Thomas Hergenhahn <thomas.hergenhahn@suse.de> 862306a36Sopenharmony_ci * Copyright (C) 2009 Outpost Embedded, LLC 962306a36Sopenharmony_ci * Copyright (C) 2010 Zilogic Systems <code@zilogic.com> 1062306a36Sopenharmony_ci * Copyright (C) 2013 Wei Shuai <cpuwolf@gmail.com> 1162306a36Sopenharmony_ci * Copyright (C) 2013 Linux Foundation 1262306a36Sopenharmony_ci */ 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#include <linux/kernel.h> 1562306a36Sopenharmony_ci#include <linux/tty.h> 1662306a36Sopenharmony_ci#include <linux/module.h> 1762306a36Sopenharmony_ci#include <linux/usb.h> 1862306a36Sopenharmony_ci#include <linux/usb/serial.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define DEVICE_N(vendor, IDS, nport) \ 2162306a36Sopenharmony_cistatic const struct usb_device_id vendor##_id_table[] = { \ 2262306a36Sopenharmony_ci IDS(), \ 2362306a36Sopenharmony_ci { }, \ 2462306a36Sopenharmony_ci}; \ 2562306a36Sopenharmony_cistatic struct usb_serial_driver vendor##_device = { \ 2662306a36Sopenharmony_ci .driver = { \ 2762306a36Sopenharmony_ci .owner = THIS_MODULE, \ 2862306a36Sopenharmony_ci .name = #vendor, \ 2962306a36Sopenharmony_ci }, \ 3062306a36Sopenharmony_ci .id_table = vendor##_id_table, \ 3162306a36Sopenharmony_ci .num_ports = nport, \ 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci#define DEVICE(vendor, IDS) DEVICE_N(vendor, IDS, 1) 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci/* Medtronic CareLink USB driver */ 3762306a36Sopenharmony_ci#define CARELINK_IDS() \ 3862306a36Sopenharmony_ci { USB_DEVICE(0x0a21, 0x8001) } /* MMT-7305WW */ 3962306a36Sopenharmony_ciDEVICE(carelink, CARELINK_IDS); 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* Infineon Flashloader driver */ 4262306a36Sopenharmony_ci#define FLASHLOADER_IDS() \ 4362306a36Sopenharmony_ci { USB_DEVICE_INTERFACE_CLASS(0x058b, 0x0041, USB_CLASS_CDC_DATA) }, \ 4462306a36Sopenharmony_ci { USB_DEVICE(0x8087, 0x0716) }, \ 4562306a36Sopenharmony_ci { USB_DEVICE(0x8087, 0x0801) } 4662306a36Sopenharmony_ciDEVICE(flashloader, FLASHLOADER_IDS); 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci/* Funsoft Serial USB driver */ 4962306a36Sopenharmony_ci#define FUNSOFT_IDS() \ 5062306a36Sopenharmony_ci { USB_DEVICE(0x1404, 0xcddc) } 5162306a36Sopenharmony_ciDEVICE(funsoft, FUNSOFT_IDS); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci/* Google Serial USB SubClass */ 5462306a36Sopenharmony_ci#define GOOGLE_IDS() \ 5562306a36Sopenharmony_ci { USB_VENDOR_AND_INTERFACE_INFO(0x18d1, \ 5662306a36Sopenharmony_ci USB_CLASS_VENDOR_SPEC, \ 5762306a36Sopenharmony_ci 0x50, \ 5862306a36Sopenharmony_ci 0x01) } 5962306a36Sopenharmony_ciDEVICE(google, GOOGLE_IDS); 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* HP4x (48/49) Generic Serial driver */ 6262306a36Sopenharmony_ci#define HP4X_IDS() \ 6362306a36Sopenharmony_ci { USB_DEVICE(0x03f0, 0x0121) } 6462306a36Sopenharmony_ciDEVICE(hp4x, HP4X_IDS); 6562306a36Sopenharmony_ci 6662306a36Sopenharmony_ci/* KAUFMANN RKS+CAN VCP */ 6762306a36Sopenharmony_ci#define KAUFMANN_IDS() \ 6862306a36Sopenharmony_ci { USB_DEVICE(0x16d0, 0x0870) } 6962306a36Sopenharmony_ciDEVICE(kaufmann, KAUFMANN_IDS); 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci/* Libtransistor USB console */ 7262306a36Sopenharmony_ci#define LIBTRANSISTOR_IDS() \ 7362306a36Sopenharmony_ci { USB_DEVICE(0x1209, 0x8b00) } 7462306a36Sopenharmony_ciDEVICE(libtransistor, LIBTRANSISTOR_IDS); 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/* Motorola USB Phone driver */ 7762306a36Sopenharmony_ci#define MOTO_IDS() \ 7862306a36Sopenharmony_ci { USB_DEVICE(0x05c6, 0x3197) }, /* unknown Motorola phone */ \ 7962306a36Sopenharmony_ci { USB_DEVICE(0x0c44, 0x0022) }, /* unknown Motorola phone */ \ 8062306a36Sopenharmony_ci { USB_DEVICE(0x22b8, 0x2a64) }, /* Motorola KRZR K1m */ \ 8162306a36Sopenharmony_ci { USB_DEVICE(0x22b8, 0x2c84) }, /* Motorola VE240 phone */ \ 8262306a36Sopenharmony_ci { USB_DEVICE(0x22b8, 0x2c64) } /* Motorola V950 phone */ 8362306a36Sopenharmony_ciDEVICE(moto_modem, MOTO_IDS); 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci/* Motorola Tetra driver */ 8662306a36Sopenharmony_ci#define MOTOROLA_TETRA_IDS() \ 8762306a36Sopenharmony_ci { USB_DEVICE(0x0cad, 0x9011) }, /* Motorola Solutions TETRA PEI */ \ 8862306a36Sopenharmony_ci { USB_DEVICE(0x0cad, 0x9012) }, /* MTP6550 */ \ 8962306a36Sopenharmony_ci { USB_DEVICE(0x0cad, 0x9013) }, /* MTP3xxx */ \ 9062306a36Sopenharmony_ci { USB_DEVICE(0x0cad, 0x9015) }, /* MTP85xx */ \ 9162306a36Sopenharmony_ci { USB_DEVICE(0x0cad, 0x9016) } /* TPG2200 */ 9262306a36Sopenharmony_ciDEVICE(motorola_tetra, MOTOROLA_TETRA_IDS); 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* Nokia mobile phone driver */ 9562306a36Sopenharmony_ci#define NOKIA_IDS() \ 9662306a36Sopenharmony_ci { USB_DEVICE(0x0421, 0x069a) } /* Nokia 130 (RM-1035) */ 9762306a36Sopenharmony_ciDEVICE(nokia, NOKIA_IDS); 9862306a36Sopenharmony_ci 9962306a36Sopenharmony_ci/* Novatel Wireless GPS driver */ 10062306a36Sopenharmony_ci#define NOVATEL_IDS() \ 10162306a36Sopenharmony_ci { USB_DEVICE(0x09d7, 0x0100) } /* NovAtel FlexPack GPS */ 10262306a36Sopenharmony_ciDEVICE_N(novatel_gps, NOVATEL_IDS, 3); 10362306a36Sopenharmony_ci 10462306a36Sopenharmony_ci/* Siemens USB/MPI adapter */ 10562306a36Sopenharmony_ci#define SIEMENS_IDS() \ 10662306a36Sopenharmony_ci { USB_DEVICE(0x908, 0x0004) } 10762306a36Sopenharmony_ciDEVICE(siemens_mpi, SIEMENS_IDS); 10862306a36Sopenharmony_ci 10962306a36Sopenharmony_ci/* Suunto ANT+ USB Driver */ 11062306a36Sopenharmony_ci#define SUUNTO_IDS() \ 11162306a36Sopenharmony_ci { USB_DEVICE(0x0fcf, 0x1008) }, \ 11262306a36Sopenharmony_ci { USB_DEVICE(0x0fcf, 0x1009) } /* Dynastream ANT USB-m Stick */ 11362306a36Sopenharmony_ciDEVICE(suunto, SUUNTO_IDS); 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci/* ViVOpay USB Serial Driver */ 11662306a36Sopenharmony_ci#define VIVOPAY_IDS() \ 11762306a36Sopenharmony_ci { USB_DEVICE(0x1d5f, 0x1004) } /* ViVOpay 8800 */ 11862306a36Sopenharmony_ciDEVICE(vivopay, VIVOPAY_IDS); 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci/* ZIO Motherboard USB driver */ 12162306a36Sopenharmony_ci#define ZIO_IDS() \ 12262306a36Sopenharmony_ci { USB_DEVICE(0x1CBE, 0x0103) } 12362306a36Sopenharmony_ciDEVICE(zio, ZIO_IDS); 12462306a36Sopenharmony_ci 12562306a36Sopenharmony_ci/* All of the above structures mushed into two lists */ 12662306a36Sopenharmony_cistatic struct usb_serial_driver * const serial_drivers[] = { 12762306a36Sopenharmony_ci &carelink_device, 12862306a36Sopenharmony_ci &flashloader_device, 12962306a36Sopenharmony_ci &funsoft_device, 13062306a36Sopenharmony_ci &google_device, 13162306a36Sopenharmony_ci &hp4x_device, 13262306a36Sopenharmony_ci &kaufmann_device, 13362306a36Sopenharmony_ci &libtransistor_device, 13462306a36Sopenharmony_ci &moto_modem_device, 13562306a36Sopenharmony_ci &motorola_tetra_device, 13662306a36Sopenharmony_ci &nokia_device, 13762306a36Sopenharmony_ci &novatel_gps_device, 13862306a36Sopenharmony_ci &siemens_mpi_device, 13962306a36Sopenharmony_ci &suunto_device, 14062306a36Sopenharmony_ci &vivopay_device, 14162306a36Sopenharmony_ci &zio_device, 14262306a36Sopenharmony_ci NULL 14362306a36Sopenharmony_ci}; 14462306a36Sopenharmony_ci 14562306a36Sopenharmony_cistatic const struct usb_device_id id_table[] = { 14662306a36Sopenharmony_ci CARELINK_IDS(), 14762306a36Sopenharmony_ci FLASHLOADER_IDS(), 14862306a36Sopenharmony_ci FUNSOFT_IDS(), 14962306a36Sopenharmony_ci GOOGLE_IDS(), 15062306a36Sopenharmony_ci HP4X_IDS(), 15162306a36Sopenharmony_ci KAUFMANN_IDS(), 15262306a36Sopenharmony_ci LIBTRANSISTOR_IDS(), 15362306a36Sopenharmony_ci MOTO_IDS(), 15462306a36Sopenharmony_ci MOTOROLA_TETRA_IDS(), 15562306a36Sopenharmony_ci NOKIA_IDS(), 15662306a36Sopenharmony_ci NOVATEL_IDS(), 15762306a36Sopenharmony_ci SIEMENS_IDS(), 15862306a36Sopenharmony_ci SUUNTO_IDS(), 15962306a36Sopenharmony_ci VIVOPAY_IDS(), 16062306a36Sopenharmony_ci ZIO_IDS(), 16162306a36Sopenharmony_ci { }, 16262306a36Sopenharmony_ci}; 16362306a36Sopenharmony_ciMODULE_DEVICE_TABLE(usb, id_table); 16462306a36Sopenharmony_ci 16562306a36Sopenharmony_cimodule_usb_serial_driver(serial_drivers, id_table); 16662306a36Sopenharmony_ciMODULE_LICENSE("GPL v2"); 167