greybus: es2: Reserve CPorts 16 and 17
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Tue, 8 Dec 2015 17:54:59 +0000 (19:54 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 9 Dec 2015 22:05:48 +0000 (17:05 -0500)
CPorts 16 and 17 are reserved for CDSI0 and CDSI1 by the ES2 APB, make
sure they won't be allocated dynamically.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/es2.c

index b1b6ad3a512b0e7c4c71544d748d55db958c347c..86972a959b07e6649a025c2c9e99edcbe689a819 100644 (file)
@@ -841,6 +841,7 @@ static int ap_probe(struct usb_interface *interface,
        int retval = -ENOMEM;
        int i;
        int num_cports;
+       int cport_id;
 
        udev = usb_get_dev(interface_to_usbdev(interface));
 
@@ -859,6 +860,14 @@ static int ap_probe(struct usb_interface *interface,
                return PTR_ERR(hd);
        }
 
+       /*
+        * CPorts 16 and 17 are reserved for CDSI0 and CDSI1, make sure they
+        * won't be allocated dynamically.
+        */
+       do {
+               cport_id = ida_simple_get(&hd->cport_id_map, 16, 18, GFP_KERNEL);
+       } while (cport_id > 0);
+
        es2 = hd_to_es2(hd);
        es2->hd = hd;
        es2->usb_intf = interface;