forked from luck/tmp_suning_uos_patched
[ASUS_ACPI] work around Samsung P30s oops
The code used to rely on a certain method to return a NULL buffer, which is now hardly possible with the implicit return code on by default. This sort of fixes bugs #5067 and #5092 for now. Note: this patch makes the driver unusable on said machines (and on said machines only) iff acpi=strict is specified, but it seems noone really uses that. Signed-off-by: Karol Kozimor <sziwan@hell.org.pl> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
3603bc8dc5
commit
b697b5372e
@ -987,9 +987,21 @@ static int __init asus_hotk_get_info(void)
|
|||||||
printk(KERN_NOTICE " BSTS called, 0x%02x returned\n",
|
printk(KERN_NOTICE " BSTS called, 0x%02x returned\n",
|
||||||
bsts_result);
|
bsts_result);
|
||||||
|
|
||||||
/* Samsung P30 has a device with a valid _HID whose INIT does not
|
/* This is unlikely with implicit return */
|
||||||
* return anything. Catch this one and any similar here */
|
if (buffer.pointer == NULL)
|
||||||
if (buffer.pointer == NULL) {
|
return -EINVAL;
|
||||||
|
|
||||||
|
model = (union acpi_object *) buffer.pointer;
|
||||||
|
/*
|
||||||
|
* Samsung P30 has a device with a valid _HID whose INIT does not
|
||||||
|
* return anything. It used to be possible to catch this exception,
|
||||||
|
* but the implicit return code will now happily confuse the
|
||||||
|
* driver. We assume that every ACPI_TYPE_STRING is a valid model
|
||||||
|
* identifier but it's still possible to get completely bogus data.
|
||||||
|
*/
|
||||||
|
if (model->type == ACPI_TYPE_STRING) {
|
||||||
|
printk(KERN_NOTICE " %s model detected, ", model->string.pointer);
|
||||||
|
} else {
|
||||||
if (asus_info && /* Samsung P30 */
|
if (asus_info && /* Samsung P30 */
|
||||||
strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
|
strncmp(asus_info->oem_table_id, "ODEM", 4) == 0) {
|
||||||
hotk->model = P30;
|
hotk->model = P30;
|
||||||
@ -1002,13 +1014,10 @@ static int __init asus_hotk_get_info(void)
|
|||||||
"the developers with your DSDT\n");
|
"the developers with your DSDT\n");
|
||||||
}
|
}
|
||||||
hotk->methods = &model_conf[hotk->model];
|
hotk->methods = &model_conf[hotk->model];
|
||||||
return AE_OK;
|
|
||||||
}
|
acpi_os_free(model);
|
||||||
|
|
||||||
model = (union acpi_object *)buffer.pointer;
|
return AE_OK;
|
||||||
if (model->type == ACPI_TYPE_STRING) {
|
|
||||||
printk(KERN_NOTICE " %s model detected, ",
|
|
||||||
model->string.pointer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
hotk->model = END_MODEL;
|
hotk->model = END_MODEL;
|
||||||
|
Loading…
Reference in New Issue
Block a user