This patch is obsolete, use rivafb-backlight.diff instead.

Backlight control for the 12" Powerbook G4 with NVidia NV17:
Add a backlight_controller to turn of the backlight, no brightness control yet
due to missing documentation. This has so far only been tested on the above
configuration. Please let me know if it works/doesn't work on other
{Power,i}Books with NVidia chips.
 -- Guido Guenther <agx@sigxcpu.org>

--- ../benh-rsync-clean/drivers/video/riva/fbdev.c	2004-01-08 00:57:53.000000000 +0100
+++ drivers/video/riva/fbdev.c	2004-01-12 19:46:19.000000000 +0100
@@ -56,6 +56,10 @@
 #error This driver requires PCI support.
 #endif
 
+#ifdef CONFIG_PMAC_BACKLIGHT
+#include <asm/backlight.h>
+#endif
+
 #include <linux/adb.h>
 #include <linux/pmu.h>
 #include <asm/prom.h>
@@ -123,7 +127,14 @@
 extern void riva_setup_accel(struct rivafb_info *rinfo);
 extern inline void wait_for_idle(struct rivafb_info *rinfo);
 
-
+#ifdef CONFIG_PMAC_BACKLIGHT
+static int riva_set_backlight_enable(int on, int level, void *data);
+static int riva_set_backlight_level(int level, void *data);
+static struct backlight_controller riva_backlight_controller = {
+	riva_set_backlight_enable,
+	riva_set_backlight_level
+};
+#endif /* CONFIG_PMAC_BACKLIGHT */
 
 /* ------------------------------------------------------------------------- *
  *
@@ -1999,6 +2010,14 @@
 	SEQout(rinfo, 0x01, tmp);
 	CRTCout(rinfo, 0x1a, vesa);
 
+#ifdef CONFIG_PMAC_BACKLIGHT
+	if ( rinfo->got_dfpinfo && _machine == _MACH_Pmac) {
+		set_backlight_enable(!blank);
+		return;
+	}
+#endif
+
+
 	DPRINTK("EXIT\n");
 }
 
@@ -2244,6 +2263,29 @@
 }
 
 
+#ifdef CONFIG_PMAC_BACKLIGHT
+/* we don't know how to handle level */
+static int riva_set_backlight_enable(int on, int level, void *data)
+{
+	struct rivafb_info *rinfo = (struct rivafb_info *)data;
+	U032 tmp_pcrt, tmp_pmc;
+
+	tmp_pmc = rinfo->riva.PMC[0x10F0/4] & 0x7FFFFFFF;
+	tmp_pcrt = rinfo->riva.PCRTC0[0x081C/4] & 0xFFFFFFFC;
+	if(on && (level > BACKLIGHT_OFF)) {
+		tmp_pcrt |= 0x1;
+		tmp_pmc |= (1 << 31);
+	}
+	rinfo->riva.PCRTC0[0x081C/4] = tmp_pcrt;
+	rinfo->riva.PMC[0x10F0/4] = tmp_pmc;
+	return 0;
+}
+
+static int riva_set_backlight_level(int level, void *data)
+{
+	return riva_set_backlight_enable(1, level, data);
+}
+#endif /* CONFIG_PMAC_BACKLIGHT */
 
 /* ------------------------------------------------------------------------- *
  *
@@ -2400,6 +2442,12 @@
 		rinfo->ram_amount / (1024 * 1024),
 		rinfo->fb_base_phys);
 
+#ifdef CONFIG_PMAC_BACKLIGHT
+	if (rinfo->got_dfpinfo && _machine == _MACH_Pmac)
+	register_backlight_controller(&riva_backlight_controller,
+				      			rinfo, "mnca");
+#endif
+
 	return 0;
 
 err_out_load_state:
