| /* SPDX-License-Identifier: GPL-2.0-only WITH Linux-syscall-note */ |
| |
| #ifndef _UAPI_PWM_H_ |
| #define _UAPI_PWM_H_ |
| |
| #include <linux/ioctl.h> |
| #include <linux/types.h> |
| |
| /** |
| * struct pwmchip_waveform - Describe a PWM waveform for a pwm_chip's PWM channel |
| * @hwpwm: per-chip relative index of the PWM device |
| * @__pad: padding, must be zero |
| * @period_length_ns: duration of the repeating period. |
| * A value of 0 represents a disabled PWM. |
| * @duty_length_ns: duration of the active part in each period |
| * @duty_offset_ns: offset of the rising edge from a period's start |
| */ |
| struct pwmchip_waveform { |
| __u32 hwpwm; |
| __u32 __pad; |
| __u64 period_length_ns; |
| __u64 duty_length_ns; |
| __u64 duty_offset_ns; |
| }; |
| |
| /* Reserves the passed hwpwm for exclusive control. */ |
| #define PWM_IOCTL_REQUEST _IO(0x75, 1) |
| |
| /* counter part to PWM_IOCTL_REQUEST */ |
| #define PWM_IOCTL_FREE _IO(0x75, 2) |
| |
| /* |
| * Modifies the passed wf according to hardware constraints. All parameters are |
| * rounded down to the next possible value, unless there is no such value, then |
| * values are rounded up. Note that zero isn't considered for rounding down |
| * period_length_ns. |
| */ |
| #define PWM_IOCTL_ROUNDWF _IOWR(0x75, 3, struct pwmchip_waveform) |
| |
| /* Get the currently implemented waveform */ |
| #define PWM_IOCTL_GETWF _IOWR(0x75, 4, struct pwmchip_waveform) |
| |
| /* Like PWM_IOCTL_ROUNDWF + PWM_IOCTL_SETEXACTWF in one go. */ |
| #define PWM_IOCTL_SETROUNDEDWF _IOW(0x75, 5, struct pwmchip_waveform) |
| |
| /* |
| * Program the PWM to emit exactly the passed waveform, subject only to rounding |
| * down each value less than 1 ns. Returns 0 on success, -EDOM if the waveform |
| * cannot be implemented exactly, or other negative error codes. |
| */ |
| #define PWM_IOCTL_SETEXACTWF _IOW(0x75, 6, struct pwmchip_waveform) |
| |
| #endif /* _UAPI_PWM_H_ */ |