/*
* header file for pwm driver .
*
* Copyright 2016 Google Inc .
* Copyright ( c ) 2011 samsung electronics
* Donghwa Lee < dh09 . lee @ samsung . com >
*
* SPDX - License - Identifier : GPL - 2.0 +
*/
# 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_ */