Question about gregkh's qcserial rewrite

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

 



As I understand it, gregkh rewrote Qualcomm's GPLed QCSerial2k driver to produce
qcserial.c. Since Qualcomm just released Gobi 3000 drivers under the GPL, I've
been working on hacking qcserial.c to support Gobi 3000 as well as 2000.
However, I don't understand the reasoning for one of the changes in the
rewrite.

In QCProbe, the QCSerial2k driver has:
   if (nNumInterfaces == 1)
   {
      // QDL mode?
      if (nInterfaceNum == 1)
      {
         DBG( "QDL port found\n" );
         nRetval = usb_set_interface( pSerial->dev,
                                      nInterfaceNum,
                                      0 );
         if (nRetval < 0)
         {
            DBG( "Could not set interface, error %d\n", nRetval );
         }
      }
      else
      {
         DBG( "Incorrect QDL interface number\n" );
      }
   }

The rewrite has:
        case 1:
                /* QDL mode */
                /* Gobi 2000 has a single altsetting, older ones have two */
                if (serial->interface->num_altsetting == 2)
                        intf = &serial->interface->altsetting[1];
                else if (serial->interface->num_altsetting > 2)
                        break;

                if (intf->desc.bNumEndpoints == 2 &&
                    usb_endpoint_is_bulk_in(&intf->endpoint[0].desc) &&
                    usb_endpoint_is_bulk_out(&intf->endpoint[1].desc)) {
                        dbg("QDL port found");

                        if (serial->interface->num_altsetting == 1)
                                return 0;

                        retval = usb_set_interface(serial->dev, ifnum, 1);
                        if (retval < 0) {
                                dev_err(&serial->dev->dev,
                                        "Could not set interface, error %d\n",
                                        retval);
                                retval = -ENODEV;
                                kfree(data);
                        }
                        return retval;
                }
                break;

I don't understand why we need the extra test against bNumEndpoints and
usb_endpoint_is_bulk_{in,out} here. Can anyone shed any light?

-- Elly
--
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