diff options
Diffstat (limited to '')
| -rw-r--r-- | include/linux/clk-provider.h | 26 | 
1 files changed, 26 insertions, 0 deletions
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h index b7cfa037e593..08b1aa70a38d 100644 --- a/include/linux/clk-provider.h +++ b/include/linux/clk-provider.h @@ -38,6 +38,8 @@  #define CLK_IS_CRITICAL		BIT(11) /* do not gate, ever */  /* parents need enable during gate/ungate, set rate and re-parent */  #define CLK_OPS_PARENT_ENABLE	BIT(12) +/* duty cycle call may be forwarded to the parent clock */ +#define CLK_DUTY_CYCLE_PARENT	BIT(13)  struct clk;  struct clk_hw; @@ -67,6 +69,17 @@ struct clk_rate_request {  };  /** + * struct clk_duty - Struture encoding the duty cycle ratio of a clock + * + * @num:	Numerator of the duty cycle ratio + * @den:	Denominator of the duty cycle ratio + */ +struct clk_duty { +	unsigned int num; +	unsigned int den; +}; + +/**   * struct clk_ops -  Callback operations for hardware clocks; these are to   * be provided by the clock implementation, and will be called by drivers   * through the clk_* api. @@ -169,6 +182,15 @@ struct clk_rate_request {   *		by the second argument. Valid values for degrees are   *		0-359. Return 0 on success, otherwise -EERROR.   * + * @get_duty_cycle: Queries the hardware to get the current duty cycle ratio + *              of a clock. Returned values denominator cannot be 0 and must be + *              superior or equal to the numerator. + * + * @set_duty_cycle: Apply the duty cycle ratio to this clock signal specified by + *              the numerator (2nd argurment) and denominator (3rd  argument). + *              Argument must be a valid ratio (denominator > 0 + *              and >= numerator) Return 0 on success, otherwise -EERROR. + *   * @init:	Perform platform-specific initialization magic.   *		This is not not used by any of the basic clock types.   *		Please consider other ways of solving initialization problems @@ -218,6 +240,10 @@ struct clk_ops {  					   unsigned long parent_accuracy);  	int		(*get_phase)(struct clk_hw *hw);  	int		(*set_phase)(struct clk_hw *hw, int degrees); +	int		(*get_duty_cycle)(struct clk_hw *hw, +					  struct clk_duty *duty); +	int		(*set_duty_cycle)(struct clk_hw *hw, +					  struct clk_duty *duty);  	void		(*init)(struct clk_hw *hw);  	void		(*debug_init)(struct clk_hw *hw, struct dentry *dentry);  };  | 
