Merge branches 'acpi-gpe', 'acpi-video', 'acpi-thermal', 'acpi-processor', 'acpi-sleep'
* acpi-gpe: ACPI / EC: disable GPE before removing GPE handler ACPI / Button: Fix enabling button GPEs twice * acpi-video: ACPI: Blacklist Win8 OSI for some HP laptop 2013 models ACPI / video: Fix typo in video_detect.c * acpi-thermal: ACPI / thermal: remove const from thermal_zone_device_ops declaration * acpi-processor: ACPI / scan: bail out early if failed to parse APIC ID for CPU * acpi-sleep: ACPI / sleep: remove panic in case hardware has changed after S4
This commit is contained in:
commit
bcc7201a91
@ -212,7 +212,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||||||
union acpi_object object = { 0 };
|
union acpi_object object = { 0 };
|
||||||
struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
|
struct acpi_buffer buffer = { sizeof(union acpi_object), &object };
|
||||||
struct acpi_processor *pr = acpi_driver_data(device);
|
struct acpi_processor *pr = acpi_driver_data(device);
|
||||||
int cpu_index, device_declaration = 0;
|
int apic_id, cpu_index, device_declaration = 0;
|
||||||
acpi_status status = AE_OK;
|
acpi_status status = AE_OK;
|
||||||
static int cpu0_initialized;
|
static int cpu0_initialized;
|
||||||
unsigned long long value;
|
unsigned long long value;
|
||||||
@ -258,18 +258,21 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||||||
device_declaration = 1;
|
device_declaration = 1;
|
||||||
pr->acpi_id = value;
|
pr->acpi_id = value;
|
||||||
}
|
}
|
||||||
pr->apic_id = acpi_get_apicid(pr->handle, device_declaration,
|
|
||||||
pr->acpi_id);
|
|
||||||
cpu_index = acpi_map_cpuid(pr->apic_id, pr->acpi_id);
|
|
||||||
|
|
||||||
|
apic_id = acpi_get_apicid(pr->handle, device_declaration, pr->acpi_id);
|
||||||
|
if (apic_id < 0) {
|
||||||
|
acpi_handle_err(pr->handle, "failed to get CPU APIC ID.\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
pr->apic_id = apic_id;
|
||||||
|
|
||||||
|
cpu_index = acpi_map_cpuid(pr->apic_id, pr->acpi_id);
|
||||||
|
if (!cpu0_initialized) {
|
||||||
|
cpu0_initialized = 1;
|
||||||
/* Handle UP system running SMP kernel, with no LAPIC in MADT */
|
/* Handle UP system running SMP kernel, with no LAPIC in MADT */
|
||||||
if (!cpu0_initialized && (cpu_index == -1) &&
|
if ((cpu_index == -1) && (num_online_cpus() == 1))
|
||||||
(num_online_cpus() == 1)) {
|
|
||||||
cpu_index = 0;
|
cpu_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
cpu0_initialized = 1;
|
|
||||||
|
|
||||||
pr->id = cpu_index;
|
pr->id = cpu_index;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -282,6 +285,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* On some boxes several processors use the same processor bus id.
|
* On some boxes several processors use the same processor bus id.
|
||||||
* But they are located in different scope. For example:
|
* But they are located in different scope. For example:
|
||||||
|
@ -322,6 +322,56 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
|
|||||||
DMI_MATCH(DMI_PRODUCT_VERSION, "2349D15"),
|
DMI_MATCH(DMI_PRODUCT_VERSION, "2349D15"),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "HP ProBook 2013 models",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP ProBook "),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, " G1"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "HP EliteBook 2013 models",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook "),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, " G1"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "HP ZBook 14",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP ZBook 14"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "HP ZBook 15",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP ZBook 15"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "HP ZBook 17",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP ZBook 17"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.callback = dmi_disable_osi_win8,
|
||||||
|
.ident = "HP EliteBook 8780w",
|
||||||
|
.matches = {
|
||||||
|
DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME, "HP EliteBook 8780w"),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
|
* BIOS invocation of _OSI(Linux) is almost always a BIOS bug.
|
||||||
|
@ -100,7 +100,6 @@ struct acpi_button {
|
|||||||
struct input_dev *input;
|
struct input_dev *input;
|
||||||
char phys[32]; /* for input device */
|
char phys[32]; /* for input device */
|
||||||
unsigned long pushed;
|
unsigned long pushed;
|
||||||
bool wakeup_enabled;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier);
|
static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier);
|
||||||
@ -406,16 +405,6 @@ static int acpi_button_add(struct acpi_device *device)
|
|||||||
lid_device = device;
|
lid_device = device;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (device->wakeup.flags.valid) {
|
|
||||||
/* Button's GPE is run-wake GPE */
|
|
||||||
acpi_enable_gpe(device->wakeup.gpe_device,
|
|
||||||
device->wakeup.gpe_number);
|
|
||||||
if (!device_may_wakeup(&device->dev)) {
|
|
||||||
device_set_wakeup_enable(&device->dev, true);
|
|
||||||
button->wakeup_enabled = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device));
|
printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -432,13 +421,6 @@ static int acpi_button_remove(struct acpi_device *device)
|
|||||||
{
|
{
|
||||||
struct acpi_button *button = acpi_driver_data(device);
|
struct acpi_button *button = acpi_driver_data(device);
|
||||||
|
|
||||||
if (device->wakeup.flags.valid) {
|
|
||||||
acpi_disable_gpe(device->wakeup.gpe_device,
|
|
||||||
device->wakeup.gpe_number);
|
|
||||||
if (button->wakeup_enabled)
|
|
||||||
device_set_wakeup_enable(&device->dev, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
acpi_button_remove_fs(device);
|
acpi_button_remove_fs(device);
|
||||||
input_unregister_device(button->input);
|
input_unregister_device(button->input);
|
||||||
kfree(button);
|
kfree(button);
|
||||||
|
@ -753,9 +753,9 @@ static int ec_install_handlers(struct acpi_ec *ec)
|
|||||||
pr_err("Fail in evaluating the _REG object"
|
pr_err("Fail in evaluating the _REG object"
|
||||||
" of EC device. Broken bios is suspected.\n");
|
" of EC device. Broken bios is suspected.\n");
|
||||||
} else {
|
} else {
|
||||||
|
acpi_disable_gpe(NULL, ec->gpe);
|
||||||
acpi_remove_gpe_handler(NULL, ec->gpe,
|
acpi_remove_gpe_handler(NULL, ec->gpe,
|
||||||
&acpi_ec_gpe_handler);
|
&acpi_ec_gpe_handler);
|
||||||
acpi_disable_gpe(NULL, ec->gpe);
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -666,11 +666,8 @@ static void acpi_hibernation_leave(void)
|
|||||||
/* Reprogram control registers */
|
/* Reprogram control registers */
|
||||||
acpi_leave_sleep_state_prep(ACPI_STATE_S4);
|
acpi_leave_sleep_state_prep(ACPI_STATE_S4);
|
||||||
/* Check the hardware signature */
|
/* Check the hardware signature */
|
||||||
if (facs && s4_hardware_signature != facs->hardware_signature) {
|
if (facs && s4_hardware_signature != facs->hardware_signature)
|
||||||
printk(KERN_EMERG "ACPI: Hardware changed while hibernated, "
|
pr_crit("ACPI: Hardware changed while hibernated, success doubtful!\n");
|
||||||
"cannot resume!\n");
|
|
||||||
panic("ACPI S4 hardware signature mismatch");
|
|
||||||
}
|
|
||||||
/* Restore the NVS memory area */
|
/* Restore the NVS memory area */
|
||||||
suspend_nvs_restore();
|
suspend_nvs_restore();
|
||||||
/* Allow EC transactions to happen. */
|
/* Allow EC transactions to happen. */
|
||||||
|
@ -861,7 +861,7 @@ acpi_thermal_unbind_cooling_device(struct thermal_zone_device *thermal,
|
|||||||
return acpi_thermal_cooling_device_cb(thermal, cdev, false);
|
return acpi_thermal_cooling_device_cb(thermal, cdev, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct thermal_zone_device_ops acpi_thermal_zone_ops = {
|
static struct thermal_zone_device_ops acpi_thermal_zone_ops = {
|
||||||
.bind = acpi_thermal_bind_cooling_device,
|
.bind = acpi_thermal_bind_cooling_device,
|
||||||
.unbind = acpi_thermal_unbind_cooling_device,
|
.unbind = acpi_thermal_unbind_cooling_device,
|
||||||
.get_temp = thermal_get_temp,
|
.get_temp = thermal_get_temp,
|
||||||
|
@ -50,7 +50,7 @@ static bool acpi_video_caps_checked;
|
|||||||
|
|
||||||
static acpi_status
|
static acpi_status
|
||||||
acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context,
|
acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context,
|
||||||
void **retyurn_value)
|
void **return_value)
|
||||||
{
|
{
|
||||||
long *cap = context;
|
long *cap = context;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user