Module Name:    src
Committed By:   nat
Date:           Sat Sep 14 20:59:46 UTC 2024

Modified Files:
        src/sys/arch/mac68k/dev: aed.c pm_direct.c pm_direct.h

Log Message:
Add support for brightness control on Powerbook 1xx.


To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/mac68k/dev/aed.c
cvs rdiff -u -r1.32 -r1.33 src/sys/arch/mac68k/dev/pm_direct.c
cvs rdiff -u -r1.1 -r1.2 src/sys/arch/mac68k/dev/pm_direct.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mac68k/dev/aed.c
diff -u src/sys/arch/mac68k/dev/aed.c:1.39 src/sys/arch/mac68k/dev/aed.c:1.40
--- src/sys/arch/mac68k/dev/aed.c:1.39	Wed Jun  5 11:01:47 2024
+++ src/sys/arch/mac68k/dev/aed.c	Sat Sep 14 20:59:45 2024
@@ -1,6 +1,9 @@
-/*	$NetBSD: aed.c,v 1.39 2024/06/05 11:01:47 nat Exp $	*/
+/*	$NetBSD: aed.c,v 1.40 2024/09/14 20:59:45 nat Exp $	*/
 
 /*
+ * Copyright (c) 2024 Nathanial Sloss <nathanialsl...@yahoo.com.au>
+ * All rights reserved.
+ *
  * Copyright (C) 1994	Bradley A. Grantham
  * All rights reserved.
  *
@@ -26,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aed.c,v 1.39 2024/06/05 11:01:47 nat Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aed.c,v 1.40 2024/09/14 20:59:45 nat Exp $");
 
 #include "opt_adb.h"
 
@@ -48,6 +51,11 @@ __KERNEL_RCSID(0, "$NetBSD: aed.c,v 1.39
 #include <mac68k/dev/adbvar.h>
 #include <mac68k/dev/aedvar.h>
 #include <mac68k/dev/akbdvar.h>
+#include <mac68k/dev/pm_direct.h>
+
+#define BRIGHTNESS_MAX	31
+#define BRIGHTNESS_MIN	0
+#define BRIGHTNESS_STEP	4
 
 /*
  * Function declarations.
@@ -60,11 +68,15 @@ static void	aed_dokeyupdown(adb_event_t 
 static void	aed_handoff(adb_event_t *);
 static void	aed_enqevent(adb_event_t *);
 
+static void	aed_brightness_down(device_t);
+static void	aed_brightness_up(device_t);
+
 /*
  * Local variables.
  */
 static struct aed_softc *aed_sc;
 static int aed_options = 0 | AED_MSEMUL;
+static int brightness = BRIGHTNESS_MAX;
 
 /* Driver definition */
 CFATTACH_DECL_NEW(aed, sizeof(struct aed_softc),
@@ -139,6 +151,11 @@ aedattach(device_t parent, device_t self
 
 	aed_sc = sc;
 
+	pmf_event_register(self, PMFE_DISPLAY_BRIGHTNESS_UP,
+	    aed_brightness_up, TRUE);
+	pmf_event_register(self, PMFE_DISPLAY_BRIGHTNESS_DOWN,
+	    aed_brightness_down, TRUE);
+
 	printf("ADB Event device\n");
 
 	return;
@@ -268,6 +285,12 @@ aed_emulate_mouse(adb_event_t *event)
 			microtime(&new_event.timestamp);
 			aed_handoff(&new_event);
 			break;
+		case ADBK_KEYUP(ADBK_UP):
+			pmf_event_inject(NULL, PMFE_DISPLAY_BRIGHTNESS_UP);
+			break;
+		case ADBK_KEYUP(ADBK_DOWN):
+			pmf_event_inject(NULL, PMFE_DISPLAY_BRIGHTNESS_DOWN);
+			break;
 		case ADBK_KEYUP(ADBK_SHIFT):
 		case ADBK_KEYDOWN(ADBK_SHIFT):
 		case ADBK_KEYUP(ADBK_CONTROL):
@@ -628,3 +651,33 @@ aedkqfilter(dev_t dev, struct knote *kn)
 
 	return (0);
 }
+
+static void
+aed_brightness_down(device_t dev)
+{
+	int level, step;
+
+	level = brightness;
+	if (level <= 4) 	 /* logarithmic brightness curve. */
+		step = 1;
+	else
+		step = BRIGHTNESS_STEP;
+
+	level = uimax(BRIGHTNESS_MIN, level - step);
+	brightness = pm_set_brightness(level);
+}
+
+static void
+aed_brightness_up(device_t dev)
+{
+	int level, step;
+
+	level = brightness;
+	if (level <= 4) 	 /* logarithmic brightness curve. */
+		step = 1;
+	else
+		step = BRIGHTNESS_STEP;
+
+	level = uimin(BRIGHTNESS_MAX, level + step);
+	brightness = pm_set_brightness(level);
+}

Index: src/sys/arch/mac68k/dev/pm_direct.c
diff -u src/sys/arch/mac68k/dev/pm_direct.c:1.32 src/sys/arch/mac68k/dev/pm_direct.c:1.33
--- src/sys/arch/mac68k/dev/pm_direct.c:1.32	Sun Jun  2 13:28:45 2024
+++ src/sys/arch/mac68k/dev/pm_direct.c	Sat Sep 14 20:59:45 2024
@@ -1,6 +1,9 @@
-/*	$NetBSD: pm_direct.c,v 1.32 2024/06/02 13:28:45 andvar Exp $	*/
+/*	$NetBSD: pm_direct.c,v 1.33 2024/09/14 20:59:45 nat Exp $	*/
 
 /*
+ * Copyright (c) 2024 Nathanial Sloss <nathanialsl...@yahoo.com.au>
+ * All rights reserved.
+ *
  * Copyright (C) 1997 Takashi Hamada
  * All rights reserved.
  *
@@ -32,7 +35,7 @@
 /* From: pm_direct.c 1.3 03/18/98 Takashi Hamada */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pm_direct.c,v 1.32 2024/06/02 13:28:45 andvar Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pm_direct.c,v 1.33 2024/09/14 20:59:45 nat Exp $");
 
 #include "opt_adb.h"
 
@@ -845,18 +848,8 @@ pm_intr_pm2(void *arg)
 			rval = pm_pmgrop_pm2(&pmdata);
 			pm_printerr("#33", rval, pmdata.num_data, pmdata.data);
 */
-			/* this is an experimental code */
-			pmdata.command = 0x41;
-			pmdata.num_data = 1;
-			pmdata.s_buf = pmdata.data;
-			pmdata.r_buf = pmdata.data;
-			pm_LCD_brightness = 0x7f - pm_LCD_brightness / 2;
-			if (pm_LCD_brightness < 0x25)
-				pm_LCD_brightness = 0x25;
-			if (pm_LCD_brightness > 0x5a)
-				pm_LCD_brightness = 0x7f;
-			pmdata.data[0] = pm_LCD_brightness;
-			rval = pm_pmgrop_pm2(&pmdata);
+			pm_LCD_brightness =
+			    pm_set_brightness(pm_LCD_brightness);
 			break;
 		case 0x10:			/* ADB data that were requested by TALK command */
 		case 0x14:
@@ -1158,3 +1151,42 @@ pm_adb_poll_next_device_pm1(PMData *pmda
 	tmp_pmdata.data[2] = 0x00;
 	pmgrop(&tmp_pmdata);
 }
+u_int
+pm_set_brightness(u_int brightness)
+{
+	PMData pmdata;
+
+	pmdata.num_data = 1;
+	pmdata.s_buf = pmdata.data;
+	pmdata.r_buf = pmdata.data;
+
+	switch (pmHardware) {
+	case PM_HW_PB5XX:
+		/* this is an experimental code */
+		pmdata.command = 0x41;
+		brightness = 0x7f - brightness / 2;
+		if (brightness < 0x25)
+			brightness = 0x25;
+		if (brightness > 0x5a)
+			brightness = 0x7f;
+		pmdata.data[0] = brightness;
+		(void)pm_pmgrop_pm2(&pmdata);
+		break;
+	case PM_HW_PB1XX:
+		/* this is an experimental code also */
+		pmdata.command = 0x40;
+		if ((int)brightness < 0)
+			brightness = 0;
+		if ((int)brightness > 31)
+			brightness = 31;
+		pmdata.data[0] = 31 - brightness;
+		(void)pm_pmgrop_pm1(&pmdata);
+		break;
+	default:
+
+		return 0;
+		break;
+	}
+
+	return brightness;
+}

Index: src/sys/arch/mac68k/dev/pm_direct.h
diff -u src/sys/arch/mac68k/dev/pm_direct.h:1.1 src/sys/arch/mac68k/dev/pm_direct.h:1.2
--- src/sys/arch/mac68k/dev/pm_direct.h:1.1	Tue Apr  8 03:11:38 1997
+++ src/sys/arch/mac68k/dev/pm_direct.h	Sat Sep 14 20:59:45 2024
@@ -1,6 +1,9 @@
-/*	$NetBSD: pm_direct.h,v 1.1 1997/04/08 03:11:38 scottr Exp $	*/
+/*	$NetBSD: pm_direct.h,v 1.2 2024/09/14 20:59:45 nat Exp $	*/
 
 /*
+ * Copyright (c) 2024 Nathanial Sloss <nathanialsl...@yahoo.com.au>
+ * All rights reserved.
+ *
  * Copyright (C) 1997 Takashi Hamada
  * All rights reserved.
  *
@@ -45,3 +48,4 @@ typedef	struct	{
 }	PMData;
 
 int		pmgrop(PMData *);
+u_int		pm_set_brightness(u_int);

Reply via email to