|
@@ -1251,8 +1251,27 @@ static int digi_port_init(struct usb_serial_port *port, unsigned port_num)
|
|
|
|
|
|
static int digi_startup(struct usb_serial *serial)
|
|
|
{
|
|
|
+ struct device *dev = &serial->interface->dev;
|
|
|
struct digi_serial *serial_priv;
|
|
|
int ret;
|
|
|
+ int i;
|
|
|
+
|
|
|
+ /* check whether the device has the expected number of endpoints */
|
|
|
+ if (serial->num_port_pointers < serial->type->num_ports + 1) {
|
|
|
+ dev_err(dev, "OOB endpoints missing\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+
|
|
|
+ for (i = 0; i < serial->type->num_ports + 1 ; i++) {
|
|
|
+ if (!serial->port[i]->read_urb) {
|
|
|
+ dev_err(dev, "bulk-in endpoint missing\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+ if (!serial->port[i]->write_urb) {
|
|
|
+ dev_err(dev, "bulk-out endpoint missing\n");
|
|
|
+ return -ENODEV;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
serial_priv = kzalloc(sizeof(*serial_priv), GFP_KERNEL);
|
|
|
if (!serial_priv)
|