| From 589faf1fec5854554ecac3beb680b584e1868e8e Mon Sep 17 00:00:00 2001 |
| From: Maciej Szmigiero <mhej@o2.pl> |
| Date: Mon, 7 Feb 2011 12:42:36 +0100 |
| Subject: [PATCH] USB: Add Samsung SGH-I500/Android modem ID switch to visor |
| driver |
| |
| commit acb52cb1613e1d3c8a8c650717cc51965c60d7d4 upstream. |
| |
| [USB]Add Samsung SGH-I500/Android modem ID switch to visor driver |
| |
| Samsung decided to reuse USB ID of its old CDMA phone SGH-I500 for the |
| modem part of some of their Android phones. At least Galaxy Spica |
| is affected. |
| |
| This modem needs ACM driver and does not work with visor driver which |
| binds the conflicting ID for SGH-I500. |
| Because SGH-I500 is pretty an old hardware its best to add switch to |
| visor |
| driver in cause somebody still wants to use that phone with Linux. |
| |
| Note that this is needed only when using the Android phone as modem, |
| not in USB storage or ADB mode. |
| |
| Signed-off-by: Maciej Szmigiero <mhej@o2.pl> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/usb/serial/visor.c b/drivers/usb/serial/visor.c |
| index fb7fc40..81fa4f9 100644 |
| --- a/drivers/usb/serial/visor.c |
| +++ b/drivers/usb/serial/visor.c |
| @@ -27,6 +27,7 @@ |
| #include <linux/uaccess.h> |
| #include <linux/usb.h> |
| #include <linux/usb/serial.h> |
| +#include <linux/usb/cdc.h> |
| #include "visor.h" |
| |
| /* |
| @@ -754,6 +755,17 @@ static int visor_probe(struct usb_serial *serial, |
| |
| dbg("%s", __func__); |
| |
| + /* |
| + * some Samsung Android phones in modem mode have the same ID |
| + * as SPH-I500, but they are ACM devices, so dont bind to them |
| + */ |
| + if (id->idVendor == SAMSUNG_VENDOR_ID && |
| + id->idProduct == SAMSUNG_SPH_I500_ID && |
| + serial->dev->descriptor.bDeviceClass == USB_CLASS_COMM && |
| + serial->dev->descriptor.bDeviceSubClass == |
| + USB_CDC_SUBCLASS_ACM) |
| + return -ENODEV; |
| + |
| if (serial->dev->actconfig->desc.bConfigurationValue != 1) { |
| dev_err(&serial->dev->dev, "active config #%d != 1 ??\n", |
| serial->dev->actconfig->desc.bConfigurationValue); |
| -- |
| 1.7.4.4 |
| |