forked from rpms/kernel
		
	backport pnpacpi-cope-with-invalid-device-ids from linux-next
This commit is contained in:
		
							parent
							
								
									42dee18802
								
							
						
					
					
						commit
						694abf90a3
					
				| @ -724,6 +724,8 @@ Patch12224: pci-v2-4-4-PCI-allocate-bus-resources-from-the-top-down.patch | ||||
| Patch12300: btusb-macbookpro-7-1.patch | ||||
| Patch12301: btusb-macbookpro-6-2.patch | ||||
| 
 | ||||
| Patch12302: pnpacpi-cope-with-invalid-device-ids.patch | ||||
| 
 | ||||
| %endif | ||||
| 
 | ||||
| BuildRoot: %{_tmppath}/kernel-%{KVERREL}-root | ||||
| @ -1333,6 +1335,9 @@ ApplyPatch pci-v2-4-4-PCI-allocate-bus-resources-from-the-top-down.patch | ||||
| ApplyPatch btusb-macbookpro-7-1.patch | ||||
| ApplyPatch btusb-macbookpro-6-2.patch | ||||
| 
 | ||||
| # rhbz#641468 | ||||
| ApplyPatch pnpacpi-cope-with-invalid-device-ids.patch | ||||
| 
 | ||||
| # END OF PATCH APPLICATIONS | ||||
| 
 | ||||
| %endif | ||||
| @ -1940,6 +1945,10 @@ fi | ||||
| #                 ||     || | ||||
| 
 | ||||
| %changelog | ||||
| * Fri Oct 15 2010 Kyle McMartin <kyle@redhat.com> | ||||
| - backport pnpacpi-cope-with-invalid-device-ids from linux-next. | ||||
|   (rhbz#641468) | ||||
| 
 | ||||
| * Fri Oct 15 2010 Kyle McMartin <kyle@redhat.com> 2.6.36-0.39.rc8.git0 | ||||
| - Linux 2.6.36-rc8. | ||||
| 
 | ||||
|  | ||||
							
								
								
									
										85
									
								
								pnpacpi-cope-with-invalid-device-ids.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										85
									
								
								pnpacpi-cope-with-invalid-device-ids.patch
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,85 @@ | ||||
| commit 420a0f66378c84b00b0e603e4d38210102dbe367 | ||||
| Author: Dmitry Torokhov <dmitry.torokhov@gmail.com> | ||||
| Date:   Sat Sep 18 10:11:09 2010 -0700 | ||||
| 
 | ||||
|     PNPACPI: cope with invalid device IDs | ||||
|      | ||||
|     If primary ID (HID) is invalid try locating first valid ID on compatible | ||||
|     ID list before giving up. | ||||
|      | ||||
|     This helps, for example, to recognize i8042 AUX port on Sony Vaio VPCZ1 | ||||
|     which uses SNYSYN0003 as HID. Without the patch users are forced to | ||||
|     boot with i8042.nopnp to make use of their touchpads. | ||||
|      | ||||
|     Tested-by: Jan-Hendrik Zab <jan@jhz.name> | ||||
|     Signed-off-by: Dmitry Torokhov <dtor@mail.ru> | ||||
|     Signed-off-by: Len Brown <len.brown@intel.com> | ||||
| 
 | ||||
| diff --git a/drivers/pnp/pnpacpi/core.c b/drivers/pnp/pnpacpi/core.c
 | ||||
| index dc4e32e..0d943ee 100644
 | ||||
| --- a/drivers/pnp/pnpacpi/core.c
 | ||||
| +++ b/drivers/pnp/pnpacpi/core.c
 | ||||
| @@ -28,7 +28,7 @@
 | ||||
|  #include "../base.h" | ||||
|  #include "pnpacpi.h" | ||||
|   | ||||
| -static int num = 0;
 | ||||
| +static int num;
 | ||||
|   | ||||
|  /* We need only to blacklist devices that have already an acpi driver that | ||||
|   * can't use pnp layer. We don't need to blacklist device that are directly | ||||
| @@ -180,11 +180,24 @@ struct pnp_protocol pnpacpi_protocol = {
 | ||||
|  }; | ||||
|  EXPORT_SYMBOL(pnpacpi_protocol); | ||||
|   | ||||
| +static char *pnpacpi_get_id(struct acpi_device *device)
 | ||||
| +{
 | ||||
| +	struct acpi_hardware_id *id;
 | ||||
| +
 | ||||
| +	list_for_each_entry(id, &device->pnp.ids, list) {
 | ||||
| +		if (ispnpidacpi(id->id))
 | ||||
| +			return id->id;
 | ||||
| +	}
 | ||||
| +
 | ||||
| +	return NULL;
 | ||||
| +}
 | ||||
| +
 | ||||
|  static int __init pnpacpi_add_device(struct acpi_device *device) | ||||
|  { | ||||
|  	acpi_handle temp = NULL; | ||||
|  	acpi_status status; | ||||
|  	struct pnp_dev *dev; | ||||
| +	char *pnpid;
 | ||||
|  	struct acpi_hardware_id *id; | ||||
|   | ||||
|  	/* | ||||
| @@ -192,11 +205,17 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
 | ||||
|  	 * driver should not be loaded. | ||||
|  	 */ | ||||
|  	status = acpi_get_handle(device->handle, "_CRS", &temp); | ||||
| -	if (ACPI_FAILURE(status) || !ispnpidacpi(acpi_device_hid(device)) ||
 | ||||
| -	    is_exclusive_device(device) || (!device->status.present))
 | ||||
| +	if (ACPI_FAILURE(status))
 | ||||
| +		return 0;
 | ||||
| +
 | ||||
| +	pnpid = pnpacpi_get_id(device);
 | ||||
| +	if (!pnpid)
 | ||||
| +		return 0;
 | ||||
| +
 | ||||
| +	if (is_exclusive_device(device) || !device->status.present)
 | ||||
|  		return 0; | ||||
|   | ||||
| -	dev = pnp_alloc_dev(&pnpacpi_protocol, num, acpi_device_hid(device));
 | ||||
| +	dev = pnp_alloc_dev(&pnpacpi_protocol, num, pnpid);
 | ||||
|  	if (!dev) | ||||
|  		return -ENOMEM; | ||||
|   | ||||
| @@ -227,7 +246,7 @@ static int __init pnpacpi_add_device(struct acpi_device *device)
 | ||||
|  		pnpacpi_parse_resource_option_data(dev); | ||||
|   | ||||
|  	list_for_each_entry(id, &device->pnp.ids, list) { | ||||
| -		if (!strcmp(id->id, acpi_device_hid(device)))
 | ||||
| +		if (!strcmp(id->id, pnpid))
 | ||||
|  			continue; | ||||
|  		if (!ispnpidacpi(id->id)) | ||||
|  			continue; | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user