[PATCH #3355] Add sysfs support for powering down the OLPC 88W8838 wireless chip.
Deepak Saxena
dsaxena at laptop.org
Fri Jun 13 18:10:42 EDT 2008
On Jun 13 2008, at 19:00, Chris Ball was caught saying:
> This uses the OLPC EC 0x35/0x25 interface.
>
> Question: is simple_strtoul() safe here?
I think the preffered way to do this is via sscanf() of
the incoming buffer as you can catch errors such as
non-integer input. simple_stroul() will just return
0 which is not what we want.
I'd also change the mode to 0400 as this is a write-only bit.
My preffered option is to make it r/w, call it wlan_enabled
and than we could check the state via the file too by storing
the current setting.
~Deepak
>
> Signed-off-by: Chris Ball <cjb at laptop.org>
> ---
> arch/x86/kernel/olpc-pm.c | 19 +++++++++++++++++++
> 1 files changed, 19 insertions(+), 0 deletions(-)
>
> diff --git a/arch/x86/kernel/olpc-pm.c b/arch/x86/kernel/olpc-pm.c
> index e99a464..9f0a565 100644
> --- a/arch/x86/kernel/olpc-pm.c
> +++ b/arch/x86/kernel/olpc-pm.c
> @@ -43,6 +43,8 @@
> /* These, and the battery EC commands, should be in an olpc.h. */
> #define EC_WRITE_SCI_MASK 0x1b
> #define EC_READ_SCI_MASK 0x1c
> +#define EC_WLAN_ENTER_RESET 0x35
> +#define EC_WLAN_LEAVE_RESET 0x25
>
> extern void do_olpc_suspend_lowlevel(void);
>
> @@ -661,6 +663,19 @@ static ssize_t wackup_show(struct kobject *s, struct kobj_attribute *attr,
> return sprintf(buf, "%s\n", wackup_source ? wackup_source : "none");
> }
>
> +static ssize_t wlanreset_execute(struct kobject *s, struct kobj_attribute *attr,
> + const char *buf, size_t n)
> +{
> + unsigned int val = simple_strtoul(buf, NULL, 0);
> + if (val == 1) {
> + olpc_ec_cmd(EC_WLAN_ENTER_RESET, NULL, 0, NULL, 0);
> + }
> + else if (val == 0) {
> + olpc_ec_cmd(EC_WLAN_LEAVE_RESET, NULL, 0, NULL, 0);
> + }
> + return n;
> +}
> +
> static struct kobj_attribute control_attr =
> __ATTR(olpc-pm, 0644, control_show, control_store);
>
> @@ -670,10 +685,14 @@ static struct kobj_attribute test_attr =
> static struct kobj_attribute wackup_attr =
> __ATTR(wakeup-source, 0400, wackup_show, NULL);
>
> +static struct kobj_attribute wlanreset_attr =
> + __ATTR(wlan-reset, 0644, NULL, wlanreset_execute);
> +
> static struct attribute * olpc_attributes[] = {
> &control_attr.attr,
> &test_attr.attr,
> &wackup_attr.attr,
> + &wlanreset_attr.attr,
> NULL
> };
>
> --
> 1.5.4.3
--
Deepak Saxena <dsaxena at laptop.org>
More information about the Devel
mailing list