USB: add new moto_modem driver for some Morotola phones
This should work on a KRZR K1m, and some other Motorola phones that do not use the "standard" cdc ACM protocol to talk to USB hosts. Tested-by: Jeff Garzik <jeff@garzik.org> Cc: Jiang Dejun <a5652c@motorola.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
					parent
					
						
							
								9604006d28
							
						
					
				
			
			
				commit
				
					
						6986a978ee
					
				
			
		
					 3 changed files with 80 additions and 0 deletions
				
			
		|  | @ -447,6 +447,15 @@ config USB_SERIAL_MOS7840 | ||||||
| 	  To compile this driver as a module, choose M here: the | 	  To compile this driver as a module, choose M here: the | ||||||
| 	  module will be called mos7840.  If unsure, choose N. | 	  module will be called mos7840.  If unsure, choose N. | ||||||
| 
 | 
 | ||||||
|  | config USB_SERIAL_MOTOROLA | ||||||
|  | 	tristate "USB Motorola Phone modem driver" | ||||||
|  | 	---help--- | ||||||
|  | 	  Say Y here if you want to use a Motorola phone with a USB | ||||||
|  | 	  connector as a modem link. | ||||||
|  | 
 | ||||||
|  | 	  To compile this driver as a module, choose M here: the | ||||||
|  | 	  module will be called moto_modem.  If unsure, choose N. | ||||||
|  | 
 | ||||||
| config USB_SERIAL_NAVMAN | config USB_SERIAL_NAVMAN | ||||||
| 	tristate "USB Navman GPS device" | 	tristate "USB Navman GPS device" | ||||||
| 	help | 	help | ||||||
|  |  | ||||||
|  | @ -39,6 +39,7 @@ obj-$(CONFIG_USB_SERIAL_KOBIL_SCT)		+= kobil_sct.o | ||||||
| obj-$(CONFIG_USB_SERIAL_MCT_U232)		+= mct_u232.o | obj-$(CONFIG_USB_SERIAL_MCT_U232)		+= mct_u232.o | ||||||
| obj-$(CONFIG_USB_SERIAL_MOS7720)		+= mos7720.o | obj-$(CONFIG_USB_SERIAL_MOS7720)		+= mos7720.o | ||||||
| obj-$(CONFIG_USB_SERIAL_MOS7840)		+= mos7840.o | obj-$(CONFIG_USB_SERIAL_MOS7840)		+= mos7840.o | ||||||
|  | obj-$(CONFIG_USB_SERIAL_MOTOROLA)		+= moto_modem.o | ||||||
| obj-$(CONFIG_USB_SERIAL_NAVMAN)			+= navman.o | obj-$(CONFIG_USB_SERIAL_NAVMAN)			+= navman.o | ||||||
| obj-$(CONFIG_USB_SERIAL_OMNINET)		+= omninet.o | obj-$(CONFIG_USB_SERIAL_OMNINET)		+= omninet.o | ||||||
| obj-$(CONFIG_USB_SERIAL_OPTION)			+= option.o | obj-$(CONFIG_USB_SERIAL_OPTION)			+= option.o | ||||||
|  |  | ||||||
							
								
								
									
										70
									
								
								drivers/usb/serial/moto_modem.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								drivers/usb/serial/moto_modem.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,70 @@ | ||||||
|  | /*
 | ||||||
|  |  * Motorola USB Phone driver | ||||||
|  |  * | ||||||
|  |  * Copyright (C) 2008 Greg Kroah-Hartman <greg@kroah.com> | ||||||
|  |  * | ||||||
|  |  *  This program is free software; you can redistribute it and/or modify | ||||||
|  |  *  it under the terms of the GNU General Public License version 2 as | ||||||
|  |  *  published by the Free Software Foundation. | ||||||
|  |  * | ||||||
|  |  * {sigh} | ||||||
|  |  * Mororola should be using the CDC ACM USB spec, but instead | ||||||
|  |  * they try to just "do their own thing"...  This driver should handle a | ||||||
|  |  * few phones in which a basic "dumb serial connection" is needed to be | ||||||
|  |  * able to get a connection through to them. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | #include <linux/kernel.h> | ||||||
|  | #include <linux/init.h> | ||||||
|  | #include <linux/tty.h> | ||||||
|  | #include <linux/module.h> | ||||||
|  | #include <linux/usb.h> | ||||||
|  | #include <linux/usb/serial.h> | ||||||
|  | 
 | ||||||
|  | static struct usb_device_id id_table [] = { | ||||||
|  | 	{ USB_DEVICE(0x05c6, 0x3197) },	/* unknown Motorola phone */ | ||||||
|  | 	{ USB_DEVICE(0x0c44, 0x0022) },	/* unknown Mororola phone */ | ||||||
|  | 	{ USB_DEVICE(0x22b8, 0x2a64) },	/* Motorola KRZR K1m */ | ||||||
|  | 	{ }, | ||||||
|  | }; | ||||||
|  | MODULE_DEVICE_TABLE(usb, id_table); | ||||||
|  | 
 | ||||||
|  | static struct usb_driver moto_driver = { | ||||||
|  | 	.name =		"moto-modem", | ||||||
|  | 	.probe =	usb_serial_probe, | ||||||
|  | 	.disconnect =	usb_serial_disconnect, | ||||||
|  | 	.id_table =	id_table, | ||||||
|  | 	.no_dynamic_id = 	1, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static struct usb_serial_driver moto_device = { | ||||||
|  | 	.driver = { | ||||||
|  | 		.owner =	THIS_MODULE, | ||||||
|  | 		.name =		"moto-modem", | ||||||
|  | 	}, | ||||||
|  | 	.id_table =		id_table, | ||||||
|  | 	.num_ports =		1, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static int __init moto_init(void) | ||||||
|  | { | ||||||
|  | 	int retval; | ||||||
|  | 
 | ||||||
|  | 	retval = usb_serial_register(&moto_device); | ||||||
|  | 	if (retval) | ||||||
|  | 		return retval; | ||||||
|  | 	retval = usb_register(&moto_driver); | ||||||
|  | 	if (retval) | ||||||
|  | 		usb_serial_deregister(&moto_device); | ||||||
|  | 	return retval; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void __exit moto_exit(void) | ||||||
|  | { | ||||||
|  | 	usb_deregister(&moto_driver); | ||||||
|  | 	usb_serial_deregister(&moto_device); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | module_init(moto_init); | ||||||
|  | module_exit(moto_exit); | ||||||
|  | MODULE_LICENSE("GPL"); | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Greg Kroah-Hartman
				Greg Kroah-Hartman