aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin/pwm
diff options
context:
space:
mode:
authorIan Lepore <ian@FreeBSD.org>2019-06-17 16:43:33 +0000
committerIan Lepore <ian@FreeBSD.org>2019-06-17 16:43:33 +0000
commit7d763870e494839937257415767370621bac9637 (patch)
treef6be84ab288576f43611d3ebdfbe2ffa2cc8f237 /usr.sbin/pwm
parentb5d67730ee032cd97d39394282c79b3bf481a0e2 (diff)
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.
Notes
Notes: svn path=/head/; revision=349144
Diffstat (limited to 'usr.sbin/pwm')
-rw-r--r--usr.sbin/pwm/pwm.821
-rw-r--r--usr.sbin/pwm/pwm.c40
2 files changed, 41 insertions, 20 deletions
diff --git a/usr.sbin/pwm/pwm.8 b/usr.sbin/pwm/pwm.8
index 207dca407c8e..57a8071cdc3d 100644
--- a/usr.sbin/pwm/pwm.8
+++ b/usr.sbin/pwm/pwm.8
@@ -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 the pwm channel
.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
diff --git a/usr.sbin/pwm/pwm.c b/usr.sbin/pwm/pwm.c
index 52ea1b79e6ac..3d3de2018979 100644
--- a/usr.sbin/pwm/pwm.c
+++ b/usr.sbin/pwm/pwm.c
@@ -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,6 +50,18 @@
#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)
{
@@ -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,25 +130,24 @@ 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");
goto fail;