[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[patch] turn off backlight on 12" pbook



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 to: