Re: [PATCH v3 4/5] usb: qcserial: define and use Sierra Wireless layout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Apr 27, 2014 at 4:47 PM, Bjørn Mork <bmork@xxxxxxxxxxx> wrote:
> From: Bjørn Mork <bjorn@xxxxxxx>
>
> All the "non Gobi" Qualcomm based devices handled by this
> driver share a common standard Sierra Wireless specific
> layout. Adding code specifically for this layout allow
> us to reduce the number of match entries per device from
> three to one.
>
> This change will result in a penalty wrt stable backports,
> but simplifies new Sierra device addtitions in the long
> term.
>
> Signed-off-by: Bjørn Mork <bjorn@xxxxxxx>
> ---

Is this patch applied somewhere? I have some new VID/PID to add, so
should I base my patch on top of this one?


>  drivers/usb/serial/qcserial.c | 98 +++++++++++++++++++++++--------------------
>  1 file changed, 53 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c
> index 217e29ccde52..91e7bb515398 100644
> --- a/drivers/usb/serial/qcserial.c
> +++ b/drivers/usb/serial/qcserial.c
> @@ -26,10 +26,13 @@
>  enum qcserial_layouts {
>         QCSERIAL_G2K = 0,       /* Gobi 2000 */
>         QCSERIAL_G1K = 1,       /* Gobi 1000 */
> +       QCSERIAL_SWI = 2,       /* Sierra Wireless */
>  };
>
>  #define DEVICE_G1K(v, p) \
>         USB_DEVICE(v, p), .driver_info = QCSERIAL_G1K
> +#define DEVICE_SWI(v, p) \
> +       USB_DEVICE(v, p), .driver_info = QCSERIAL_SWI
>
>  static const struct usb_device_id id_table[] = {
>         /* Gobi 1000 devices */
> @@ -132,46 +135,20 @@ static const struct usb_device_id id_table[] = {
>         {USB_DEVICE(0x12D1, 0x14F1)},   /* Sony Gobi 3000 Composite */
>         {USB_DEVICE(0x0AF0, 0x8120)},   /* Option GTM681W */
>
> -       /* non Gobi Qualcomm serial devices */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x0f3d, 0x68a2, 0)},       /* Sierra Wireless MC7700 Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x0f3d, 0x68a2, 2)},       /* Sierra Wireless MC7700 NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x0f3d, 0x68a2, 3)},       /* Sierra Wireless MC7700 Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x114f, 0x68a2, 0)},       /* Sierra Wireless MC7750 Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x114f, 0x68a2, 2)},       /* Sierra Wireless MC7750 NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x114f, 0x68a2, 3)},       /* Sierra Wireless MC7750 Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 0)},       /* Sierra Wireless MC7710 Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 2)},       /* Sierra Wireless MC7710 NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68a2, 3)},       /* Sierra Wireless MC7710 Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 0)},       /* Sierra Wireless MC73xx Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 2)},       /* Sierra Wireless MC73xx NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x68c0, 3)},       /* Sierra Wireless MC73xx Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 0)},       /* Sierra Wireless EM7700 Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 2)},       /* Sierra Wireless EM7700 NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901c, 3)},       /* Sierra Wireless EM7700 Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 0)},       /* Sierra Wireless EM7355 Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 2)},       /* Sierra Wireless EM7355 NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x901f, 3)},       /* Sierra Wireless EM7355 Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 0)},       /* Sierra Wireless MC7305/MC7355 Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 2)},       /* Sierra Wireless MC7305/MC7355 NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9041, 3)},       /* Sierra Wireless MC7305/MC7355 Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 0)},       /* Netgear AirCard 340U Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 2)},       /* Netgear AirCard 340U NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x1199, 0x9051, 3)},       /* Netgear AirCard 340U Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a2, 0)},       /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a2, 2)},       /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a2, 3)},       /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a3, 0)},       /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a3, 2)},       /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a3, 3)},       /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a4, 0)},       /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a4, 2)},       /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a4, 3)},       /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a8, 0)},       /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a8, 2)},       /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a8, 3)},       /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card Modem */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a9, 0)},       /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card Device Management */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a9, 2)},       /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card NMEA */
> -       {USB_DEVICE_INTERFACE_NUMBER(0x413c, 0x81a9, 3)},       /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card Modem */
> +       /* non-Gobi Sierra Wireless devices */
> +       {DEVICE_SWI(0x0f3d, 0x68a2)},   /* Sierra Wireless MC7700 */
> +       {DEVICE_SWI(0x114f, 0x68a2)},   /* Sierra Wireless MC7750 */
> +       {DEVICE_SWI(0x1199, 0x68a2)},   /* Sierra Wireless MC7710 */
> +       {DEVICE_SWI(0x1199, 0x68c0)},   /* Sierra Wireless MC73xx */
> +       {DEVICE_SWI(0x1199, 0x901c)},   /* Sierra Wireless EM7700 */
> +       {DEVICE_SWI(0x1199, 0x901f)},   /* Sierra Wireless EM7355 */
> +       {DEVICE_SWI(0x1199, 0x9041)},   /* Sierra Wireless MC7305/MC7355 */
> +       {DEVICE_SWI(0x1199, 0x9051)},   /* Netgear AirCard 340U */
> +       {DEVICE_SWI(0x413c, 0x81a2)},   /* Dell Wireless 5806 Gobi(TM) 4G LTE Mobile Broadband Card */
> +       {DEVICE_SWI(0x413c, 0x81a3)},   /* Dell Wireless 5570 HSPA+ (42Mbps) Mobile Broadband Card */
> +       {DEVICE_SWI(0x413c, 0x81a4)},   /* Dell Wireless 5570e HSPA+ (42Mbps) Mobile Broadband Card */
> +       {DEVICE_SWI(0x413c, 0x81a8)},   /* Dell Wireless 5808 Gobi(TM) 4G LTE Mobile Broadband Card */
> +       {DEVICE_SWI(0x413c, 0x81a9)},   /* Dell Wireless 5808e Gobi(TM) 4G LTE Mobile Broadband Card */
>
>         { }                             /* Terminating entry */
>  };
> @@ -220,11 +197,6 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
>                 goto done;
>         }
>
> -       if (nintf < 3 || nintf > 4) {
> -               dev_err(dev, "unknown number of interfaces: %d\n", nintf);
> -               goto done;
> -       }
> -
>         /* default to enabling interface */
>         altsetting = 0;
>
> @@ -242,6 +214,12 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
>                  * 2: AT-capable modem port
>                  * 3: QMI/net
>                  */
> +               if (nintf < 3 || nintf > 4) {
> +                       dev_err(dev, "unknown number of interfaces: %d\n", nintf);
> +                       altsetting = -1;
> +                       goto done;
> +               }
> +
>                 if (ifnum == 0) {
>                         dev_dbg(dev, "Gobi 1K DM/DIAG interface found\n");
>                         altsetting = 1;
> @@ -258,6 +236,12 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
>                  * 2: AT-capable modem port
>                  * 3: NMEA
>                  */
> +               if (nintf < 3 || nintf > 4) {
> +                       dev_err(dev, "unknown number of interfaces: %d\n", nintf);
> +                       altsetting = -1;
> +                       goto done;
> +               }
> +
>                 switch (ifnum) {
>                 case 0:
>                         /* Don't claim the QMI/net interface */
> @@ -279,6 +263,30 @@ static int qcprobe(struct usb_serial *serial, const struct usb_device_id *id)
>                         break;
>                 }
>                 break;
> +       case QCSERIAL_SWI:
> +               /*
> +                * Sierra Wireless layout:
> +                * 0: DM/DIAG (use libqcdm from ModemManager for communication)
> +                * 2: NMEA
> +                * 3: AT-capable modem port
> +                * 8: QMI/net
> +                */
> +               switch (ifnum) {
> +               case 0:
> +                       dev_dbg(dev, "DM/DIAG interface found\n");
> +                       break;
> +               case 2:
> +                       dev_dbg(dev, "NMEA GPS interface found\n");
> +                       break;
> +               case 3:
> +                       dev_dbg(dev, "Modem port found\n");
> +                       break;
> +               default:
> +                       /* don't claim any unsupported interface */
> +                       altsetting = -1;
> +                       break;
> +               }
> +               break;
>         default:
>                 dev_err(dev, "unsupported device layout type: %lu\n",
>                         id->driver_info);
> --
> 2.0.0.rc0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Aleksander
https://aleksander.es
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux