static int rfkill_init(struct platform_device *sdev) { /* add rfkill */ int retval; /* keep the hardware wireless state */ get_wireless_state_ec_standard(); rfk_bluetooth = rfkill_alloc("msi-bluetooth", &sdev->dev, RFKILL_TYPE_BLUETOOTH, &rfkill_bluetooth_ops, NULL); if (!rfk_bluetooth) { retval = -ENOMEM; goto err_bluetooth; } retval = rfkill_register(rfk_bluetooth); if (retval) goto err_bluetooth; rfk_wlan = rfkill_alloc("msi-wlan", &sdev->dev, RFKILL_TYPE_WLAN, &rfkill_wlan_ops, NULL); if (!rfk_wlan) { retval = -ENOMEM; goto err_wlan; } retval = rfkill_register(rfk_wlan); if (retval) goto err_wlan; if (threeg_exists) { rfk_threeg = rfkill_alloc("msi-threeg", &sdev->dev, RFKILL_TYPE_WWAN, &rfkill_threeg_ops, NULL); if (!rfk_threeg) { retval = -ENOMEM; goto err_threeg; } retval = rfkill_register(rfk_threeg); if (retval) goto err_threeg; } /* schedule to run rfkill state initial */ schedule_delayed_work(&msi_rfkill_init, round_jiffies_relative(1 * HZ)); return 0; err_threeg: rfkill_destroy(rfk_threeg); if (rfk_wlan) rfkill_unregister(rfk_wlan); err_wlan: rfkill_destroy(rfk_wlan); if (rfk_bluetooth) rfkill_unregister(rfk_bluetooth); err_bluetooth: rfkill_destroy(rfk_bluetooth); return retval; }
static void msi_update_rfkill(struct work_struct *ignored) { get_wireless_state_ec_standard(); if (rfk_wlan) msi_rfkill_set_state(rfk_wlan, !wlan_s); if (rfk_bluetooth) msi_rfkill_set_state(rfk_bluetooth, !bluetooth_s); if (rfk_threeg) msi_rfkill_set_state(rfk_threeg, !threeg_s); }
static ssize_t show_threeg(struct device *dev, struct device_attribute *attr, char *buf) { int ret; /* old msi ec not support 3G */ if (old_ec_model) return -1; ret = get_wireless_state_ec_standard(); if (ret < 0) return ret; return sprintf(buf, "%i\n", threeg_s); }
static ssize_t show_bluetooth(struct device *dev, struct device_attribute *attr, char *buf) { int ret, enabled; if (old_ec_model) { ret = get_wireless_state(NULL, &enabled); } else { ret = get_wireless_state_ec_standard(); enabled = bluetooth_s; } if (ret < 0) return ret; return sprintf(buf, "%i\n", enabled); }
static ssize_t show_wlan(struct device *dev, struct device_attribute *attr, char *buf) { int ret, enabled = 0; if (quirks->old_ec_model) { ret = get_wireless_state(&enabled, NULL); } else { ret = get_wireless_state_ec_standard(); enabled = wlan_s; } if (ret < 0) return ret; return sprintf(buf, "%i\n", enabled); }