Hi, the attached patch allows to toggle the backlight via "fblevel on/off" on a 12" pbook on and off. It registers a full backlight control although it can't handle brightness at the moment. Patch is against 2.4.22-ben2. Many thanks to Mark Vojkovich for providing the necessary information. Regards, -- Guido
--- drivers/video/riva/fbdev.c.orig 2003-09-25 14:22:24.000000000 +0200
+++ drivers/video/riva/fbdev.c 2003-10-28 15:50:08.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,26 @@
}
+#ifdef CONFIG_PMAC_BACKLIGHT
+static int riva_set_backlight_enable(int on, int level, void *data)
+{
+ struct rivafb_info *rinfo = (struct rivafb_info *)data;
+ unsigned int tmp;
+
+ tmp = rinfo->riva.PMC[0x10F0/4] & 0x7FFFFFFF;
+ rinfo->riva.PMC[0x10F0/4] = tmp;
+ tmp = rinfo->riva.PCRTC0[0x081C/4] & 0xFFFFFFFC;
+ if(on)
+ tmp |= 0x1;
+ rinfo->riva.PCRTC0[0x081C/4] = tmp;
+ 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 +2439,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:
Attachment:
signature.asc
Description: Digital signature