From: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Henrique de Moraes Holschuh <hmh@hmh.eng.br>,
Marcel Holtmann <marcel@holtmann.org>,
John Linville <linville@tuxdriver.com>,
linux-wireless <linux-wireless@vger.kernel.org>,
Matthew Garrett <mjg59@srcf.ucam.org>
Subject: Re: [RFC] rfkill: remove set_global_sw_state()
Date: Mon, 08 Jun 2009 12:10:05 +0100 [thread overview]
Message-ID: <4A2CF18D.4080305@tuffmail.co.uk> (raw)
In-Reply-To: <1244457159.18863.7.camel@johannes.local>
Johannes Berg wrote:
> On Mon, 2009-06-08 at 11:14 +0100, Alan Jenkins wrote:
>
>> rfkill_set_global_sw_state() (previously rfkill_set_default()) will no
>> longer be exported by the rewritten rfkill core.
>>
>> Instead, platform drivers which can provide persistent soft-rfkill state
>> across power-down/reboot should indicate their initial state by calling
>> rfkill_set_sw_state() before registration. Otherwise, they will be
>> initialized to a default value during registration by a set_block call.
>>
>> We remove existing calls to rfkill_set_sw_state() which happen before
>> registration, since these had no effect in the old model. If these
>> drivers do have persistent state, the calls can be put back (subject
>> to testing :-). This affects hp-wmi and acer-wmi.
>>
>
> Cool.
>
>
>> Drivers with persistent state will affect the global state only if
>> rfkill-input is enabled. This is required, otherwise booting with
>> wireless soft-blocked and pressing the wireless-toggle key once would
>> have no apparent effect. This special case will be removed in future
>> along with rfkill-input, in favour of a more flexible userspace daemon
>> (see Documentation/feature-removal-schedule.txt).
>>
>
> How does that work?
>
>
>> --- a/drivers/platform/x86/acer-wmi.c
>> +++ b/drivers/platform/x86/acer-wmi.c
>>
>
>
>> @@ -996,8 +995,6 @@ static struct rfkill *acer_rfkill_register(struct device *dev,
>> (void *)(unsigned long)cap);
>> if (!rfkill_dev)
>> return ERR_PTR(-ENOMEM);
>> - get_u32(&state, cap);
>> - rfkill_set_sw_state(rfkill_dev, !state);
>>
>
> That does seem persistent, I'd think? get_u32 here hits ACPI iirc.
>
>
>> diff --git a/drivers/platform/x86/hp-wmi.c b/drivers/platform/x86/hp-wmi.c
>> index 8d93114..16fffe4 100644
>> --- a/drivers/platform/x86/hp-wmi.c
>> +++ b/drivers/platform/x86/hp-wmi.c
>> @@ -422,7 +422,6 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
>> RFKILL_TYPE_WLAN,
>> &hp_wmi_rfkill_ops,
>> (void *) 0);
>> - rfkill_set_sw_state(wifi_rfkill, hp_wmi_wifi_state());
>> err = rfkill_register(wifi_rfkill);
>> if (err)
>> goto register_wifi_error;
>> @@ -433,8 +432,6 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
>> RFKILL_TYPE_BLUETOOTH,
>> &hp_wmi_rfkill_ops,
>> (void *) 1);
>> - rfkill_set_sw_state(bluetooth_rfkill,
>> - hp_wmi_bluetooth_state());
>> err = rfkill_register(bluetooth_rfkill);
>> if (err)
>> goto register_bluetooth_error;
>> @@ -445,7 +442,6 @@ static int __init hp_wmi_bios_setup(struct platform_device *device)
>> RFKILL_TYPE_WWAN,
>> &hp_wmi_rfkill_ops,
>> (void *) 2);
>> - rfkill_set_sw_state(wwan_rfkill, hp_wmi_wwan_state());
>> err = rfkill_register(wwan_rfkill);
>> if (err)
>> goto register_wwan_err;
>>
>
> Hmm. Anyone know anything about HP? That kinda looks persistent too.
>
Quite possibly. I just don't know, and it's never been treated that way
before. The old core, when I first read it, you were supposed to report
the initial state so that it knew whether it differed from the default
state. So the core could "optimise away" the initialization if the
current state was the same. Then rfkill_set_default() was added, but it
was only used in tp-acpi and then eeepc-laptop.
The counter is the sony-laptop case. That driver also hits ACPI to
query it's current state. But apparently it doesn't always power up in
a useful state, because there's a specific git commit which forces the
radios to unblock at load time.
I think this patch should preserve the existing behaviour. But the
rfkill rewrite as a whole is a good opportunity to re-check this issue.
There's only a few maintainers to contact so I don't mind doing it -
unless you were going to check with them about the rewrite anyway?
>> @@ -1200,8 +1185,20 @@ static int __init tpacpi_new_rfkill(const enum tpacpi_rfk_id id,
>> atp_rfk->id = id;
>> atp_rfk->ops = tp_rfkops;
>>
>> - rfkill_set_states(atp_rfk->rfkill, initial_sw_state,
>> - tpacpi_rfk_check_hwblock_state());
>> + initial_sw_status = (tp_rfkops->get_status)();
>> + if (initial_sw_status < 0) {
>> + printk(TPACPI_ERR
>> + "failed to read initial state for %s, error %d; "
>> + "will turn radio off\n", name, initial_sw_status);
>>
>
> That message seems wrong now, it would not turn off but impose the
> current default, I think?
>
Yes, good point.
>> /**
>> - * rfkill_set_global_sw_state - set global sw block default
>>
>
> There's a static inline in the !RFKILL case, please remove that too.
>
>
>> @@ -916,7 +885,17 @@ int __must_check rfkill_register(struct rfkill *rfkill)
>> if (rfkill->ops->poll)
>> schedule_delayed_work(&rfkill->poll_work,
>> round_jiffies_relative(POLL_INTERVAL));
>> - schedule_work(&rfkill->sync_work);
>> +
>> + if (!rfkill->persistent || rfkill_epo_lock_active) {
>> + schedule_work(&rfkill->sync_work);
>> + } else {
>> +#ifdef CONFIG_RFKILL_INPUT
>> + bool soft_blocked = !!(rfkill->state & RFKILL_BLOCK_SW);
>> +
>> + if (!atomic_read(&rfkill_input_disabled))
>> + __rfkill_switch_all(rfkill->type, soft_blocked);
>> +#endif
>> + }
>>
>
> Ah, this is the quirky backward compat code you're talking about. I
> guess we need it, although I don't particularly like it.
>
I don't like it either. The patch as a whole only makes sense because
rfkill-input is going away, so the global states will become less
important. When you use rfkill-input, you really want the individual
states to match the global ones, otherwise your user experience
suffers. When you don't use rfkill-input, the "global" states will just
be load-time defaults (once suspend is fixed).
> Looks good except for these few comments!
>
> johannes
>
Great, thanks for the feedback
next prev parent reply other threads:[~2009-06-08 11:10 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-28 15:31 [PATCH] rfkill: create useful userspace interface Johannes Berg
2009-05-28 15:44 ` [PATCH v2] " Johannes Berg
2009-05-28 15:47 ` Marcel Holtmann
2009-05-28 15:58 ` [PATCH v3] " Johannes Berg
2009-05-29 8:38 ` [PATCH v4] " Johannes Berg
2009-05-29 10:43 ` Marcel Holtmann
2009-05-31 9:13 ` [PATCH] " Alan Jenkins
2009-05-31 9:58 ` Johannes Berg
2009-05-31 12:36 ` Henrique de Moraes Holschuh
2009-05-31 13:18 ` Alan Jenkins
2009-05-31 19:01 ` Marcel Holtmann
2009-06-01 7:33 ` Johannes Berg
2009-06-01 8:17 ` Alan Jenkins
2009-06-01 12:10 ` Johannes Berg
2009-06-01 13:05 ` Alan Jenkins
2009-06-01 14:47 ` Marcel Holtmann
2009-06-01 14:57 ` Johannes Berg
2009-06-01 16:10 ` Alan Jenkins
2009-06-01 19:44 ` Marcel Holtmann
2009-06-01 22:26 ` Alan Jenkins
2009-06-02 7:38 ` Marcel Holtmann
2009-06-02 8:01 ` Johannes Berg
2009-06-02 8:18 ` Marcel Holtmann
2009-06-03 4:03 ` Henrique de Moraes Holschuh
2009-06-03 5:57 ` Marcel Holtmann
2009-06-03 21:33 ` Henrique de Moraes Holschuh
2009-06-04 4:13 ` Marcel Holtmann
2009-06-07 12:38 ` Alan Jenkins
2009-06-07 12:57 ` Henrique de Moraes Holschuh
2009-06-07 15:28 ` Alan Jenkins
2009-06-07 17:16 ` Johannes Berg
2009-06-07 17:26 ` Alan Jenkins
2009-06-08 10:14 ` [RFC] rfkill: remove set_global_sw_state() Alan Jenkins
2009-06-08 10:32 ` Johannes Berg
2009-06-08 11:10 ` Alan Jenkins [this message]
2009-06-08 11:13 ` Johannes Berg
2009-06-08 11:15 ` Alan Jenkins
2009-06-08 11:19 ` [PATCH v2] rfkill: remove set_global_sw_state Alan Jenkins
2009-06-08 11:22 ` Alan Jenkins
2009-06-08 11:24 ` [PATCH v3] " Alan Jenkins
2009-06-08 12:27 ` [PATCH v4] " Alan Jenkins
2009-06-10 1:55 ` Henrique de Moraes Holschuh
2009-06-07 15:46 ` [PATCH] rfkill: create useful userspace interface Marcel Holtmann
2009-06-07 16:04 ` Alan Jenkins
2009-06-07 16:35 ` Marcel Holtmann
2009-06-07 17:16 ` Alan Jenkins
2009-06-07 17:25 ` Johannes Berg
2009-06-10 2:05 ` Henrique de Moraes Holschuh
2009-06-10 7:13 ` Marcel Holtmann
2009-06-10 9:06 ` Alan Jenkins
2009-06-11 12:01 ` Marcel Holtmann
2009-06-11 12:56 ` Alan Jenkins
2009-06-07 17:04 ` Dan Williams
2009-06-10 2:22 ` Henrique de Moraes Holschuh
2009-06-10 7:16 ` Marcel Holtmann
2009-06-02 8:33 ` Alan Jenkins
2009-06-02 8:41 ` Marcel Holtmann
2009-06-03 4:10 ` Henrique de Moraes Holschuh
2009-06-03 6:01 ` Marcel Holtmann
2009-06-03 21:38 ` Henrique de Moraes Holschuh
2009-06-04 4:20 ` Marcel Holtmann
2009-06-03 13:03 ` Dan Williams
2009-06-03 21:40 ` Henrique de Moraes Holschuh
2009-06-04 4:24 ` Marcel Holtmann
2009-06-07 13:54 ` Henrique de Moraes Holschuh
2009-06-07 15:36 ` Marcel Holtmann
2009-06-10 2:44 ` Henrique de Moraes Holschuh
2009-06-10 7:19 ` Marcel Holtmann
2009-06-01 12:28 ` Henrique de Moraes Holschuh
2009-06-01 12:37 ` Henrique de Moraes Holschuh
2009-06-01 12:38 ` Johannes Berg
2009-06-01 12:45 ` Henrique de Moraes Holschuh
2009-06-01 12:50 ` Johannes Berg
2009-06-01 13:33 ` Henrique de Moraes Holschuh
2009-06-01 14:29 ` Johannes Berg
2009-06-01 15:36 ` Henrique de Moraes Holschuh
2009-06-01 15:37 ` Johannes Berg
2009-06-01 15:50 ` Henrique de Moraes Holschuh
2009-06-01 15:53 ` Johannes Berg
2009-06-01 17:56 ` Henrique de Moraes Holschuh
2009-06-01 19:22 ` Johannes Berg
2009-06-01 12:43 ` Johannes Berg
2009-06-01 12:49 ` Henrique de Moraes Holschuh
2009-06-01 12:53 ` Johannes Berg
2009-05-31 13:51 ` Alan Jenkins
2009-05-31 13:54 ` Johannes Berg
2009-05-31 18:22 ` Alan Jenkins
2009-05-31 19:03 ` Marcel Holtmann
2009-05-31 21:19 ` Dan Williams
2009-06-01 7:18 ` Marcel Holtmann
2009-06-01 7:27 ` Johannes Berg
2009-06-01 7:40 ` Alan Jenkins
2009-06-01 14:41 ` Marcel Holtmann
2009-06-02 8:08 ` [PATCH v5] " Johannes Berg
2009-06-02 8:33 ` Marcel Holtmann
2009-06-02 9:41 ` [PATCH v6] " Johannes Berg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4A2CF18D.4080305@tuffmail.co.uk \
--to=alan-jenkins@tuffmail.co.uk \
--cc=hmh@hmh.eng.br \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=marcel@holtmann.org \
--cc=mjg59@srcf.ucam.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).