Module Name:    src
Committed By:   jmcneill
Date:           Tue Jan 23 00:13:37 UTC 2024

Modified Files:
        src/sys/arch/evbppc/include: wii.h
        src/sys/arch/evbppc/wii/dev: wiifb.c

Log Message:
wii: Use screen dimming register for screen blanking.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/evbppc/include/wii.h
cvs rdiff -u -r1.3 -r1.4 src/sys/arch/evbppc/wii/dev/wiifb.c

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/evbppc/include/wii.h
diff -u src/sys/arch/evbppc/include/wii.h:1.3 src/sys/arch/evbppc/include/wii.h:1.4
--- src/sys/arch/evbppc/include/wii.h:1.3	Mon Jan 22 21:28:15 2024
+++ src/sys/arch/evbppc/include/wii.h	Tue Jan 23 00:13:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: wii.h,v 1.3 2024/01/22 21:28:15 jmcneill Exp $ */
+/* $NetBSD: wii.h,v 1.4 2024/01/23 00:13:37 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2024 Jared McNeill <jmcne...@invisible.ca>
@@ -101,6 +101,10 @@
 #define PI_IRQ_HOLLYWOOD		14
 
 /* Hollywood registers */
+#define HW_VIDIM			(HOLLYWOOD_PRIV_BASE + 0x01c)
+#define  VIDIM_E			__BIT(7)
+#define  VIDIM_Y			__BITS(5,3)
+#define  VIDIM_C			__BITS(2,0)
 #define HW_PPCIRQFLAGS			(HOLLYWOOD_BASE + 0x030)
 #define HW_PPCIRQMASK			(HOLLYWOOD_BASE + 0x034)
 #define HW_ARMIRQFLAGS			(HOLLYWOOD_PRIV_BASE + 0x038)

Index: src/sys/arch/evbppc/wii/dev/wiifb.c
diff -u src/sys/arch/evbppc/wii/dev/wiifb.c:1.3 src/sys/arch/evbppc/wii/dev/wiifb.c:1.4
--- src/sys/arch/evbppc/wii/dev/wiifb.c:1.3	Mon Jan 22 23:07:43 2024
+++ src/sys/arch/evbppc/wii/dev/wiifb.c	Tue Jan 23 00:13:37 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: wiifb.c,v 1.3 2024/01/22 23:07:43 jmcneill Exp $ */
+/* $NetBSD: wiifb.c,v 1.4 2024/01/23 00:13:37 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2024 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wiifb.c,v 1.3 2024/01/22 23:07:43 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wiifb.c,v 1.4 2024/01/23 00:13:37 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -118,7 +118,6 @@ static void	wiifb_attach(device_t, devic
 static void	wiifb_init(struct wiifb_softc *);
 static void	wiifb_set_mode(struct wiifb_softc *, uint8_t, bool);
 static void	wiifb_set_fb(struct wiifb_softc *);
-static void	wiifb_set_picconf(struct wiifb_softc *, u_int, bool);
 
 static int	wiifb_ioctl(void *, void *, u_long, void *, int, lwp_t *);
 static paddr_t	wiifb_mmap(void *, void *, off_t, int);
@@ -203,6 +202,7 @@ static void
 wiifb_set_mode(struct wiifb_softc *sc, uint8_t format, bool interlaced)
 {
 	u_int modeidx;
+	u_int strides, reads;
 
 	modeidx = WIIFB_MODE_INDEX(format, interlaced);
 	if (modeidx >= WIIFB_NMODES || wiifb_modes[modeidx].name == NULL) {
@@ -238,7 +238,11 @@ wiifb_set_mode(struct wiifb_softc *sc, u
 	}
 
 	/* Picture configuration */
-	wiifb_set_picconf(sc, sc->sc_curmode->width, interlaced);
+	strides = (sc->sc_curmode->width * 2) / (interlaced ? 16 : 32);
+	reads = (sc->sc_curmode->width * 2) / 32;
+	WR2(sc, VI_PICCONF,
+	    __SHIFTIN(strides, VI_PICCONF_STRIDES) |
+	    __SHIFTIN(reads, VI_PICCONF_READS));
 
 	/* Horizontal scaler configuration */
 	if (interlaced) {
@@ -278,18 +282,6 @@ wiifb_set_fb(struct wiifb_softc *sc)
 	WR4(sc, VI_BFBR, 0);
 }
 
-static void
-wiifb_set_picconf(struct wiifb_softc *sc, u_int width, bool interlaced)
-{
-	u_int strides, reads;
-
-	strides = (width * 2) / (interlaced ? 16 : 32);
-	reads = (width * 2) / 32;
-	WR2(sc, VI_PICCONF,
-	    __SHIFTIN(strides, VI_PICCONF_STRIDES) |
-	    __SHIFTIN(reads, VI_PICCONF_READS));
-}
-
 static int
 wiifb_ioctl(void *v, void *vs, u_long cmd, void *data, int flag, lwp_t *l)
 {
@@ -328,11 +320,12 @@ wiifb_ioctl(void *v, void *vs, u_long cm
 		video = *(u_int *)data;
 		switch (video) {
 		case WSDISPLAYIO_VIDEO_OFF:
-			wiifb_set_picconf(sc, 0, sc->sc_interlaced);
+			out32(HW_VIDIM, __SHIFTIN(7, VIDIM_Y) |
+					__SHIFTIN(7, VIDIM_C) |
+					VIDIM_E);
 			return 0;
 		case WSDISPLAYIO_VIDEO_ON:
-			wiifb_set_picconf(sc, sc->sc_curmode->width,
-			    sc->sc_interlaced);
+			out32(HW_VIDIM, 0);
 			return 0;
 		default:
 			return EINVAL;

Reply via email to