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
1 changed files with 31 additions and 0 deletions
|
@ -1085,6 +1085,31 @@ static acpi_status wmid3_get_device_status(u32 *value, u16 device)
|
||||||
return status;
|
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
|
* Rfkill devices
|
||||||
*/
|
*/
|
||||||
|
@ -1135,6 +1160,8 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
struct rfkill *rfkill_dev;
|
struct rfkill *rfkill_dev;
|
||||||
|
u32 state;
|
||||||
|
acpi_status status;
|
||||||
|
|
||||||
rfkill_dev = rfkill_alloc(name, dev, type,
|
rfkill_dev = rfkill_alloc(name, dev, type,
|
||||||
&acer_rfkill_ops,
|
&acer_rfkill_ops,
|
||||||
|
@ -1142,6 +1169,10 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
|
||||||
if (!rfkill_dev)
|
if (!rfkill_dev)
|
||||||
return ERR_PTR(-ENOMEM);
|
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);
|
err = rfkill_register(rfkill_dev);
|
||||||
if (err) {
|
if (err) {
|
||||||
rfkill_destroy(rfkill_dev);
|
rfkill_destroy(rfkill_dev);
|
||||||
|
|
Loading…
Reference in a new issue