--- ../benh-rsync-clean/drivers/video/riva/fbdev.c	2004-01-08 00:57:53.000000000 +0100
+++ drivers/video/riva/fbdev.c	2004-01-13 20:17:28.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 +2014,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 +2267,29 @@
 }
 
 
+#ifdef CONFIG_PMAC_BACKLIGHT
+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] & 0x0000FFFF;
+	tmp_pcrt = rinfo->riva.PCRTC0[0x081C/4] & 0xFFFFFFFC;
+	if(on && (level > BACKLIGHT_OFF)) {
+		tmp_pcrt |= 0x1;
+		tmp_pmc |= (1 << 31); // backlight bit
+		tmp_pmc |= (351 + (level * 53)) << 16; // level
+	}
+	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 +2446,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:
