diff options
Diffstat (limited to 'include/linux/pwm.h')
| -rw-r--r-- | include/linux/pwm.h | 108 |
1 files changed, 106 insertions, 2 deletions
diff --git a/include/linux/pwm.h b/include/linux/pwm.h index 21d076c5089e..112b31436848 100644 --- a/include/linux/pwm.h +++ b/include/linux/pwm.h | |||
| @@ -1,11 +1,13 @@ | |||
| 1 | #ifndef __LINUX_PWM_H | 1 | #ifndef __LINUX_PWM_H |
| 2 | #define __LINUX_PWM_H | 2 | #define __LINUX_PWM_H |
| 3 | 3 | ||
| 4 | #include <linux/err.h> | ||
| 4 | #include <linux/of.h> | 5 | #include <linux/of.h> |
| 5 | 6 | ||
| 6 | struct pwm_device; | 7 | struct pwm_device; |
| 7 | struct seq_file; | 8 | struct seq_file; |
| 8 | 9 | ||
| 10 | #if IS_ENABLED(CONFIG_PWM) || IS_ENABLED(CONFIG_HAVE_PWM) | ||
| 9 | /* | 11 | /* |
| 10 | * pwm_request - request a PWM device | 12 | * pwm_request - request a PWM device |
| 11 | */ | 13 | */ |
| @@ -30,10 +32,47 @@ int pwm_enable(struct pwm_device *pwm); | |||
| 30 | * pwm_disable - stop a PWM output toggling | 32 | * pwm_disable - stop a PWM output toggling |
| 31 | */ | 33 | */ |
| 32 | void pwm_disable(struct pwm_device *pwm); | 34 | void pwm_disable(struct pwm_device *pwm); |
| 35 | #else | ||
| 36 | static inline struct pwm_device *pwm_request(int pwm_id, const char *label) | ||
| 37 | { | ||
| 38 | return ERR_PTR(-ENODEV); | ||
| 39 | } | ||
| 40 | |||
| 41 | static inline void pwm_free(struct pwm_device *pwm) | ||
| 42 | { | ||
| 43 | } | ||
| 44 | |||
| 45 | static inline int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns) | ||
| 46 | { | ||
| 47 | return -EINVAL; | ||
| 48 | } | ||
| 49 | |||
| 50 | static inline int pwm_enable(struct pwm_device *pwm) | ||
| 51 | { | ||
| 52 | return -EINVAL; | ||
| 53 | } | ||
| 54 | |||
| 55 | static inline void pwm_disable(struct pwm_device *pwm) | ||
| 56 | { | ||
| 57 | } | ||
| 58 | #endif | ||
| 33 | 59 | ||
| 34 | #ifdef CONFIG_PWM | ||
| 35 | struct pwm_chip; | 60 | struct pwm_chip; |
| 36 | 61 | ||
| 62 | /** | ||
| 63 | * enum pwm_polarity - polarity of a PWM signal | ||
| 64 | * @PWM_POLARITY_NORMAL: a high signal for the duration of the duty- | ||
| 65 | * cycle, followed by a low signal for the remainder of the pulse | ||
| 66 | * period | ||
| 67 | * @PWM_POLARITY_INVERSED: a low signal for the duration of the duty- | ||
| 68 | * cycle, followed by a high signal for the remainder of the pulse | ||
| 69 | * period | ||
| 70 | */ | ||
| 71 | enum pwm_polarity { | ||
| 72 | PWM_POLARITY_NORMAL, | ||
| 73 | PWM_POLARITY_INVERSED, | ||
| 74 | }; | ||
| 75 | |||
| 37 | enum { | 76 | enum { |
| 38 | PWMF_REQUESTED = 1 << 0, | 77 | PWMF_REQUESTED = 1 << 0, |
| 39 | PWMF_ENABLED = 1 << 1, | 78 | PWMF_ENABLED = 1 << 1, |
| @@ -61,11 +100,17 @@ static inline unsigned int pwm_get_period(struct pwm_device *pwm) | |||
| 61 | return pwm ? pwm->period : 0; | 100 | return pwm ? pwm->period : 0; |
| 62 | } | 101 | } |
| 63 | 102 | ||
| 103 | /* | ||
| 104 | * pwm_set_polarity - configure the polarity of a PWM signal | ||
| 105 | */ | ||
| 106 | int pwm_set_polarity(struct pwm_device *pwm, enum pwm_polarity polarity); | ||
| 107 | |||
| 64 | /** | 108 | /** |
| 65 | * struct pwm_ops - PWM controller operations | 109 | * struct pwm_ops - PWM controller operations |
| 66 | * @request: optional hook for requesting a PWM | 110 | * @request: optional hook for requesting a PWM |
| 67 | * @free: optional hook for freeing a PWM | 111 | * @free: optional hook for freeing a PWM |
| 68 | * @config: configure duty cycles and period length for this PWM | 112 | * @config: configure duty cycles and period length for this PWM |
| 113 | * @set_polarity: configure the polarity of this PWM | ||
| 69 | * @enable: enable PWM output toggling | 114 | * @enable: enable PWM output toggling |
| 70 | * @disable: disable PWM output toggling | 115 | * @disable: disable PWM output toggling |
| 71 | * @dbg_show: optional routine to show contents in debugfs | 116 | * @dbg_show: optional routine to show contents in debugfs |
| @@ -79,6 +124,9 @@ struct pwm_ops { | |||
| 79 | int (*config)(struct pwm_chip *chip, | 124 | int (*config)(struct pwm_chip *chip, |
| 80 | struct pwm_device *pwm, | 125 | struct pwm_device *pwm, |
| 81 | int duty_ns, int period_ns); | 126 | int duty_ns, int period_ns); |
| 127 | int (*set_polarity)(struct pwm_chip *chip, | ||
| 128 | struct pwm_device *pwm, | ||
| 129 | enum pwm_polarity polarity); | ||
| 82 | int (*enable)(struct pwm_chip *chip, | 130 | int (*enable)(struct pwm_chip *chip, |
| 83 | struct pwm_device *pwm); | 131 | struct pwm_device *pwm); |
| 84 | void (*disable)(struct pwm_chip *chip, | 132 | void (*disable)(struct pwm_chip *chip, |
| @@ -113,6 +161,7 @@ struct pwm_chip { | |||
| 113 | unsigned int of_pwm_n_cells; | 161 | unsigned int of_pwm_n_cells; |
| 114 | }; | 162 | }; |
| 115 | 163 | ||
| 164 | #if IS_ENABLED(CONFIG_PWM) | ||
| 116 | int pwm_set_chip_data(struct pwm_device *pwm, void *data); | 165 | int pwm_set_chip_data(struct pwm_device *pwm, void *data); |
| 117 | void *pwm_get_chip_data(struct pwm_device *pwm); | 166 | void *pwm_get_chip_data(struct pwm_device *pwm); |
| 118 | 167 | ||
| @@ -125,6 +174,57 @@ struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, | |||
| 125 | struct pwm_device *pwm_get(struct device *dev, const char *consumer); | 174 | struct pwm_device *pwm_get(struct device *dev, const char *consumer); |
| 126 | void pwm_put(struct pwm_device *pwm); | 175 | void pwm_put(struct pwm_device *pwm); |
| 127 | 176 | ||
| 177 | struct pwm_device *devm_pwm_get(struct device *dev, const char *consumer); | ||
| 178 | void devm_pwm_put(struct device *dev, struct pwm_device *pwm); | ||
| 179 | #else | ||
| 180 | static inline int pwm_set_chip_data(struct pwm_device *pwm, void *data) | ||
| 181 | { | ||
| 182 | return -EINVAL; | ||
| 183 | } | ||
| 184 | |||
| 185 | static inline void *pwm_get_chip_data(struct pwm_device *pwm) | ||
| 186 | { | ||
| 187 | return NULL; | ||
| 188 | } | ||
| 189 | |||
| 190 | static inline int pwmchip_add(struct pwm_chip *chip) | ||
| 191 | { | ||
| 192 | return -EINVAL; | ||
| 193 | } | ||
| 194 | |||
| 195 | static inline int pwmchip_remove(struct pwm_chip *chip) | ||
| 196 | { | ||
| 197 | return -EINVAL; | ||
| 198 | } | ||
| 199 | |||
| 200 | static inline struct pwm_device *pwm_request_from_chip(struct pwm_chip *chip, | ||
| 201 | unsigned int index, | ||
| 202 | const char *label) | ||
| 203 | { | ||
| 204 | return ERR_PTR(-ENODEV); | ||
| 205 | } | ||
| 206 | |||
| 207 | static inline struct pwm_device *pwm_get(struct device *dev, | ||
| 208 | const char *consumer) | ||
| 209 | { | ||
| 210 | return ERR_PTR(-ENODEV); | ||
| 211 | } | ||
| 212 | |||
| 213 | static inline void pwm_put(struct pwm_device *pwm) | ||
| 214 | { | ||
| 215 | } | ||
| 216 | |||
| 217 | static inline struct pwm_device *devm_pwm_get(struct device *dev, | ||
| 218 | const char *consumer) | ||
| 219 | { | ||
| 220 | return ERR_PTR(-ENODEV); | ||
| 221 | } | ||
| 222 | |||
| 223 | static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm) | ||
| 224 | { | ||
| 225 | } | ||
| 226 | #endif | ||
| 227 | |||
| 128 | struct pwm_lookup { | 228 | struct pwm_lookup { |
| 129 | struct list_head list; | 229 | struct list_head list; |
| 130 | const char *provider; | 230 | const char *provider; |
| @@ -141,8 +241,12 @@ struct pwm_lookup { | |||
| 141 | .con_id = _con_id, \ | 241 | .con_id = _con_id, \ |
| 142 | } | 242 | } |
| 143 | 243 | ||
| 244 | #if IS_ENABLED(CONFIG_PWM) | ||
| 144 | void pwm_add_table(struct pwm_lookup *table, size_t num); | 245 | void pwm_add_table(struct pwm_lookup *table, size_t num); |
| 145 | 246 | #else | |
| 247 | static inline void pwm_add_table(struct pwm_lookup *table, size_t num) | ||
| 248 | { | ||
| 249 | } | ||
| 146 | #endif | 250 | #endif |
| 147 | 251 | ||
| 148 | #endif /* __LINUX_PWM_H */ | 252 | #endif /* __LINUX_PWM_H */ |
