Module Name:    src
Committed By:   jmcneill
Date:           Sat Jan  4 12:09:54 UTC 2020

Modified Files:
        src/sys/dev/fdt: pwm_backlight.c

Log Message:
If the backlight node does not have an enable gpio, set the lowest duty
cycle to turn the display off instead.


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/fdt/pwm_backlight.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/dev/fdt/pwm_backlight.c
diff -u src/sys/dev/fdt/pwm_backlight.c:1.5 src/sys/dev/fdt/pwm_backlight.c:1.6
--- src/sys/dev/fdt/pwm_backlight.c:1.5	Wed Jan  1 12:55:03 2020
+++ src/sys/dev/fdt/pwm_backlight.c	Sat Jan  4 12:09:54 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: pwm_backlight.c,v 1.5 2020/01/01 12:55:03 jmcneill Exp $ */
+/* $NetBSD: pwm_backlight.c,v 1.6 2020/01/04 12:09:54 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcne...@invisible.ca>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pwm_backlight.c,v 1.5 2020/01/01 12:55:03 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pwm_backlight.c,v 1.6 2020/01/04 12:09:54 jmcneill Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -48,6 +48,7 @@ struct pwm_backlight_softc {
 
 	u_int			*sc_levels;
 	u_int			sc_nlevels;
+	u_int			sc_curlevel;
 
 	char			*sc_levelstr;
 
@@ -131,6 +132,8 @@ pwm_backlight_attach(device_t parent, de
 		pwm_backlight_set(sc, default_level);
 	}
 
+	sc->sc_curlevel = pwm_backlight_get(sc);
+
 	pwm_backlight_sysctl_init(sc);
 	pwm_backlight_pmf_init(sc);
 }
@@ -247,12 +250,21 @@ failed:
 }
 
 static void
+pwm_backlight_enable(struct pwm_backlight_softc *sc, int enable)
+{
+	if (sc->sc_pin)
+		fdtbus_gpio_write(sc->sc_pin, enable);
+	else
+		pwm_backlight_set(sc, enable ? sc->sc_curlevel : 0);
+}
+
+static void
 pwm_backlight_display_on(device_t dev)
 {
 	struct pwm_backlight_softc * const sc = device_private(dev);
 
-	if (sc->sc_pin && sc->sc_lid_state)
-		fdtbus_gpio_write(sc->sc_pin, 1);
+	if (sc->sc_lid_state)
+		pwm_backlight_enable(sc, 1);
 }
 
 static void
@@ -260,8 +272,7 @@ pwm_backlight_display_off(device_t dev)
 {
 	struct pwm_backlight_softc * const sc = device_private(dev);
 
-	if (sc->sc_pin)
-		fdtbus_gpio_write(sc->sc_pin, 0);
+	pwm_backlight_enable(sc, 0);
 }
 
 static void
@@ -271,8 +282,7 @@ pwm_backlight_chassis_lid_open(device_t 
 
 	sc->sc_lid_state = true;
 
-	if (sc->sc_pin)
-		fdtbus_gpio_write(sc->sc_pin, 1);
+	pwm_backlight_enable(sc, 1);
 }
 
 static void
@@ -282,8 +292,7 @@ pwm_backlight_chassis_lid_close(device_t
 
 	sc->sc_lid_state = false;
 
-	if (sc->sc_pin)
-		fdtbus_gpio_write(sc->sc_pin, 0);
+	pwm_backlight_enable(sc, 0);
 }
 
 static void

Reply via email to