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



Reply via email to