Module Name:    src
Committed By:   ryo
Date:           Fri Jan  1 03:07:51 UTC 2021

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

Log Message:
- remove unnecessary code
- handle "enable-gpios" property, and enable/disable GPIOs in 
pwmregulator_enable()

pointed out by thorpej@, thanks


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/fdt/pwmregulator.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/pwmregulator.c
diff -u src/sys/dev/fdt/pwmregulator.c:1.1 src/sys/dev/fdt/pwmregulator.c:1.2
--- src/sys/dev/fdt/pwmregulator.c:1.1	Thu Dec 31 15:12:33 2020
+++ src/sys/dev/fdt/pwmregulator.c	Fri Jan  1 03:07:51 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: pwmregulator.c,v 1.1 2020/12/31 15:12:33 ryo Exp $ */
+/* $NetBSD: pwmregulator.c,v 1.2 2021/01/01 03:07:51 ryo Exp $ */
 
 /*
  * Copyright (c) 2020 Ryo Shimizu <r...@nerv.org>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: pwmregulator.c,v 1.1 2020/12/31 15:12:33 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pwmregulator.c,v 1.2 2021/01/01 03:07:51 ryo Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -63,6 +63,7 @@ struct voltage_duty {
 struct pwmregulator_softc {
 	device_t sc_dev;
 	pwm_tag_t sc_pwm;
+	struct fdtbus_gpio_pin *sc_pin;
 	struct voltage_duty *sc_voltage_table;
 	int sc_voltage_table_num;
 	int sc_phandle;
@@ -132,8 +133,6 @@ pwmregulator_attach(device_t parent, dev
 	    &sc->sc_dutycycle_unit) != 0)
 		sc->sc_dutycycle_unit = 100;
 
-	len = of_getprop_uint32_array(phandle, "pwm-dutycycle-range",
-	    sc->sc_dutycycle_range, 2);
 	if (of_getprop_uint32_array(phandle, "pwm-dutycycle-range",
 	    sc->sc_dutycycle_range, 2) != 0) {
 		sc->sc_dutycycle_range[0] = 0;
@@ -193,6 +192,10 @@ pwmregulator_acquire(device_t dev)
 {
 	struct pwmregulator_softc * const sc = device_private(dev);
 
+	/* "enable-gpios" is optional */
+	sc->sc_pin = fdtbus_gpio_acquire(sc->sc_phandle, "enable-gpios",
+	    GPIO_PIN_OUTPUT);
+
 	sc->sc_pwm = fdtbus_pwm_acquire(sc->sc_phandle, "pwms");
 	if (sc->sc_pwm == NULL)
 		return ENXIO;
@@ -205,6 +208,11 @@ pwmregulator_release(device_t dev)
 {
 	struct pwmregulator_softc * const sc = device_private(dev);
 
+	if (sc->sc_pin != NULL) {
+		fdtbus_gpio_write(sc->sc_pin, 0);
+		fdtbus_gpio_release(sc->sc_pin);
+	}
+
 	sc->sc_pwm = NULL;
 }
 
@@ -212,14 +220,22 @@ static int
 pwmregulator_enable(device_t dev, bool enable)
 {
 	struct pwmregulator_softc * const sc = device_private(dev);
+	int error;
 
 	if (sc->sc_pwm == NULL)
 		return ENXIO;
 
-	if (enable)
-		return pwm_enable(sc->sc_pwm);
-	else
-		return pwm_disable(sc->sc_pwm);
+	if (enable) {
+		if (sc->sc_pin != NULL)
+			fdtbus_gpio_write(sc->sc_pin, 1);
+		error = pwm_enable(sc->sc_pwm);
+	} else {
+		error = pwm_disable(sc->sc_pwm);
+		if (sc->sc_pin != NULL)
+			fdtbus_gpio_write(sc->sc_pin, 0);
+	}
+
+	return error;
 }
 
 static int

Reply via email to