forked from luck/tmp_suning_uos_patched
thinkpad-acpi: fix BEEP ACPI handler warnings
Some ThinkPads want two arguments for BEEP, while others want just one, causing ACPICA to log warnings like this: ACPI Warning (nseval-0177): Excess arguments - method [BEEP] needs 1, found 2 [20080926] Deal with it. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
7d95a3d564
commit
60201732f0
@ -264,6 +264,7 @@ static struct {
|
||||
u32 wan:1;
|
||||
u32 uwb:1;
|
||||
u32 fan_ctrl_status_undef:1;
|
||||
u32 beep_needs_two_args:1;
|
||||
u32 input_device_registered:1;
|
||||
u32 platform_drv_registered:1;
|
||||
u32 platform_drv_attrs_registered:1;
|
||||
@ -5142,8 +5143,17 @@ static struct ibm_struct led_driver_data = {
|
||||
|
||||
TPACPI_HANDLE(beep, ec, "BEEP"); /* all except R30, R31 */
|
||||
|
||||
#define TPACPI_BEEP_Q1 0x0001
|
||||
|
||||
static const struct tpacpi_quirk beep_quirk_table[] __initconst = {
|
||||
TPACPI_Q_IBM('I', 'M', TPACPI_BEEP_Q1), /* 570 */
|
||||
TPACPI_Q_IBM('I', 'U', TPACPI_BEEP_Q1), /* 570E - unverified */
|
||||
};
|
||||
|
||||
static int __init beep_init(struct ibm_init_struct *iibm)
|
||||
{
|
||||
unsigned long quirks;
|
||||
|
||||
vdbg_printk(TPACPI_DBG_INIT, "initializing beep subdriver\n");
|
||||
|
||||
TPACPI_ACPIHANDLE_INIT(beep);
|
||||
@ -5151,6 +5161,11 @@ static int __init beep_init(struct ibm_init_struct *iibm)
|
||||
vdbg_printk(TPACPI_DBG_INIT, "beep is %s\n",
|
||||
str_supported(beep_handle != NULL));
|
||||
|
||||
quirks = tpacpi_check_quirks(beep_quirk_table,
|
||||
ARRAY_SIZE(beep_quirk_table));
|
||||
|
||||
tp_features.beep_needs_two_args = !!(quirks & TPACPI_BEEP_Q1);
|
||||
|
||||
return (beep_handle)? 0 : 1;
|
||||
}
|
||||
|
||||
@ -5182,8 +5197,15 @@ static int beep_write(char *buf)
|
||||
/* beep_cmd set */
|
||||
} else
|
||||
return -EINVAL;
|
||||
if (!acpi_evalf(beep_handle, NULL, NULL, "vdd", beep_cmd, 0))
|
||||
return -EIO;
|
||||
if (tp_features.beep_needs_two_args) {
|
||||
if (!acpi_evalf(beep_handle, NULL, NULL, "vdd",
|
||||
beep_cmd, 0))
|
||||
return -EIO;
|
||||
} else {
|
||||
if (!acpi_evalf(beep_handle, NULL, NULL, "vd",
|
||||
beep_cmd))
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user