acer-wmi: Initialize wlan/bluetooth/wwan rfkill software block state
Initial wlan/bluetooth/wwan rfkill software block state when acer-wmi driver probe. Acer notebook can save the devices state and this patch can use it to initial the devices' rfkill state. Signed-off-by: Lee, Chun-Yi <jlee@novell.com> Acked-by: Thomas Renninger <trenn@suse.de> Cc: Carlos Corbacho <carlos@strangeworlds.co.uk> Signed-off-by: Matthew Garrett <mjg@redhat.com>
This commit is contained in:
parent
6c3df88f19
commit
466449cfe7
|
@ -1085,6 +1085,31 @@ static acpi_status wmid3_get_device_status(u32 *value, u16 device)
|
|||
return status;
|
||||
}
|
||||
|
||||
static acpi_status get_device_status(u32 *value, u32 cap)
|
||||
{
|
||||
if (wmi_has_guid(WMID_GUID3)) {
|
||||
u16 device;
|
||||
|
||||
switch (cap) {
|
||||
case ACER_CAP_WIRELESS:
|
||||
device = ACER_WMID3_GDS_WIRELESS;
|
||||
break;
|
||||
case ACER_CAP_BLUETOOTH:
|
||||
device = ACER_WMID3_GDS_BLUETOOTH;
|
||||
break;
|
||||
case ACER_CAP_THREEG:
|
||||
device = ACER_WMID3_GDS_THREEG;
|
||||
break;
|
||||
default:
|
||||
return AE_ERROR;
|
||||
}
|
||||
return wmid3_get_device_status(value, device);
|
||||
|
||||
} else {
|
||||
return get_u32(value, cap);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Rfkill devices
|
||||
*/
|
||||
|
@ -1135,6 +1160,8 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
|
|||
{
|
||||
int err;
|
||||
struct rfkill *rfkill_dev;
|
||||
u32 state;
|
||||
acpi_status status;
|
||||
|
||||
rfkill_dev = rfkill_alloc(name, dev, type,
|
||||
&acer_rfkill_ops,
|
||||
|
@ -1142,6 +1169,10 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
|
|||
if (!rfkill_dev)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
status = get_device_status(&state, cap);
|
||||
if (ACPI_SUCCESS(status))
|
||||
rfkill_init_sw_state(rfkill_dev, !state);
|
||||
|
||||
err = rfkill_register(rfkill_dev);
|
||||
if (err) {
|
||||
rfkill_destroy(rfkill_dev);
|
||||
|
|
Loading…
Reference in New Issue