netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/1] NET: usb: cdc_mbim: add quirk for supporting Telit LE922A
@ 2016-12-07 13:07 Daniele Palmas
       [not found] ` <1481116068-32691-1-git-send-email-dnlplm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
  2016-12-08 18:02 ` [PATCH 0/1] " David Miller
  0 siblings, 2 replies; 4+ messages in thread
From: Daniele Palmas @ 2016-12-07 13:07 UTC (permalink / raw)
  To: Bjørn Mork, Oliver Neukum; +Cc: netdev, linux-usb, Daniele Palmas

Telit LE922A MBIM based composition does not work properly
with altsetting toggle done in cdc_ncm_bind_common.

This patch adds CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE quirk
to avoid this procedure that, instead, is mandatory for
other modems.

References:
https://www.spinics.net/lists/linux-usb/msg149249.html
https://www.spinics.net/lists/linux-usb/msg149819.html

Thanks to Bjørn for the productive discussion and feedback!

Daniele Palmas (1):
  NET: usb: cdc_mbim: add quirk for supporting Telit LE922A

 drivers/net/usb/cdc_mbim.c  | 21 +++++++++++++++++++++
 drivers/net/usb/cdc_ncm.c   | 14 +++++++++-----
 include/linux/usb/cdc_ncm.h |  3 ++-
 3 files changed, 32 insertions(+), 6 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/1] NET: usb: cdc_mbim: add quirk for supporting Telit LE922A
       [not found] ` <1481116068-32691-1-git-send-email-dnlplm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2016-12-07 13:07   ` Daniele Palmas
  2016-12-07 14:27     ` Bjørn Mork
  0 siblings, 1 reply; 4+ messages in thread
From: Daniele Palmas @ 2016-12-07 13:07 UTC (permalink / raw)
  To: Bjørn Mork, Oliver Neukum
  Cc: netdev-u79uwXL29TY76Z2rM5mHXA, linux-usb-u79uwXL29TY76Z2rM5mHXA,
	Daniele Palmas

Telit LE922A MBIM based composition does not work properly
with altsetting toggle done in cdc_ncm_bind_common.

This patch adds CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE quirk
to avoid this procedure that, instead, is mandatory for
other modems.

Signed-off-by: Daniele Palmas <dnlplm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
---
 drivers/net/usb/cdc_mbim.c  | 21 +++++++++++++++++++++
 drivers/net/usb/cdc_ncm.c   | 14 +++++++++-----
 include/linux/usb/cdc_ncm.h |  3 ++-
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/drivers/net/usb/cdc_mbim.c b/drivers/net/usb/cdc_mbim.c
index 96a5028..3a98f37 100644
--- a/drivers/net/usb/cdc_mbim.c
+++ b/drivers/net/usb/cdc_mbim.c
@@ -602,6 +602,21 @@ static const struct driver_info cdc_mbim_info_ndp_to_end = {
 	.data = CDC_NCM_FLAG_NDP_TO_END,
 };
 
+/* Some modems (e.g. Telit LE922A6) do not work properly with altsetting
+ * toggle done in cdc_ncm_bind_common. CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE
+ * flag is used to avoid this procedure.
+ */
+static const struct driver_info cdc_mbim_info_avoid_altsetting_toggle = {
+	.description = "CDC MBIM",
+	.flags = FLAG_NO_SETINT | FLAG_MULTI_PACKET | FLAG_WWAN,
+	.bind = cdc_mbim_bind,
+	.unbind = cdc_mbim_unbind,
+	.manage_power = cdc_mbim_manage_power,
+	.rx_fixup = cdc_mbim_rx_fixup,
+	.tx_fixup = cdc_mbim_tx_fixup,
+	.data = CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE,
+};
+
 static const struct usb_device_id mbim_devs[] = {
 	/* This duplicate NCM entry is intentional. MBIM devices can
 	 * be disguised as NCM by default, and this is necessary to
@@ -626,6 +641,12 @@ static const struct usb_device_id mbim_devs[] = {
 	{ USB_VENDOR_AND_INTERFACE_INFO(0x12d1, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
 	  .driver_info = (unsigned long)&cdc_mbim_info_ndp_to_end,
 	},
+
+	/* Telit LE922A6 in MBIM composition */
+	{ USB_DEVICE_AND_INTERFACE_INFO(0x1bc7, 0x1041, USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
+	  .driver_info = (unsigned long)&cdc_mbim_info_avoid_altsetting_toggle,
+	},
+
 	/* default entry */
 	{ USB_INTERFACE_INFO(USB_CLASS_COMM, USB_CDC_SUBCLASS_MBIM, USB_CDC_PROTO_NONE),
 	  .driver_info = (unsigned long)&cdc_mbim_info_zlp,
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c
index 877c951..afbfc0f 100644
--- a/drivers/net/usb/cdc_ncm.c
+++ b/drivers/net/usb/cdc_ncm.c
@@ -839,11 +839,18 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
 
 	iface_no = ctx->data->cur_altsetting->desc.bInterfaceNumber;
 
+	/* Device-specific flags */
+	ctx->drvflags = drvflags;
+
 	/* Reset data interface. Some devices will not reset properly
 	 * unless they are configured first.  Toggle the altsetting to
-	 * force a reset
+	 * force a reset.
+	 * Some other devices do not work properly with this procedure
+	 * that can be avoided using quirk CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE
 	 */
-	usb_set_interface(dev->udev, iface_no, data_altsetting);
+	if (!(ctx->drvflags & CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE))
+		usb_set_interface(dev->udev, iface_no, data_altsetting);
+
 	temp = usb_set_interface(dev->udev, iface_no, 0);
 	if (temp) {
 		dev_dbg(&intf->dev, "set interface failed\n");
@@ -890,9 +897,6 @@ int cdc_ncm_bind_common(struct usbnet *dev, struct usb_interface *intf, u8 data_
 	/* finish setting up the device specific data */
 	cdc_ncm_setup(dev);
 
-	/* Device-specific flags */
-	ctx->drvflags = drvflags;

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/1] NET: usb: cdc_mbim: add quirk for supporting Telit LE922A
  2016-12-07 13:07   ` [PATCH 1/1] " Daniele Palmas
@ 2016-12-07 14:27     ` Bjørn Mork
  0 siblings, 0 replies; 4+ messages in thread
From: Bjørn Mork @ 2016-12-07 14:27 UTC (permalink / raw)
  To: Daniele Palmas; +Cc: Oliver Neukum, netdev, linux-usb

Daniele Palmas <dnlplm@gmail.com> writes:

> Telit LE922A MBIM based composition does not work properly
> with altsetting toggle done in cdc_ncm_bind_common.
>
> This patch adds CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE quirk
> to avoid this procedure that, instead, is mandatory for
> other modems.
>
> Signed-off-by: Daniele Palmas <dnlplm@gmail.com>

Thanks.  This looks as nice as we can possibly do for now.  I am happy
to add

Reviewed-by: Bjørn Mork <bjorn@mork.no>


This patch also helped me understanding the problem you face even
better: It's not the "set_altsetting 0" that's causing problems, but the
"set_altsetting X" prior to that.  And that is certainly not something
that a firmware should expect. I will look at the Huawei modem again
when I get some time and see if there is any way we can possibly avoid
it.




Bjørn

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/1] NET: usb: cdc_mbim: add quirk for supporting Telit LE922A
  2016-12-07 13:07 [PATCH 0/1] NET: usb: cdc_mbim: add quirk for supporting Telit LE922A Daniele Palmas
       [not found] ` <1481116068-32691-1-git-send-email-dnlplm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
@ 2016-12-08 18:02 ` David Miller
  1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2016-12-08 18:02 UTC (permalink / raw)
  To: dnlplm; +Cc: bjorn, oliver, netdev, linux-usb

From: Daniele Palmas <dnlplm@gmail.com>
Date: Wed,  7 Dec 2016 14:07:47 +0100

> Telit LE922A MBIM based composition does not work properly
> with altsetting toggle done in cdc_ncm_bind_common.
> 
> This patch adds CDC_MBIM_FLAG_AVOID_ALTSETTING_TOGGLE quirk
> to avoid this procedure that, instead, is mandatory for
> other modems.
> 
> References:
> https://www.spinics.net/lists/linux-usb/msg149249.html
> https://www.spinics.net/lists/linux-usb/msg149819.html
> 
> Thanks to Bjørn for the productive discussion and feedback!

Patch applied, thanks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2016-12-08 18:02 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-12-07 13:07 [PATCH 0/1] NET: usb: cdc_mbim: add quirk for supporting Telit LE922A Daniele Palmas
     [not found] ` <1481116068-32691-1-git-send-email-dnlplm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2016-12-07 13:07   ` [PATCH 1/1] " Daniele Palmas
2016-12-07 14:27     ` Bjørn Mork
2016-12-08 18:02 ` [PATCH 0/1] " David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).