Module Name: src Committed By: jmcneill Date: Thu May 10 13:11:21 UTC 2018
Modified Files: src/sys/dev/fdt: pwm_backlight.c Log Message: Keep the backlight off while the lid is closed. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 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.3 src/sys/dev/fdt/pwm_backlight.c:1.4 --- src/sys/dev/fdt/pwm_backlight.c:1.3 Mon May 7 12:58:58 2018 +++ src/sys/dev/fdt/pwm_backlight.c Thu May 10 13:11:21 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: pwm_backlight.c,v 1.3 2018/05/07 12:58:58 jmcneill Exp $ */ +/* $NetBSD: pwm_backlight.c,v 1.4 2018/05/10 13:11:21 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.3 2018/05/07 12:58:58 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: pwm_backlight.c,v 1.4 2018/05/10 13:11:21 jmcneill Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -50,6 +50,8 @@ struct pwm_backlight_softc { u_int sc_nlevels; char *sc_levelstr; + + bool sc_lid_state; }; static int pwm_backlight_match(device_t, cfdata_t, void *); @@ -122,6 +124,8 @@ pwm_backlight_attach(device_t parent, de aprint_verbose(">"); aprint_normal("\n"); + sc->sc_lid_state = true; + if (of_getprop_uint32(phandle, "default-brightness-level", &default_level) == 0) { /* set the default level now */ pwm_backlight_set(sc, default_level); @@ -247,7 +251,7 @@ pwm_backlight_display_on(device_t dev) { struct pwm_backlight_softc * const sc = device_private(dev); - if (sc->sc_pin) + if (sc->sc_pin && sc->sc_lid_state) fdtbus_gpio_write(sc->sc_pin, 1); } @@ -261,6 +265,28 @@ pwm_backlight_display_off(device_t dev) } static void +pwm_backlight_chassis_lid_open(device_t dev) +{ + struct pwm_backlight_softc * const sc = device_private(dev); + + sc->sc_lid_state = true; + + if (sc->sc_pin) + fdtbus_gpio_write(sc->sc_pin, 1); +} + +static void +pwm_backlight_chassis_lid_close(device_t dev) +{ + struct pwm_backlight_softc * const sc = device_private(dev); + + sc->sc_lid_state = false; + + if (sc->sc_pin) + fdtbus_gpio_write(sc->sc_pin, 0); +} + +static void pwm_backlight_display_brightness_up(device_t dev) { struct pwm_backlight_softc * const sc = device_private(dev); @@ -289,6 +315,10 @@ pwm_backlight_pmf_init(struct pwm_backli pwm_backlight_display_on, true); pmf_event_register(sc->sc_dev, PMFE_DISPLAY_OFF, pwm_backlight_display_off, true); + pmf_event_register(sc->sc_dev, PMFE_CHASSIS_LID_OPEN, + pwm_backlight_chassis_lid_open, true); + pmf_event_register(sc->sc_dev, PMFE_CHASSIS_LID_CLOSE, + pwm_backlight_chassis_lid_close, true); pmf_event_register(sc->sc_dev, PMFE_DISPLAY_BRIGHTNESS_UP, pwm_backlight_display_brightness_up, true); pmf_event_register(sc->sc_dev, PMFE_DISPLAY_BRIGHTNESS_DOWN,