Re: [PATCH] ACPI video: Don't export sysfs backlight interface if query _BCL fail

2007-05-06 Thread Luming Yu

Ack!


On 4/27/07, Danny Kukawka <[EMAIL PROTECTED]> wrote:

Hi,

currently the acpi video module export the backlight interface to sysfs also
if acpi_video_device_lcd_query_levels() fails to read _BLC method (e.g.
because the method is not available). In this case the userspace don't know
which brightness level are supported and can't set a brightness level (echo
return with: "write error: Invalid Argument"). This happend e.g. on a ASUS
RF1 (correct supported by the asus-laptop module).

The video module should not export the backlight interface if query _BLC fail,
because you can't set anything from userspace and this make it useless.

See also: http://bugzilla.kernel.org/show_bug.cgi?id=8375

Danny

From: Danny Kukawka <[EMAIL PROTECTED]>
Subject: ACPI video: Don't export sysfs backlight interface if query _BLC fail

if qeuery _BCL fail (e.g. because the method is missing in BIOS) don't
export the backlight interface to sysfs.

Signed-off-by: Danny Kukawka <[EMAIL PROTECTED]>
---
 video.c |   78 --
 1 file changed, 41 insertions(+), 37 deletions(-)

--- linux-2.6.21/drivers/acpi/video.c   2007-04-26 13:50:51.0 +0200
+++ linux-2.6.21/drivers/acpi/video.c   2007-04-26 13:50:53.0 +0200
@@ -531,7 +531,6 @@

-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] ACPI video: Don't export sysfs backlight interface if query _BCL fail

2007-04-27 Thread Danny Kukawka
Hi,

currently the acpi video module export the backlight interface to sysfs also
if acpi_video_device_lcd_query_levels() fails to read _BLC method (e.g. 
because the method is not available). In this case the userspace don't know 
which brightness level are supported and can't set a brightness level (echo 
return with: "write error: Invalid Argument"). This happend e.g. on a ASUS
RF1 (correct supported by the asus-laptop module).

The video module should not export the backlight interface if query _BLC fail,
because you can't set anything from userspace and this make it useless.

See also: http://bugzilla.kernel.org/show_bug.cgi?id=8375

Danny

From: Danny Kukawka <[EMAIL PROTECTED]>
Subject: ACPI video: Don't export sysfs backlight interface if query _BLC fail

if qeuery _BCL fail (e.g. because the method is missing in BIOS) don't 
export the backlight interface to sysfs.

Signed-off-by: Danny Kukawka <[EMAIL PROTECTED]>
---
 video.c |   78 --
 1 file changed, 41 insertions(+), 37 deletions(-)

--- linux-2.6.21/drivers/acpi/video.c   2007-04-26 13:50:51.0 +0200
+++ linux-2.6.21/drivers/acpi/video.c   2007-04-26 13:50:53.0 +0200
@@ -531,7 +531,6 @@
 
 static void acpi_video_device_find_cap(struct acpi_video_device *device)
 {
-   acpi_integer status;
acpi_handle h_dummy1;
int i;
u32 max_level = 0;
@@ -565,50 +564,55 @@
device->cap._DSS = 1;
}
 
-   status = acpi_video_device_lcd_query_levels(device, &obj);
+   if (ACPI_SUCCESS(acpi_video_device_lcd_query_levels(device, &obj))) {
 
-   if (obj && obj->type == ACPI_TYPE_PACKAGE && obj->package.count >= 2) {
-   int count = 0;
-   union acpi_object *o;
-
-   br = kzalloc(sizeof(*br), GFP_KERNEL);
-   if (!br) {
-   printk(KERN_ERR "can't allocate memory\n");
-   } else {
-   br->levels = kmalloc(obj->package.count *
-sizeof *(br->levels), GFP_KERNEL);
-   if (!br->levels)
-   goto out;
-
-   for (i = 0; i < obj->package.count; i++) {
-   o = (union acpi_object *)&obj->package.
-   elements[i];
-   if (o->type != ACPI_TYPE_INTEGER) {
-   printk(KERN_ERR PREFIX "Invalid 
data\n");
-   continue;
-   }
-   br->levels[count] = (u32) o->integer.value;
-   if (br->levels[count] > max_level)
-   max_level = br->levels[count];
-   count++;
-   }
- out:
-   if (count < 2) {
-   kfree(br->levels);
-   kfree(br);
+   if (obj->package.count >= 2) {
+   int count = 0;
+   union acpi_object *o;
+
+   br = kzalloc(sizeof(*br), GFP_KERNEL);
+   if (!br) {
+   printk(KERN_ERR "can't allocate memory\n");
} else {
-   br->count = count;
-   device->brightness = br;
-   ACPI_DEBUG_PRINT((ACPI_DB_INFO,
- "found %d brightness 
levels\n",
- count));
+   br->levels = kmalloc(obj->package.count *
+sizeof *(br->levels), 
GFP_KERNEL);
+   if (!br->levels) 
+   goto out;
+
+   for (i = 0; i < obj->package.count; i++) {
+   o = (union acpi_object *)&obj->package.
+   elements[i];
+   if (o->type != ACPI_TYPE_INTEGER) {
+   printk(KERN_ERR PREFIX "Invalid 
data\n");
+   continue;
+   }
+   br->levels[count] = (u32) 
o->integer.value;
+
+   if (br->levels[count] > max_level)
+   max_level = br->levels[count];
+   count++;
+   }
+ out:
+   if (count < 2) {
+   kfree(br->levels);
+   kfree(br);
+