usbatm xusbatm.c,1.8,1.9

kagan at infradead.org kagan at infradead.org
Thu Apr 21 13:37:48 EDT 2005


Update of /home/cvs/usbatm
In directory phoenix.infradead.org:/tmp/cvs-serv22035

Modified Files:
	xusbatm.c 
Log Message:
Take into account the possibility that the requested endpoint may only be
present in some of the altsettings for the interface.  Still unclear who's
going to choose the right altsetting, though.

Also improve readability a little bit.


Index: xusbatm.c
===================================================================
RCS file: /home/cvs/usbatm/xusbatm.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- xusbatm.c	21 Apr 2005 15:19:11 -0000	1.8
+++ xusbatm.c	21 Apr 2005 17:37:45 -0000	1.9
@@ -50,12 +50,14 @@
 
 static int usb_intf_has_ep(const struct usb_interface *intf, u8 ep)
 {
-	struct usb_host_interface *alt = intf->altsetting;
-	u8 i, n_eps = alt->desc.bNumEndpoints;
+	int i, j;
 
-	for (i = 0; i < n_eps; i++)
-		if ((alt->endpoint[i].desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK) == ep)
-			return 1;
+	for (i = 0; i < intf->num_altsetting; i++) {
+		struct usb_host_interface *alt = intf->altsetting;
+		for (j = 0; j < alt->desc.bNumEndpoints; j++)
+			if ((alt->endpoint[i].desc.bEndpointAddress & USB_ENDPOINT_NUMBER_MASK) == ep)
+				return 1;
+	}
 	return 0;
 }
 
@@ -66,11 +68,9 @@
 	struct usb_device *usb_dev = interface_to_usbdev(intf);
 	int drv_ix = id - xusbatm_usb_ids;
 	int ifnum = intf->altsetting->desc.bInterfaceNumber;
-	const int num_ifs = usb_dev->actconfig->desc.bNumInterfaces;
 	int rx_ep_present = usb_intf_has_ep(intf, rx_endpoint[drv_ix]);
 	int tx_ep_present = usb_intf_has_ep(intf, tx_endpoint[drv_ix]);
 	u8 searched_ep = rx_ep_present ? tx_endpoint[drv_ix] : rx_endpoint[drv_ix];
-	struct usb_interface *cur_if;
 	int i, ret;
 
 	usb_dbg(usbatm_instance, "%s: binding driver %d: vendor %#x product %#x"
@@ -88,15 +88,16 @@
 	if (rx_ep_present && tx_ep_present)
 		return 0;
 
-	for(i = 0; i < num_ifs; i++) {
-		cur_if = usb_ifnum_to_if(usb_dev, i);
+	for(i = 0; i < usb_dev->actconfig->desc.bNumInterfaces; i++) {
+		struct usb_interface *cur_if = usb_dev->actconfig->interface[i];
+		int cur_ifnum = cur_if->altsetting->desc.bInterfaceNumber;
 
-		if (i != ifnum && cur_if && usb_intf_has_ep(cur_if, searched_ep)) {
+		if (cur_ifnum != ifnum && usb_intf_has_ep(cur_if, searched_ep)) {
 			ret = usb_driver_claim_interface(&xusbatm_usb_driver,
 							 cur_if, usbatm_instance);
 			if (!ret)
 				usb_err(usbatm_instance, "%s: failed to claim interface #%d (%d)\n",
-					__func__, i, ret);
+					__func__, cur_ifnum, ret);
 			return ret;
 		}
 	}
@@ -110,16 +111,14 @@
 			   struct usb_interface *intf)
 {
 	struct usb_device *usb_dev = interface_to_usbdev(intf);
-	const int num_ifs = usb_dev->actconfig->desc.bNumInterfaces;
-	struct usb_interface *cur_if;
 	int i;
 	usb_dbg(usbatm_instance, "%s entered\n", __func__);
 
-	for(i = 0; i < num_ifs; i++)
-		if ((cur_if = usb_ifnum_to_if(usb_dev, i))) {
-			usb_set_intfdata(cur_if, NULL);
-			usb_driver_release_interface(&xusbatm_usb_driver, cur_if);
-		}
+	for(i = 0; i < usb_dev->actconfig->desc.bNumInterfaces; i++) {
+		struct usb_interface *cur_if = usb_dev->actconfig->interface[i];
+		usb_set_intfdata(cur_if, NULL);
+		usb_driver_release_interface(&xusbatm_usb_driver, cur_if);
+	}
 }
 
 static int xusbatm_atm_start(struct usbatm_data *usbatm_instance,




More information about the Usbatm-commits mailing list