Commit 1a366fe9 authored by Lee Jones's avatar Lee Jones Committed by Thierry Reding
Browse files

pwm: sysfs: Add PWM capture support



Allow a user to read PWM capture results from sysfs. To start a capture
and read the result, simply read the file:

  $ cat $PWMCHIP/capture

The output format is "<period> <duty cycle>".

Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarThierry Reding <thierry.reding@gmail.com>
parent 3a3d1a4e
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -77,3 +77,12 @@ Description:
		Enable/disable the PWM signal.
		0 is disabled
		1 is enabled

What:		/sys/class/pwm/pwmchipN/pwmX/capture
Date:		June 2016
KernelVersion:	4.8
Contact:	Lee Jones <lee.jones@linaro.org>
Description:
		Capture information about a PWM signal. The output format is a
		pair unsigned integers (period and duty cycle), separated by a
		single space.
+17 −0
Original line number Diff line number Diff line
@@ -208,16 +208,33 @@ static ssize_t polarity_store(struct device *child,
	return ret ? : size;
}

static ssize_t capture_show(struct device *child,
			    struct device_attribute *attr,
			    char *buf)
{
	struct pwm_device *pwm = child_to_pwm_device(child);
	struct pwm_capture result;
	int ret;

	ret = pwm_capture(pwm, &result, jiffies_to_msecs(HZ));
	if (ret)
		return ret;

	return sprintf(buf, "%u %u\n", result.period, result.duty_cycle);
}

static DEVICE_ATTR_RW(period);
static DEVICE_ATTR_RW(duty_cycle);
static DEVICE_ATTR_RW(enable);
static DEVICE_ATTR_RW(polarity);
static DEVICE_ATTR_RO(capture);

static struct attribute *pwm_attrs[] = {
	&dev_attr_period.attr,
	&dev_attr_duty_cycle.attr,
	&dev_attr_enable.attr,
	&dev_attr_polarity.attr,
	&dev_attr_capture.attr,
	NULL
};
ATTRIBUTE_GROUPS(pwm);