aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2016-01-21 19:44:54 -0700
committerSimon Glass <sjg@chromium.org>2016-01-21 20:42:36 -0700
commitfc760cb8c4cc16061079fb45e2e0bad11e5acedc (patch)
treed796c4f0ae64c7d5d32b26f4fdcd9a145be5f52f /include
parentd4bf91ada110aeb26f844cbe95cdb9b1ddb87f19 (diff)
downloadu-boot-fc760cb8c4cc16061079fb45e2e0bad11e5acedc.zip
u-boot-fc760cb8c4cc16061079fb45e2e0bad11e5acedc.tar.gz
u-boot-fc760cb8c4cc16061079fb45e2e0bad11e5acedc.tar.bz2
dm: pwm: Add a PWM uclass
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>
Diffstat (limited to 'include')
-rw-r--r--include/dm/uclass-id.h1
-rw-r--r--include/pwm.h53
2 files changed, 54 insertions, 0 deletions
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index b5f43ae..8f0381d 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -51,6 +51,7 @@ enum uclass_id {
UCLASS_PINCTRL, /* Pinctrl (pin muxing/configuration) device */
UCLASS_PINCONFIG, /* Pin configuration node device */
UCLASS_PMIC, /* PMIC I/O device */
+ UCLASS_PWM, /* Pulse-width modulator */
UCLASS_PWRSEQ, /* Power sequence device */
UCLASS_REGULATOR, /* Regulator device */
UCLASS_RESET, /* Reset device */
diff --git a/include/pwm.h b/include/pwm.h
index f24f220..851915e 100644
--- a/include/pwm.h
+++ b/include/pwm.h
@@ -1,6 +1,7 @@
/*
* header file for pwm driver.
*
+ * Copyright 2016 Google Inc.
* Copyright (c) 2011 samsung electronics
* Donghwa Lee <dh09.lee@samsung.com>
*
@@ -10,9 +11,61 @@
#ifndef _pwm_h_
#define _pwm_h_
+/* struct pwm_ops: Operations for the PWM uclass */
+struct pwm_ops {
+ /**
+ * set_config() - Set the PWM configuration
+ *
+ * @dev: PWM device to update
+ * @channel: PWM channel to update
+ * @period_ns: PWM period in nanoseconds
+ * @duty_ns: PWM duty period in nanoseconds
+ * @return 0 if OK, -ve on error
+ */
+ int (*set_config)(struct udevice *dev, uint channel, uint period_ns,
+ uint duty_ns);
+
+ /**
+ * set_enable() - Enable or disable the PWM
+ *
+ * @dev: PWM device to update
+ * @channel: PWM channel to update
+ * @enable: true to enable, false to disable
+ * @return 0 if OK, -ve on error
+ */
+ int (*set_enable)(struct udevice *dev, uint channel, bool enable);
+};
+
+#define pwm_get_ops(dev) ((struct pwm_ops *)(dev)->driver->ops)
+
+/**
+ * pwm_set_config() - Set the PWM configuration
+ *
+ * @dev: PWM device to update
+ * @channel: PWM channel to update
+ * @period_ns: PWM period in nanoseconds
+ * @duty_ns: PWM duty period in nanoseconds
+ * @return 0 if OK, -ve on error
+ */
+int pwm_set_config(struct udevice *dev, uint channel, uint period_ns,
+ uint duty_ns);
+
+/**
+ * pwm_set_enable() - Enable or disable the PWM
+ *
+ * @dev: PWM device to update
+ * @channel: PWM channel to update
+ * @enable: true to enable, false to disable
+ * @return 0 if OK, -ve on error
+ */
+int pwm_set_enable(struct udevice *dev, uint channel, bool enable);
+
+/* Legacy interface */
+#ifndef CONFIG_DM_PWM
int pwm_init (int pwm_id, int div, int invert);
int pwm_config (int pwm_id, int duty_ns, int period_ns);
int pwm_enable (int pwm_id);
void pwm_disable (int pwm_id);
+#endif
#endif /* _pwm_h_ */