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");
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to