Re: [PATCH resend 2] x86, olpc-xo15-sci: Enable lid close wakeup control through sysfs

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 29 Nov 2011 22:24:47 +0000 (GMT)
Daniel Drake <dsd@xxxxxxxxxx> wrote:

> Like most systems, OLPC's ACPI LID switch wakes up the system when the
> lid is opened, but not when it is closed.
> 
> Under OLPC's opportunistic suspend model, the lid may be closed while
> the system was oportunistically suspended with the screen running.
> In this event, we want to wake up to turn the screen off.
> 
> Enable control of normal ACPI wakeups through lid close events through
> a new sysfs attribute "lid_wake_on_closed". When set, and when
> LID wakeups are enabled through ACPI, the system will wake up on both
> open and close lid events.
> 
> Signed-off-by: Daniel Drake <dsd@xxxxxxxxxx>
> ---
>  arch/x86/platform/olpc/olpc-xo15-sci.c |   55 ++++++++++++++++++++++++++++++++
>  1 files changed, 55 insertions(+), 0 deletions(-)
> 
> Resending after 6 weeks with no feedback.
> 
> diff --git a/arch/x86/platform/olpc/olpc-xo15-sci.c b/arch/x86/platform/olpc/olpc-xo15-sci.c
> index 2b235b7..649230c 100644
> --- a/arch/x86/platform/olpc/olpc-xo15-sci.c
> +++ b/arch/x86/platform/olpc/olpc-xo15-sci.c
> @@ -24,6 +24,50 @@
>  #define XO15_SCI_DEVICE_NAME		"OLPC XO-1.5 SCI"
>  
>  static unsigned long xo15_sci_gpe;
> +static bool lid_wake_on_close;

I'd have thought that a few code comments which describe what all this
is doing wouldn't hurt.  Oh well.

> +static int set_lid_wake_behavior(bool wake_on_close)
> +{
> +	struct acpi_object_list arg_list;
> +	union acpi_object arg;
> +	acpi_status status;
> +
> +	arg_list.count = 1;
> +	arg_list.pointer = &arg;
> +	arg.type = ACPI_TYPE_INTEGER;
> +	arg.integer.value = wake_on_close;
> +	status = acpi_evaluate_object(NULL, "\\_SB.PCI0.LID.LIDW", &arg_list,
> +				      NULL);
> +	if (ACPI_FAILURE(status)) {
> +		pr_warning(PFX "failed to set lid behaviour\n");
> +		return 1;
> +	}
> +
> +	lid_wake_on_close = wake_on_close;
> +	return 0;
> +}
> +
> +static ssize_t lid_wake_on_close_show(struct kobject *s,
> +				      struct kobj_attribute *attr, char *buf)
> +{
> +	return sprintf(buf, "%u\n", lid_wake_on_close);
> +}
> +
> +static ssize_t lid_wake_on_close_store(struct kobject *s,
> +				       struct kobj_attribute *attr,
> +				       const char *buf, size_t n)
> +{
> +	unsigned int val;
> +	if (!sscanf(buf, "%u", &val) == 1)
> +		return -EINVAL;
> +
> +	set_lid_wake_behavior(!!val);
> +	return n;
> +}

Let me fix that for you.

--- a/arch/x86/platform/olpc/olpc-xo15-sci.c~x86-olpc-xo15-sci-enable-lid-close-wakeup-control-through-sysfs-fix
+++ a/arch/x86/platform/olpc/olpc-xo15-sci.c
@@ -58,7 +58,8 @@ static ssize_t lid_wake_on_close_store(s
 				       const char *buf, size_t n)
 {
 	unsigned int val;
-	if (!sscanf(buf, "%u", &val) == 1)
+
+	if (sscanf(buf, "%u", &val) != 1)
 		return -EINVAL;
 
 	set_lid_wake_behavior(!!val);

It's kinda irritating that this will cheerfully accept bogus input of
the form "42foo".  This happens about eleven billion times in sysfs
write() handlers but afaik we've never implemented a nice
sysfs_int_from_buffer() thingy which handles all the possible errors.
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux IBM ACPI]     [Linux Power Management]     [Linux Kernel]     [Linux Laptop]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux