> 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);
signature.asc
Description: Digital signature
_______________________________________________ Nouveau mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/nouveau
