Discussion:
[PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry
Meng Zhang
2012-02-28 09:08:29 UTC
Permalink
from: Meng Zhang <***@mediatek.com>

1. Add entrys for mediatek MT6276M in unusual_devs.h

2. Add init function for mediatek MT6276M to switch to COM port mode

3. usb-devices outputs after running with this patch:
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option

4. patch based on branch:
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


Signed-off-by: Meng Zhang <***@mediatek.com>
---

drivers/usb/storage/initializers.c | 27 +++++++++++++++++++++++++++
drivers/usb/storage/initializers.h | 3 +++
drivers/usb/storage/unusual_devs.h | 9 +++++++++
3 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/storage/initializers.c
b/drivers/usb/storage/initializers.c
index 105d900..44985a1 100644
--- a/drivers/usb/storage/initializers.c
+++ b/drivers/usb/storage/initializers.c
@@ -104,3 +104,30 @@ int usb_stor_huawei_e220_init(struct us_data *us)
US_DEBUGP("Huawei mode set result is %d\n", result);
return 0;
}
+
+/* switch MediaTek MT6276M to COM port mode */
+int usb_stor_mediatek_mt6276m_init(struct us_data *us)
+{
+ const unsigned char rezero_msg[] = {
+ 0x55, 0x53, 0x42, 0x43, 0x78, 0x56, 0x34, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf0,
+ 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ char *buffer;
+ int result;
+
+ US_DEBUGP("Initializing mediatek USB device...\n");
+
+ buffer = kzalloc(32, GFP_KERNEL);
+ if (buffer == NULL)
+ return USB_STOR_TRANSPORT_ERROR;
+
+ memcpy(buffer, rezero_msg, sizeof(rezero_msg));
+ result = usb_stor_bulk_transfer_buf(us,
+ us->send_bulk_pipe,
+ buffer, sizeof(rezero_msg), NULL);
+
+ kfree(buffer);
+ return result;
+}
diff --git a/drivers/usb/storage/initializers.h
b/drivers/usb/storage/initializers.h
index 529327f..6c9337f 100644
--- a/drivers/usb/storage/initializers.h
+++ b/drivers/usb/storage/initializers.h
@@ -48,3 +48,6 @@ int usb_stor_ucr61s2b_init(struct us_data *us);

/* This places the HUAWEI E220 devices in multi-port mode */
int usb_stor_huawei_e220_init(struct us_data *us);
+
+/* switch MediaTek MT6276M to COM port mode */
+int usb_stor_mediatek_mt6276m_init(struct us_data *us);
diff --git a/drivers/usb/storage/unusual_devs.h
b/drivers/usb/storage/unusual_devs.h
index 856ad92..574c291 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -1356,6 +1356,15 @@ UNUSUAL_DEV( 0x0e21, 0x0520, 0x0100, 0x0100,
USB_SC_DEVICE, USB_PR_BULK, NULL,
US_FL_NEED_OVERRIDE ),

+/* Reported by Meng Zhang <***@mediatek.com>
+ * switch mediatek USB devices into COM port mode
+ */
+UNUSUAL_DEV(0x0e8d, 0x0002, 0x0000, 0x0300,
+ "MediaTek Inc.",
+ "MT6276M",
+ USB_SC_DEVICE, USB_PR_DEVICE,
+ usb_stor_mediatek_mt6276m_init, 0),
+
/* Submitted by Antoine Mairesse <***@free.fr> */
UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300,
"USB",
Sergei Shtylyov
2012-02-28 11:38:30 UTC
Permalink
Hello.
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
This information (4) should be under the --- tear line.
[...]
Post by Meng Zhang
diff --git a/drivers/usb/storage/initializers.c
b/drivers/usb/storage/initializers.c
index 105d900..44985a1 100644
--- a/drivers/usb/storage/initializers.c
+++ b/drivers/usb/storage/initializers.c
@@ -104,3 +104,30 @@ int usb_stor_huawei_e220_init(struct us_data *us)
US_DEBUGP("Huawei mode set result is %d\n", result);
return 0;
}
+
+/* switch MediaTek MT6276M to COM port mode */
+int usb_stor_mediatek_mt6276m_init(struct us_data *us)
+{
+ const unsigned char rezero_msg[] = {
Unfortunately, when I reply to messages with "format=flowed", source
formatting is spoiled. :-(
Post by Meng Zhang
+ 0x55, 0x53, 0x42, 0x43, 0x78, 0x56, 0x34, 0x12,
All indentation here should be done with tabs, not tab and two spaces.
Post by Meng Zhang
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf0,
+ 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Meng Zhang (张萌)
2012-02-28 11:59:54 UTC
Permalink
Hi, about the indentation I saw in initializers.c is also tab with 2 spaces.. should I change this to 2 tabs manually?

Thanks!

BR.
Meng Zhang

-----Original Message-----
From: linux-usb-***@vger.kernel.org [mailto:linux-usb-***@vger.kernel.org] On Behalf Of Sergei Shtylyov
Sent: Tuesday, February 28, 2012 7:39 PM
To: Meng Zhang (张萌)
Cc: mdharm-***@one-eyed-alien.net; ***@ipom.com; ***@rowland.harvard.edu; linux-***@vger.kernel.org; usb-***@lists.one-eyed-alien.net; linux-***@vger.kernel.org
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry

Hello.
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
This information (4) should be under the --- tear line.
[...]
Post by Meng Zhang
diff --git a/drivers/usb/storage/initializers.c
b/drivers/usb/storage/initializers.c
index 105d900..44985a1 100644
--- a/drivers/usb/storage/initializers.c
+++ b/drivers/usb/storage/initializers.c
@@ -104,3 +104,30 @@ int usb_stor_huawei_e220_init(struct us_data *us)
US_DEBUGP("Huawei mode set result is %d\n", result); return 0; }
+
+/* switch MediaTek MT6276M to COM port mode */ int
+usb_stor_mediatek_mt6276m_init(struct us_data *us) { const unsigned
+char rezero_msg[] = {
Unfortunately, when I reply to messages with "format=flowed", source formatting is spoiled. :-(
Post by Meng Zhang
+ 0x55, 0x53, 0x42, 0x43, 0x78, 0x56, 0x34, 0x12,
All indentation here should be done with tabs, not tab and two spaces.
Post by Meng Zhang
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x01, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00 };
WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to ***@vger.kernel.org More majordomo info at http
Meng Zhang (张萌)
2012-02-29 00:45:11 UTC
Permalink
Dear Sergei,

Sorry I misunderstand it. I'll correct the format and re-submit soon.

Thanks.

BR.
Meng Zhang

-----Original Message-----
From: linux-usb-***@vger.kernel.org [mailto:linux-usb-***@vger.kernel.org] On Behalf Of Meng Zhang (张萌)
Sent: Tuesday, February 28, 2012 8:00 PM
To: Sergei Shtylyov
Cc: mdharm-***@one-eyed-alien.net; ***@ipom.com; ***@rowland.harvard.edu; linux-***@vger.kernel.org; usb-***@lists.one-eyed-alien.net; linux-***@vger.kernel.org
Subject: RE: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry

Hi, about the indentation I saw in initializers.c is also tab with 2 spaces.. should I change this to 2 tabs manually?

Thanks!

BR.
Meng Zhang

-----Original Message-----
From: linux-usb-***@vger.kernel.org [mailto:linux-usb-***@vger.kernel.org] On Behalf Of Sergei Shtylyov
Sent: Tuesday, February 28, 2012 7:39 PM
To: Meng Zhang (张萌)
Cc: mdharm-***@one-eyed-alien.net; ***@ipom.com; ***@rowland.harvard.edu; linux-***@vger.kernel.org; usb-***@lists.one-eyed-alien.net; linux-***@vger.kernel.org
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry

Hello.
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
This information (4) should be under the --- tear line.
[...]
Post by Meng Zhang
diff --git a/drivers/usb/storage/initializers.c
b/drivers/usb/storage/initializers.c
index 105d900..44985a1 100644
--- a/drivers/usb/storage/initializers.c
+++ b/drivers/usb/storage/initializers.c
@@ -104,3 +104,30 @@ int usb_stor_huawei_e220_init(struct us_data *us)
US_DEBUGP("Huawei mode set result is %d\n", result); return 0; }
+
+/* switch MediaTek MT6276M to COM port mode */ int
+usb_stor_mediatek_mt6276m_init(struct us_data *us) { const unsigned
+char rezero_msg[] = {
Unfortunately, when I reply to messages with "format=flowed", source formatting is spoiled. :-(
Post by Meng Zhang
+ 0x55, 0x53, 0x42, 0x43, 0x78, 0x56, 0x34, 0x12,
All indentation here should be done with tabs, not tab and two spaces.
Post by Meng Zhang
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf0, 0x01, 0x03, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00 };
WBR, Sergei
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to ***@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
韬{.n?壏煯壄?%娝lzwm呴b濍Р骒r笡zXЩ琻)韰骅w*jg?秹殠娸/侁鋤罐枈?娹櫒璀??摺玜囤瓽珴閔?�
Alan Stern
2012-02-28 15:30:33 UTC
Permalink
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Nowadays, aren't such things handled in userspace by the usb_modeswitch
program rather than in the kernel driver?

Alan Stern
Meng Zhang (张萌)
2012-02-29 00:25:43 UTC
Permalink
Hi Alan,

As far as I know, many other devices used this init function in unusual_devs.h for their "ZeroCD" feature, and I think this is more convenient than let device user install utilities like usb_modeswitch and input command manually.

Thanks.

BR.
Meng Zhang

-----Original Message-----
From: linux-usb-***@vger.kernel.org [mailto:linux-usb-***@vger.kernel.org] On Behalf Of Alan Stern
Sent: Tuesday, February 28, 2012 11:31 PM
To: Meng Zhang (张萌)
Cc: Josua Dietze; Matthew Dharm; Phil Dibowitz; USB list; USB Storage list; Kernel development list
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Nowadays, aren't such things handled in userspace by the usb_modeswitch program rather than in the kernel driver?

Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to ***@vger.kernel.org More majordomo info at http://
Matthew Dharm
2012-02-29 04:07:32 UTC
Permalink
Devices should not be added to unusual_devs.h unless the device CANNOT
use the usb_modeswitch method. This most commonly applies when the
device's usb-storage emulation is poor, and the probing commands sent
by usb-storage cause the device to crash.

It is much more convenient for users to just upgrade their
usb_modeswitch utility than it is for them to upgrade a kernel, which
is much more difficult and much more rare. As for 'input command
manually', that is what udev scripts are for.

If this can be handled from userspace by usb_modeswitch, then that is
where it should be done.

Matt
Post by Meng Zhang (张萌)
Hi Alan,
As far as I know, many other devices used this init function in unusu=
al_devs.h for their "ZeroCD" feature, and I think this is more convenie=
nt than let device user install utilities like usb_modeswitch and input=
command manually.
Post by Meng Zhang (张萌)
Thanks.
BR.
Meng Zhang
-----Original Message-----
rnel.org] On Behalf Of Alan Stern
Post by Meng Zhang (张萌)
Sent: Tuesday, February 28, 2012 11:31 PM
To: Meng Zhang (=D5=C5=C3=C8)
Cc: Josua Dietze; Matthew Dharm; Phil Dibowitz; USB list; USB Storage=
list; Kernel development list
Post by Meng Zhang (张萌)
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device e=
ntry
Post by Meng Zhang (张萌)
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=3D02 Lev=3D01 Prnt=3D01 Port=3D05 Cnt=3D01 Dev#=3D 48 Spd=3D=
480 MxCh=3D 0
Post by Meng Zhang (张萌)
Post by Meng Zhang
D: Ver=3D 2.00 Cls=3D00(>ifc ) Sub=3D00 Prot=3D00 MxPS=3D64 #Cfgs=3D=
1
Post by Meng Zhang (张萌)
Post by Meng Zhang
P: Vendor=3D0e8d ProdID=3D00a1 Rev=3D02.00
S: Manufacturer=3DMediaTek Inc
S: Product=3DProduct
C: #Ifs=3D 3 Cfg#=3D 1 Atr=3D80 MxPwr=3D500mA
I: If#=3D 0 Alt=3D 0 #EPs=3D 3 Cls=3Dff(vend.) Sub=3D02 Prot=3D01 D=
river=3Doption
Post by Meng Zhang (张萌)
Post by Meng Zhang
I: If#=3D 1 Alt=3D 0 #EPs=3D 2 Cls=3Dff(vend.) Sub=3D00 Prot=3D00 D=
river=3Doption
Post by Meng Zhang (张萌)
Post by Meng Zhang
I: If#=3D 2 Alt=3D 0 #EPs=3D 2 Cls=3Dff(vend.) Sub=3D00 Prot=3D00 D=
river=3Doption
Post by Meng Zhang (张萌)
Post by Meng Zhang
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.g=
it
Post by Meng Zhang (张萌)
Nowadays, aren't such things handled in userspace by the usb_modeswit=
ch program rather than in the kernel driver?
Post by Meng Zhang (张萌)
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" =
in the body of a message to majordomo-***@public.gmane.org More majordomo in=
fo at http://vger.kernel.org/majordomo-info.html



--=20
Matthew Dharm
Maintainer, USB Mass Storage driver for Linux
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Meng Zhang (张萌)
2012-02-29 06:03:59 UTC
Permalink
Hi Matthew,

Thanks for your comment, I've tested some other products and found their entries in /lib/udev/rules.d/40-usb_modeswitch.rules.
So, does usb_modeswitch comes with latest distributions by default?

Thanks!

BR.
Meng Zhang


-----Original Message-----
From: Matthew Dharm [mailto:mdharm-***@one-eyed-alien.net]
Sent: Wednesday, February 29, 2012 12:08 PM
To: Meng Zhang (����)
Cc: Alan Stern; Josua Dietze; Phil Dibowitz; USB list; USB Storage list; Kernel development list
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry

Devices should not be added to unusual_devs.h unless the device CANNOT use the usb_modeswitch method. This most commonly applies when the device's usb-storage emulation is poor, and the probing commands sent by usb-storage cause the device to crash.

It is much more convenient for users to just upgrade their usb_modeswitch utility than it is for them to upgrade a kernel, which is much more difficult and much more rare. As for 'input command manually', that is what udev scripts are for.

If this can be handled from userspace by usb_modeswitch, then that is where it should be done.

Matt
Post by Meng Zhang (张萌)
Hi Alan,
As far as I know, many other devices used this init function in unusual_devs.h for their "ZeroCD" feature, and I think this is more convenient than let device user install utilities like usb_modeswitch and input command manually.
Thanks.
BR.
Meng Zhang
-----Original Message-----
Sent: Tuesday, February 28, 2012 11:31 PM
To: Meng Zhang (����)
Cc: Josua Dietze; Matthew Dharm; Phil Dibowitz; USB list; USB Storage
list; Kernel development list
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mode
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Nowadays, aren't such things handled in userspace by the usb_modeswitch program rather than in the kernel driver?
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb"
info at http://vger.kernel.org/majordomo-info.html
--
Matthew Dharm
Maintainer, USB Mass Storage driver for Linux
N�����r��y����b�X��ǧv�^�)޺{.n�+����{������^n�r���z���h�����&����������v��fp)��br ���+
Matthew Dharm
2012-02-29 06:46:41 UTC
Permalink
My understanding is that usb_modeswitch is part of most distributions,
but that is really a question for the distro guys...

Matt
Post by Meng Zhang (张萌)
Hi Matthew,
Thanks for your comment, I've tested some other products and found th=
eir entries in /lib/udev/rules.d/40-usb_modeswitch.rules.
Post by Meng Zhang (张萌)
So, does usb_modeswitch comes with latest distributions by default?
Thanks!
BR.
Meng Zhang
-----Original Message-----
Sent: Wednesday, February 29, 2012 12:08 PM
To: Meng Zhang (=D5=C5=C3=C8)
Cc: Alan Stern; Josua Dietze; Phil Dibowitz; USB list; USB Storage li=
st; Kernel development list
Post by Meng Zhang (张萌)
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device e=
ntry
Post by Meng Zhang (张萌)
Devices should not be added to unusual_devs.h unless the device CANNO=
T use the usb_modeswitch method. This most commonly applies when the d=
evice's usb-storage emulation is poor, and the probing commands sent by=
usb-storage cause the device to crash.
Post by Meng Zhang (张萌)
It is much more convenient for users to just upgrade their usb_modesw=
itch utility than it is for them to upgrade a kernel, which is much mor=
e difficult and much more rare. As for 'input command manually', that =
is what udev scripts are for.
Post by Meng Zhang (张萌)
If this can be handled from userspace by usb_modeswitch, then that is=
where it should be done.
Post by Meng Zhang (张萌)
Matt
Post by Meng Zhang (张萌)
Hi Alan,
As far as I know, many other devices used this init function in unus=
ual_devs.h for their "ZeroCD" feature, and I think this is more conveni=
ent than let device user install utilities like usb_modeswitch and inpu=
t command manually.
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Thanks.
BR.
Meng Zhang
-----Original Message-----
Sent: Tuesday, February 28, 2012 11:31 PM
To: Meng Zhang (=D5=C5=C3=C8)
Cc: Josua Dietze; Matthew Dharm; Phil Dibowitz; USB list; USB Storag=
e
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
list; Kernel development list
Subject: Re: [PATCH] USB: Mass Storage: Add MediaTek MT6276M device entry
Post by Meng Zhang
1. Add entrys for mediatek MT6276M in unusual_devs.h
2. Add init function for mediatek MT6276M to switch to COM port mod=
e
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Post by Meng Zhang
T: Bus=3D02 Lev=3D01 Prnt=3D01 Port=3D05 Cnt=3D01 Dev#=3D 48 Spd=3D=
480 MxCh=3D 0
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Post by Meng Zhang
D: Ver=3D 2.00 Cls=3D00(>ifc ) Sub=3D00 Prot=3D00 MxPS=3D64 #Cfgs=3D=
1
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Post by Meng Zhang
P: Vendor=3D0e8d ProdID=3D00a1 Rev=3D02.00
S: Manufacturer=3DMediaTek Inc
S: Product=3DProduct
C: #Ifs=3D 3 Cfg#=3D 1 Atr=3D80 MxPwr=3D500mA
I: If#=3D 0 Alt=3D 0 #EPs=3D 3 Cls=3Dff(vend.) Sub=3D02 Prot=3D01 =
Driver=3Doption
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Post by Meng Zhang
I: If#=3D 1 Alt=3D 0 #EPs=3D 2 Cls=3Dff(vend.) Sub=3D00 Prot=3D00 =
Driver=3Doption
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Post by Meng Zhang
I: If#=3D 2 Alt=3D 0 #EPs=3D 2 Cls=3Dff(vend.) Sub=3D00 Prot=3D00 =
Driver=3Doption
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Post by Meng Zhang
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Nowadays, aren't such things handled in userspace by the usb_modeswi=
tch program rather than in the kernel driver?
Post by Meng Zhang (张萌)
Post by Meng Zhang (张萌)
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb"
info at http://vger.kernel.org/majordomo-info.html
--
Matthew Dharm
Maintainer, USB Mass Storage driver for Linux
--=20
Matthew Dharm
Maintainer, USB Mass Storage driver for Linux
Josua Dietze
2012-02-29 07:28:24 UTC
Permalink
Post by Meng Zhang (张萌)
Thanks for your comment, I've tested some other products and found
their entries in /lib/udev/rules.d/40-usb_modeswitch.rules. So, does
usb_modeswitch comes with latest distributions by default?
Yes, it does. In most cases it is a prerequisite of Network Manager AFAIK.

The most-used mode switch entry in unusual_devs.h is there for
historical reasons, from a time when usb_modeswitch was not included
with distributions yet. I'm talking about "usb_stor_huawei_e220_init".

If people want to access the installer drive for some reason, it's not
possible if the kernel does the mode switch without giving a choice.
With usb_modeswitch, it's a matter of a small configuration edit.

Josua Dietze
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-***@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Meng Zhang
2012-02-29 02:37:10 UTC
Permalink
from: Meng Zhang <***@mediatek.com>

1. Add entrys for mediatek MT6276M in unusual_devs.h

2. Add init function for mediatek MT6276M to switch to COM port mode

3. usb-devices outputs after running with this patch:
T: Bus=02 Lev=01 Prnt=01 Port=05 Cnt=01 Dev#= 48 Spd=480 MxCh= 0
D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1
P: Vendor=0e8d ProdID=00a1 Rev=02.00
S: Manufacturer=MediaTek Inc
S: Product=Product
C: #Ifs= 3 Cfg#= 1 Atr=80 MxPwr=500mA
I: If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=02 Prot=01 Driver=option
I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option
I: If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=option

Signed-off-by: Meng Zhang <***@mediatek.com>
---

this patch is based on branch:
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git


drivers/usb/storage/initializers.c | 27 +++++++++++++++++++++++++++
drivers/usb/storage/initializers.h | 3 +++
drivers/usb/storage/unusual_devs.h | 9 +++++++++
3 files changed, 39 insertions(+), 0 deletions(-)

diff --git a/drivers/usb/storage/initializers.c
b/drivers/usb/storage/initializers.c
index 105d900..3ea233e 100644
--- a/drivers/usb/storage/initializers.c
+++ b/drivers/usb/storage/initializers.c
@@ -104,3 +104,30 @@ int usb_stor_huawei_e220_init(struct us_data *us)
US_DEBUGP("Huawei mode set result is %d\n", result);
return 0;
}
+
+/* switch MediaTek MT6276M to COM port mode */
+int usb_stor_mediatek_mt6276m_init(struct us_data *us)
+{
+ const unsigned char rezero_msg[] = {
+ 0x55, 0x53, 0x42, 0x43, 0x78, 0x56, 0x34, 0x12,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xf0,
+ 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+ };
+ char *buffer;
+ int result;
+
+ US_DEBUGP("Initializing mediatek USB device...\n");
+
+ buffer = kzalloc(32, GFP_KERNEL);
+ if (buffer == NULL)
+ return USB_STOR_TRANSPORT_ERROR;
+
+ memcpy(buffer, rezero_msg, sizeof(rezero_msg));
+ result = usb_stor_bulk_transfer_buf(us,
+ us->send_bulk_pipe,
+ buffer, sizeof(rezero_msg), NULL);
+
+ kfree(buffer);
+ return result;
+}
diff --git a/drivers/usb/storage/initializers.h
b/drivers/usb/storage/initializers.h
index 529327f..6c9337f 100644
--- a/drivers/usb/storage/initializers.h
+++ b/drivers/usb/storage/initializers.h
@@ -48,3 +48,6 @@ int usb_stor_ucr61s2b_init(struct us_data *us);

/* This places the HUAWEI E220 devices in multi-port mode */
int usb_stor_huawei_e220_init(struct us_data *us);
+
+/* switch MediaTek MT6276M to COM port mode */
+int usb_stor_mediatek_mt6276m_init(struct us_data *us);
diff --git a/drivers/usb/storage/unusual_devs.h
b/drivers/usb/storage/unusual_devs.h
index 856ad92..574c291 100644
--- a/drivers/usb/storage/unusual_devs.h
+++ b/drivers/usb/storage/unusual_devs.h
@@ -1356,6 +1356,15 @@ UNUSUAL_DEV( 0x0e21, 0x0520, 0x0100, 0x0100,
USB_SC_DEVICE, USB_PR_BULK, NULL,
US_FL_NEED_OVERRIDE ),

+/* Reported by Meng Zhang <***@mediatek.com>
+ * switch mediatek USB devices into COM port mode
+ */
+UNUSUAL_DEV(0x0e8d, 0x0002, 0x0000, 0x0300,
+ "MediaTek Inc.",
+ "MT6276M",
+ USB_SC_DEVICE, USB_PR_DEVICE,
+ usb_stor_mediatek_mt6276m_init, 0),
+
/* Submitted by Antoine Mairesse <***@free.fr> */
UNUSUAL_DEV( 0x0ed1, 0x6660, 0x0100, 0x0300,
"USB",
Loading...