|
@@ -200,7 +200,7 @@ static void __rfkill_switch_all(const enum rfkill_type type,
|
|
|
|
|
|
rfkill_global_states[type].current_state = state;
|
|
|
list_for_each_entry(rfkill, &rfkill_list, node) {
|
|
|
- if ((!rfkill->user_claim) && (rfkill->type == type)) {
|
|
|
+ if (rfkill->type == type) {
|
|
|
mutex_lock(&rfkill->mutex);
|
|
|
rfkill_toggle_radio(rfkill, state, 0);
|
|
|
mutex_unlock(&rfkill->mutex);
|
|
@@ -447,53 +447,14 @@ static ssize_t rfkill_claim_show(struct device *dev,
|
|
|
struct device_attribute *attr,
|
|
|
char *buf)
|
|
|
{
|
|
|
- struct rfkill *rfkill = to_rfkill(dev);
|
|
|
-
|
|
|
- return sprintf(buf, "%d\n", rfkill->user_claim);
|
|
|
+ return sprintf(buf, "%d\n", 0);
|
|
|
}
|
|
|
|
|
|
static ssize_t rfkill_claim_store(struct device *dev,
|
|
|
struct device_attribute *attr,
|
|
|
const char *buf, size_t count)
|
|
|
{
|
|
|
- struct rfkill *rfkill = to_rfkill(dev);
|
|
|
- unsigned long claim_tmp;
|
|
|
- bool claim;
|
|
|
- int error;
|
|
|
-
|
|
|
- if (!capable(CAP_NET_ADMIN))
|
|
|
- return -EPERM;
|
|
|
-
|
|
|
- if (rfkill->user_claim_unsupported)
|
|
|
- return -EOPNOTSUPP;
|
|
|
-
|
|
|
- error = strict_strtoul(buf, 0, &claim_tmp);
|
|
|
- if (error)
|
|
|
- return error;
|
|
|
- claim = !!claim_tmp;
|
|
|
-
|
|
|
- /*
|
|
|
- * Take the global lock to make sure the kernel is not in
|
|
|
- * the middle of rfkill_switch_all
|
|
|
- */
|
|
|
- error = mutex_lock_killable(&rfkill_global_mutex);
|
|
|
- if (error)
|
|
|
- return error;
|
|
|
-
|
|
|
- if (rfkill->user_claim != claim) {
|
|
|
- if (!claim && !rfkill_epo_lock_active) {
|
|
|
- mutex_lock(&rfkill->mutex);
|
|
|
- rfkill_toggle_radio(rfkill,
|
|
|
- rfkill_global_states[rfkill->type].current_state,
|
|
|
- 0);
|
|
|
- mutex_unlock(&rfkill->mutex);
|
|
|
- }
|
|
|
- rfkill->user_claim = claim;
|
|
|
- }
|
|
|
-
|
|
|
- mutex_unlock(&rfkill_global_mutex);
|
|
|
-
|
|
|
- return error ? error : count;
|
|
|
+ return -EOPNOTSUPP;
|
|
|
}
|
|
|
|
|
|
static struct device_attribute rfkill_dev_attrs[] = {
|