Commit 6e69ab13 authored by Florian Vaussard's avatar Florian Vaussard Committed by Thierry Reding

pwm: Add pwm_can_sleep() as exported API to users

Calls to some external PWM chips can sleep. To help users,
add pwm_can_sleep() API.

Cc: Thierry Reding <thierry.reding@avionic-design.de>
Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: default avatarFlorian Vaussard <florian.vaussard@epfl.ch>
Reviewed-by: default avatarPeter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: default avatarThierry Reding <thierry.reding@avionic-design.de>
parent 0132267d
...@@ -733,6 +733,18 @@ void devm_pwm_put(struct device *dev, struct pwm_device *pwm) ...@@ -733,6 +733,18 @@ void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
} }
EXPORT_SYMBOL_GPL(devm_pwm_put); EXPORT_SYMBOL_GPL(devm_pwm_put);
/**
* pwm_can_sleep() - report whether PWM access will sleep
* @pwm: PWM device
*
* It returns true if accessing the PWM can sleep, false otherwise.
*/
bool pwm_can_sleep(struct pwm_device *pwm)
{
return pwm->chip->can_sleep;
}
EXPORT_SYMBOL_GPL(pwm_can_sleep);
#ifdef CONFIG_DEBUG_FS #ifdef CONFIG_DEBUG_FS
static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s) static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)
{ {
......
...@@ -146,6 +146,8 @@ struct pwm_ops { ...@@ -146,6 +146,8 @@ struct pwm_ops {
* @base: number of first PWM controlled by this chip * @base: number of first PWM controlled by this chip
* @npwm: number of PWMs controlled by this chip * @npwm: number of PWMs controlled by this chip
* @pwms: array of PWM devices allocated by the framework * @pwms: array of PWM devices allocated by the framework
* @can_sleep: must be true if the .config(), .enable() or .disable()
* operations may sleep
*/ */
struct pwm_chip { struct pwm_chip {
struct device *dev; struct device *dev;
...@@ -159,6 +161,7 @@ struct pwm_chip { ...@@ -159,6 +161,7 @@ struct pwm_chip {
struct pwm_device * (*of_xlate)(struct pwm_chip *pc, struct pwm_device * (*of_xlate)(struct pwm_chip *pc,
const struct of_phandle_args *args); const struct of_phandle_args *args);
unsigned int of_pwm_n_cells; unsigned int of_pwm_n_cells;
bool can_sleep;
}; };
#if IS_ENABLED(CONFIG_PWM) #if IS_ENABLED(CONFIG_PWM)
...@@ -179,6 +182,8 @@ void pwm_put(struct pwm_device *pwm); ...@@ -179,6 +182,8 @@ void pwm_put(struct pwm_device *pwm);
struct pwm_device *devm_pwm_get(struct device *dev, const char *consumer); struct pwm_device *devm_pwm_get(struct device *dev, const char *consumer);
void devm_pwm_put(struct device *dev, struct pwm_device *pwm); void devm_pwm_put(struct device *dev, struct pwm_device *pwm);
bool pwm_can_sleep(struct pwm_device *pwm);
#else #else
static inline int pwm_set_chip_data(struct pwm_device *pwm, void *data) static inline int pwm_set_chip_data(struct pwm_device *pwm, void *data)
{ {
...@@ -226,6 +231,11 @@ static inline struct pwm_device *devm_pwm_get(struct device *dev, ...@@ -226,6 +231,11 @@ static inline struct pwm_device *devm_pwm_get(struct device *dev,
static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm) static inline void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
{ {
} }
static inline bool pwm_can_sleep(struct pwm_device *pwm)
{
return false;
}
#endif #endif
struct pwm_lookup { struct pwm_lookup {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment