package xserver-xorg-video-intel tags 651741 + patch quit Kalle Olavi Niemitalo <kon@iki.fi> writes: > (b) PCI subsystem. Here, lspci -vn shows: > > 00:02.0 0300: 8086:0046 (rev 02) (prog-if 00 [VGA controller]) > Subsystem: 104d:907c > > intel_driver.h defines the SUBVENDOR_ID and SUBSYS_ID macros, > which intel_output_backlight_init could use on > intel_get_screen_private(output->scrn)->PciInfo. I implemented this in the following patch. It makes xserver-xorg-video-intel correctly use intel_backlight on my Sony VAIO VPCYA1V9E, so that gnome-power-manager can then control the brightness. I have not tested on other computers, especially not on other VAIO models. Perhaps the upstream maintainer will eventually choose a different solution; but until then, I think including this patch in the Debian package would help VAIO users.
Index: xserver-xorg-video-intel-2.17.0/src/intel_display.c
===================================================================
--- xserver-xorg-video-intel-2.17.0.orig/src/intel_display.c 2012-01-15 15:38:03.000000000 +0200
+++ xserver-xorg-video-intel-2.17.0/src/intel_display.c 2012-01-15 15:56:32.000000000 +0200
@@ -118,7 +118,8 @@
#define BACKLIGHT_CLASS "/sys/class/backlight"
/*
- * List of available kernel interfaces in priority order
+ * List of available kernel interfaces in priority order.
+ * May be overridden by a model-specific workaround.
*/
static const char *backlight_interfaces[] = {
"asus-laptop",
@@ -240,28 +241,55 @@
return max;
}
+static Bool
+intel_output_backlight_probe(xf86OutputPtr output, const char *iface)
+{
+ struct intel_output *intel_output = output->driver_private;
+ char path[BACKLIGHT_PATH_LEN];
+ struct stat buf;
+
+ sprintf(path, "%s/%s", BACKLIGHT_CLASS, iface);
+ if (!stat(path, &buf)) {
+ intel_output->backlight_iface = iface;
+ intel_output->backlight_max = intel_output_backlight_get_max(output);
+ if (intel_output->backlight_max > 0) {
+ intel_output->backlight_active_level = intel_output_backlight_get(output);
+ xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
+ "found backlight control interface %s\n", path);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
static void
intel_output_backlight_init(xf86OutputPtr output)
{
struct intel_output *intel_output = output->driver_private;
+ intel_screen_private *intel = intel_get_screen_private(output->scrn);
int i;
- for (i = 0; backlight_interfaces[i] != NULL; i++) {
- char path[BACKLIGHT_PATH_LEN];
- struct stat buf;
+ /* Debian bug 651741: With Linux 3.1.0 on Sony VAIO VPCYA1V9E,
+ * both acpi_video0 and intel_backlight exist and can be
+ * adjusted, but only intel_backlight affects the display.
+ */
+ if (VENDOR_ID(intel->PciInfo) == 0x8086 /* Intel */
+ && DEVICE_ID(intel->PciInfo) == PCI_CHIP_IRONLAKE_M_G
+ && CHIP_REVISION(intel->PciInfo) == 0x02
+ && SUBVENDOR_ID(intel->PciInfo) == 0x104d /* Sony */
+ && SUBSYS_ID(intel->PciInfo) == 0x907c) {
+ xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
+ "will prefer intel_backlight on this Sony VAIO model\n");
+ if (intel_output_backlight_probe(output, "intel_backlight"))
+ return;
+ }
- sprintf(path, "%s/%s", BACKLIGHT_CLASS, backlight_interfaces[i]);
- if (!stat(path, &buf)) {
- intel_output->backlight_iface = backlight_interfaces[i];
- intel_output->backlight_max = intel_output_backlight_get_max(output);
- if (intel_output->backlight_max > 0) {
- intel_output->backlight_active_level = intel_output_backlight_get(output);
- xf86DrvMsg(output->scrn->scrnIndex, X_INFO,
- "found backlight control interface %s\n", path);
- return;
- }
- }
+ for (i = 0; backlight_interfaces[i] != NULL; i++) {
+ if (intel_output_backlight_probe(output, backlight_interfaces[i]))
+ return;
}
+
intel_output->backlight_iface = NULL;
}
Attachment:
pgp6sRvh8UZTj.pgp
Description: PGP signature