⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbdcore-multiple_configs.patch

📁 Uboot常用的移植patches, 方便定制移植到s3c2440
💻 PATCH
字号:
This patch fixes bugs in usbdcore*.c related to the use of deviceswith multiple configurations.The original code made mistakes about the meaning of configuration value andconfiguration index, and the resulting off-by-one errors resulted in:* SET_CONFIGURATION always selected the first configuration, no matter what  wValue is being passed.* GET_DESCRIPTOR/CONFIGURATION always returned the descriptor for the first  configuration (index 0).Signed-off-by: Harald Welte <laforge@openmoko.org>Index: u-boot/drivers/usb/usbdcore_ep0.c===================================================================--- u-boot.orig/drivers/usb/usbdcore_ep0.c+++ u-boot/drivers/usb/usbdcore_ep0.c@@ -237,8 +237,8 @@ 				return -1; 			} 			/*dbg_ep0(2, "%d %d", index, device_descriptor->bNumConfigurations); */-			if (index > device_descriptor->bNumConfigurations) {-				dbg_ep0 (0, "index too large: %d > %d", index,+			if (index >= device_descriptor->bNumConfigurations) {+				dbg_ep0 (0, "index too large: %d >= %d", index, 					 device_descriptor-> 					 bNumConfigurations); 				return -1;@@ -612,14 +612,8 @@  		case USB_REQ_SET_CONFIGURATION: 			/* c.f. 9.4.7 - the top half of wValue is reserved */-			/* */-			if ((device->configuration =-				le16_to_cpu (request->wValue) & 0xFF80) != 0) {-				/* c.f. 9.4.7 - zero is the default or addressed state, in our case this */-				/* is the same is configuration zero */-				serial_printf("error setting dev->config to zero!\n");-				device->configuration = 0;	/* TBR - ?????? */-			}+			device->configuration = le16_to_cpu(request->wValue) & 0xff;+ 			/* reset interface and alternate settings */ 			device->interface = device->alternate = 0; Index: u-boot/drivers/usb/usbdcore.c===================================================================--- u-boot.orig/drivers/usb/usbdcore.c+++ u-boot/drivers/usb/usbdcore.c@@ -147,12 +147,9 @@ static struct usb_configuration_instance *usbd_device_configuration_instance (struct usb_device_instance *device, 		unsigned int port, unsigned int configuration) {-	/* XXX */-	configuration = configuration ? configuration - 1 : 0;--	if (configuration >= device->configurations) {+	if (configuration >= device->configurations) 		return NULL;-	}+ 	return device->configuration_instance_array + configuration; } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -