> However.  There's also the platform-specific modules (thinkpad etc) that
> will provide their own backlight methods if the standard ACPI mechanism
> isn't available.  I didn't see any immediately obvious way of knowing
> whether or not they were being provided.
> 
> I'm not too certain the best way to deal with this, any ideas? :)

See attached patch, which prevents nouveau registering a backlight control if 
ACPI already provides one. If there are no glaring errors in the 
code/implementation then I would like to submit it.

Dealing with platform-specific modules is tricky because it looks like nouveau 
initialises itself quite early on in the boot process:

[aa...@jules ~]$ dmesg | grep ACPI
...
[    3.359377] nouveau 0000:01:00.0: power state changed by ACPI to D0
[    3.359560] nouveau 0000:01:00.0: power state changed by ACPI to D0
[    4.860678] [drm] nouveau 0000:01:00.0: Detected ACPI backlight support, not 
registering control
[   14.206997] ACPI: WMI: Skipping duplicate GUID 
05901221-D566-11D1-B2F0-00A0C9062910
[   14.207693] ACPI: WMI: Mapper loaded
[   17.686907] thinkpad_acpi: ThinkPad ACPI Extras v0.24
[   17.689517] thinkpad_acpi: This ThinkPad has standard ACPI backlight 
brightness control, supported by the ACPI video driver
[   17.756039] thinkpad_acpi: Standard ACPI backlight interface available, not 
loading native one.

My suggestion would be that it is the responsibility of user-space to select an 
appropriate ACPI backlight control.

/Aaron
--- kernel-2.6.35.fc14.orig/drivers/gpu/drm/nouveau/nouveau_state.c	2010-11-02 13:04:25.433000083 +0100
+++ kernel-2.6.35.fc14.new/drivers/gpu/drm/nouveau/nouveau_state.c	2010-11-02 15:18:26.116693011 +0100
@@ -23,6 +23,7 @@
  * DEALINGS IN THE SOFTWARE.
  */
 
+#include <linux/acpi.h>
 #include <linux/swab.h>
 #include <linux/slab.h>
 #include "drmP.h"
@@ -600,9 +601,13 @@ nouveau_card_init(struct drm_device *dev
 			goto out_irq;
 	}
 
+	if (acpi_video_backlight_support())
+		NV_INFO(dev, "Detected ACPI backlight support, not registering control\n");
+	else {
 	ret = nouveau_backlight_init(dev);
-	if (ret)
-		NV_ERROR(dev, "Error %d registering backlight\n", ret);
+		if (ret)
+			NV_ERROR(dev, "Error %d registering backlight\n", ret);
+	}
 
 	nouveau_fbcon_init(dev);
 	drm_kms_helper_poll_init(dev);

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Nouveau mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/nouveau

Reply via email to