Linux 3.8 compatibility hack
Since the following commit, the device would not turn off because the power state is unknown. Until a fix is released in Linux (or until I know what better to do), I just assume the power state D0. commit ddc150f7a33ae0c9cb16eaac3641abc00f56316f Author: Lv Zheng <lv.zheng@intel.com> Date: Fri Nov 16 02:46:28 2012 +0100 ACPI / PM: Add check preventing transitioning to non-D0 state from D3. No power transitioning from D3 state up to a non-D0 state is allowed so make acpi_device_set_power() fail and complain if such a transition is attempted. Signed-off-by: Lv Zheng <lv.zheng@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							
								
								
									
										14
									
								
								bbswitch.c
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								bbswitch.c
									
									
									
									
									
								
							@@ -238,6 +238,20 @@ static void bbswitch_off(void) {
 | 
			
		||||
    pci_save_state(dis_dev);
 | 
			
		||||
    pci_clear_master(dis_dev);
 | 
			
		||||
    pci_disable_device(dis_dev);
 | 
			
		||||
    do {
 | 
			
		||||
        struct acpi_device *ad = NULL;
 | 
			
		||||
        int r;
 | 
			
		||||
 | 
			
		||||
        r = acpi_bus_get_device(dis_handle, &ad);
 | 
			
		||||
        if (r || !ad) {
 | 
			
		||||
            pr_warn("Cannot get ACPI device for PCI device\n");
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        if (ad->power.state == ACPI_STATE_UNKNOWN) {
 | 
			
		||||
            pr_debug("ACPI power state is unknown, forcing D0\n");
 | 
			
		||||
            ad->power.state = ACPI_STATE_D0;
 | 
			
		||||
        }
 | 
			
		||||
    } while (0);
 | 
			
		||||
    pci_set_power_state(dis_dev, PCI_D3cold);
 | 
			
		||||
 | 
			
		||||
    if (bbswitch_acpi_off())
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user