x86: Fix "Acer Aspire 1" reboot hang
Looks like on some Acer Aspire 1s with older bioses, reboot via bios fails. It works on my machine, (with BIOS version 0.3310) but not on some others (BIOS version 0.3309). There's a log of problems at: https://bbs.archlinux.org/viewtopic.php?id=124136 This patch adds a different callback to the reboot quirk table, to allow rebooting via keybaord controller. Reported-by: Uroš Vampl <mobile.leecher@gmail.com> Tested-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Peter Chubb <peter.chubb@nicta.com.au> Cc: Don Zickus <dzickus@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: stable@kernel.org Link: http://lkml.kernel.org/r/1323093233-9481-1-git-send-email-anarsoul@gmail.com Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Родитель
8dbf4a3003
Коммит
1ef0389096
|
@ -124,7 +124,7 @@ __setup("reboot=", reboot_setup);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some machines require the "reboot=b" commandline option,
|
* Some machines require the "reboot=b" or "reboot=k" commandline options,
|
||||||
* this quirk makes that automatic.
|
* this quirk makes that automatic.
|
||||||
*/
|
*/
|
||||||
static int __init set_bios_reboot(const struct dmi_system_id *d)
|
static int __init set_bios_reboot(const struct dmi_system_id *d)
|
||||||
|
@ -136,6 +136,15 @@ static int __init set_bios_reboot(const struct dmi_system_id *d)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __init set_kbd_reboot(const struct dmi_system_id *d)
|
||||||
|
{
|
||||||
|
if (reboot_type != BOOT_KBD) {
|
||||||
|
reboot_type = BOOT_KBD;
|
||||||
|
printk(KERN_INFO "%s series board detected. Selecting KBD-method for reboot.\n", d->ident);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
||||||
{ /* Handle problems with rebooting on Dell E520's */
|
{ /* Handle problems with rebooting on Dell E520's */
|
||||||
.callback = set_bios_reboot,
|
.callback = set_bios_reboot,
|
||||||
|
@ -295,7 +304,7 @@ static struct dmi_system_id __initdata reboot_dmi_table[] = {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
{ /* Handle reboot issue on Acer Aspire one */
|
{ /* Handle reboot issue on Acer Aspire one */
|
||||||
.callback = set_bios_reboot,
|
.callback = set_kbd_reboot,
|
||||||
.ident = "Acer Aspire One A110",
|
.ident = "Acer Aspire One A110",
|
||||||
.matches = {
|
.matches = {
|
||||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||||
|
|
Загрузка…
Ссылка в новой задаче