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: Florian Vaussard <florian.vaussard@epfl.ch> Reviewed-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
This commit is contained in:
Родитель
0132267d65
Коммит
6e69ab1361
|
@ -733,6 +733,18 @@ void devm_pwm_put(struct device *dev, struct pwm_device *pwm)
|
|||
}
|
||||
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
|
||||
static void pwm_dbg_show(struct pwm_chip *chip, struct seq_file *s)
|
||||
{
|
||||
|
|
|
@ -146,6 +146,8 @@ struct pwm_ops {
|
|||
* @base: number of first PWM controlled by this chip
|
||||
* @npwm: number of PWMs controlled by this chip
|
||||
* @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 device *dev;
|
||||
|
@ -159,6 +161,7 @@ struct pwm_chip {
|
|||
struct pwm_device * (*of_xlate)(struct pwm_chip *pc,
|
||||
const struct of_phandle_args *args);
|
||||
unsigned int of_pwm_n_cells;
|
||||
bool can_sleep;
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_PWM)
|
||||
|
@ -179,6 +182,8 @@ void pwm_put(struct pwm_device *pwm);
|
|||
|
||||
struct pwm_device *devm_pwm_get(struct device *dev, const char *consumer);
|
||||
void devm_pwm_put(struct device *dev, struct pwm_device *pwm);
|
||||
|
||||
bool pwm_can_sleep(struct pwm_device *pwm);
|
||||
#else
|
||||
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,
|
|||
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
|
||||
|
||||
struct pwm_lookup {
|
||||
|
|
Загрузка…
Ссылка в новой задаче