Add a uclass that supports Pulse Width Modulation (PWM) devices. It provides methods to enable/disable and configure the device. Signed-off-by: Simon Glass <sjg@chromium.org>master
parent
d4bf91ada1
commit
fc760cb8c4
@ -0,0 +1,10 @@ |
||||
config DM_PWM |
||||
bool "Enable support for pulse-width modulation devices (PWM)" |
||||
depends on DM |
||||
help |
||||
A pulse-width modulator emits a pulse of varying width and provides |
||||
control over the duty cycle (high and low time) of the signal. This |
||||
is often used to control a voltage level. The more time the PWM |
||||
spends in the 'high' state, the higher the voltage. The PWM's |
||||
frequency/period can be controlled along with the proportion of that |
||||
time that the signal is high. |
@ -0,0 +1,36 @@ |
||||
/*
|
||||
* Copyright (c) 2016 Google, Inc |
||||
* Written by Simon Glass <sjg@chromium.org> |
||||
* |
||||
* SPDX-License-Identifier: GPL-2.0+ |
||||
*/ |
||||
|
||||
#include <common.h> |
||||
#include <dm.h> |
||||
#include <pwm.h> |
||||
|
||||
int pwm_set_config(struct udevice *dev, uint channel, uint period_ns, |
||||
uint duty_ns) |
||||
{ |
||||
struct pwm_ops *ops = pwm_get_ops(dev); |
||||
|
||||
if (!ops->set_config) |
||||
return -ENOSYS; |
||||
|
||||
return ops->set_config(dev, channel, period_ns, duty_ns); |
||||
} |
||||
|
||||
int pwm_set_enable(struct udevice *dev, uint channel, bool enable) |
||||
{ |
||||
struct pwm_ops *ops = pwm_get_ops(dev); |
||||
|
||||
if (!ops->set_enable) |
||||
return -ENOSYS; |
||||
|
||||
return ops->set_enable(dev, channel, enable); |
||||
} |
||||
|
||||
UCLASS_DRIVER(pwm) = { |
||||
.id = UCLASS_PWM, |
||||
.name = "pwm", |
||||
}; |
Loading…
Reference in new issue