acer-wmi: does not set persistence state by rfkill_init_sw_state
[profile/ivi/kernel-adaptation-intel-automotive.git] / drivers / platform / x86 / acer-wmi.c
index d798314..652a84e 100644 (file)
@@ -217,6 +217,7 @@ struct acer_debug {
 static struct rfkill *wireless_rfkill;
 static struct rfkill *bluetooth_rfkill;
 static struct rfkill *threeg_rfkill;
+static bool rfkill_inited;
 
 /* Each low-level interface must define at least some of the following */
 struct wmi_interface {
@@ -1157,9 +1158,13 @@ static int acer_rfkill_set(void *data, bool blocked)
 {
        acpi_status status;
        u32 cap = (unsigned long)data;
-       status = set_u32(!blocked, cap);
-       if (ACPI_FAILURE(status))
-               return -ENODEV;
+
+       if (rfkill_inited) {
+               status = set_u32(!blocked, cap);
+               if (ACPI_FAILURE(status))
+                       return -ENODEV;
+       }
+
        return 0;
 }
 
@@ -1183,14 +1188,16 @@ static struct rfkill *acer_rfkill_register(struct device *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);
                return ERR_PTR(err);
        }
+
+       if (ACPI_SUCCESS(status))
+               rfkill_set_sw_state(rfkill_dev, !state);
+
        return rfkill_dev;
 }
 
@@ -1225,6 +1232,8 @@ static int acer_rfkill_init(struct device *dev)
                }
        }
 
+       rfkill_inited = true;
+
        schedule_delayed_work(&acer_rfkill_work, round_jiffies_relative(HZ));
 
        return 0;