svn commit: r349144 - head/usr.sbin/pwm

Ian Lepore ian at FreeBSD.org
Mon Jun 17 16:43:35 UTC 2019


Author: ian
Date: Mon Jun 17 16:43:33 2019
New Revision: 349144
URL: https://svnweb.freebsd.org/changeset/base/349144

Log:
  Follow changes in the pwmc(4) driver in relation to device filenames.
  
  The driver now names its cdev nodes pwmcX.Y where X is unit number and
  Y is the channel within that unit.  Change the default device name from
  pwmc0 to pwmc0.0.  The driver now puts cdev files and label aliases in
  the /dev/pwm directory, so allow the user to provide unqualified names
  with -f and automatically prepend the /dev/pwm part for them.
  
  Update the examples in the manpage to show the new device name format
  and location within /dev/pwm.

Modified:
  head/usr.sbin/pwm/pwm.8
  head/usr.sbin/pwm/pwm.c

Modified: head/usr.sbin/pwm/pwm.8
==============================================================================
--- head/usr.sbin/pwm/pwm.8	Mon Jun 17 16:26:43 2019	(r349143)
+++ head/usr.sbin/pwm/pwm.8	Mon Jun 17 16:43:33 2019	(r349144)
@@ -22,7 +22,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd January 12, 2019
+.Dd June 17, 2019
 .Dt PWM 8
 .Os
 .Sh NAME
@@ -61,8 +61,11 @@ Channel number to operate on
 .It Fl f Ar device
 Device to operate on.
 If not specified,
-.Pa /dev/pwmc0
+.Pa /dev/pwm/pwmc0.0
 is used.
+If an unqualified name is provided,
+.Pa /dev/pwm
+is automatically prepended.
 .It Fl E
 Enable the pwm channel
 .It Fl D
@@ -79,17 +82,21 @@ Configure the duty (in nanoseconds or percentage) of t
 .It
 Show the configuration of the pwm channel:
 .Bd -literal
-pwm -f /dev/pwmc0 -C
+pwm -f /dev/pwm/pwmc0.1 -C
 .Ed
 .It
-Configure a 50000 ns period and a 25000 duty cycle:
+Configure a 50000 ns period and a 25000 ns duty cycle:
 .Bd -literal
-pwm -f /dev/pwmc0 -p 50000 -d 25000
+pwm -f pwmc1.1 -p 50000 -d 25000
 .Ed
 .It
-Configure a 50% duty cycle:
+Configure a 50% duty cycle on the device and channel which
+were configured in
+.Xr pwmc 4
+to have the label
+.Pa backlight :
 .Bd -literal
-pwm -f /dev/pwmc0 -d 50%
+pwm -f backlight -d 50%
 .Ed
 .El
 .Sh SEE ALSO

Modified: head/usr.sbin/pwm/pwm.c
==============================================================================
--- head/usr.sbin/pwm/pwm.c	Mon Jun 17 16:26:43 2019	(r349143)
+++ head/usr.sbin/pwm/pwm.c	Mon Jun 17 16:43:33 2019	(r349144)
@@ -37,6 +37,7 @@
 #include <err.h>
 #include <errno.h>
 #include <fcntl.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -49,7 +50,19 @@
 #define	PWM_PERIOD	0x0008
 #define	PWM_DUTY	0x0010
 
+static char device_name[PATH_MAX] = "/dev/pwm/pwmc0.0";
+
 static void
+set_device_name(const char *name)
+{
+
+	if (name[0] == '/')
+		strlcpy(device_name, name, sizeof(device_name));
+	else
+		snprintf(device_name, sizeof(device_name), "/dev/pwm/%s", name);
+}
+
+static void
 usage(void)
 {
 	fprintf(stderr, "Usage:\n");
@@ -72,8 +85,10 @@ main(int argc, char *argv[])
 	cap_rights_t right_ioctl;
 	const unsigned long pwm_ioctls[] = {PWMGETSTATE, PWMSETSTATE, PWMMAXCHANNEL};
 	char *percent;
+	bool setname;
 
 	action = 0;
+	setname = false;
 	fd = -1;
 	channel = -1u;
 	period = duty = -1;
@@ -115,24 +130,23 @@ main(int argc, char *argv[])
 			channel = strtoul(optarg, NULL, 10);
 			break;
 		case 'f':
-			if ((fd = open(optarg, O_RDWR)) < 0) {
-				fprintf(stderr, "pwm: cannot open %s %s\n",
-				  optarg, strerror(errno));
-				exit(1);
-			}
+			setname = true;
+			set_device_name(optarg);
+			break;
 		}
 	}
 
-	if (fd == -1) {
-		if ((fd = open("/dev/pwmc0", O_RDWR)) < 0) {
-			fprintf(stderr, "pwm: cannot open %s %s\n",
-			    optarg, strerror(errno));
+	if (action == 0)
+		usage();
+
+	if ((fd = open(device_name, O_RDWR)) == -1) {
+		fprintf(stderr, "pwm: cannot open %s: %s\n",
+		    device_name, strerror(errno));
+		if (setname)
 			exit(1);
-		}
+		else
+			usage();
 	}
-
-	if (action == 0 || fd == -1)
-		usage();
 
 	if (caph_limit_stdio() < 0) {
 		fprintf(stderr, "can't limit stdio rights");


More information about the svn-src-head mailing list