Add function to enable the clock of the different PWM controllers on i.MX7.
Signed-off-by: Thomas Bonnefille <[email protected]> --- arch/arm/include/asm/arch-mx7/clock.h | 3 +++ arch/arm/mach-imx/mx7/clock.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/arch/arm/include/asm/arch-mx7/clock.h b/arch/arm/include/asm/arch-mx7/clock.h index 48c7c3367a5..03d1cc76e53 100644 --- a/arch/arm/include/asm/arch-mx7/clock.h +++ b/arch/arm/include/asm/arch-mx7/clock.h @@ -347,6 +347,9 @@ void clock_init(void); #ifdef CONFIG_SYS_I2C_MXC int enable_i2c_clk(unsigned char enable, unsigned i2c_num); #endif +#ifdef CONFIG_PWM_IMX +int enable_pwm_clk(unsigned char enable, unsigned int pwm_num); +#endif #ifdef CONFIG_FEC_MXC int set_clk_enet(enum enet_freq type); #endif diff --git a/arch/arm/mach-imx/mx7/clock.c b/arch/arm/mach-imx/mx7/clock.c index a8328a0b224..72e0051373f 100644 --- a/arch/arm/mach-imx/mx7/clock.c +++ b/arch/arm/mach-imx/mx7/clock.c @@ -524,6 +524,35 @@ unsigned int mxc_get_clock(enum mxc_clock clk) return 0; } +#ifdef CONFIG_PWM_IMX +/* pwm_num can be 0 - 3 */ +int enable_pwm_clk(unsigned char enable, unsigned int pwm_num) +{ + u32 target; + + if (pwm_num >= 4) + return -EINVAL; + + if (enable) { + clock_enable(CCGR_PWM1 + pwm_num, 0); + + /* Set i2c root clock to PLL_SYS_MAIN_120M_CLK */ + + target = CLK_ROOT_ON | + PWM1_CLK_ROOT_FROM_PLL_SYS_MAIN_120M_CLK | + CLK_ROOT_PRE_DIV(CLK_ROOT_PRE_DIV1) | + CLK_ROOT_POST_DIV(CLK_ROOT_POST_DIV2); + clock_set_target_val(PWM1_CLK_ROOT + pwm_num, target); + + clock_enable(CCGR_PWM1 + pwm_num, 1); + } else { + clock_enable(CCGR_PWM1 + pwm_num, 0); + } + + return 0; +} +#endif + #ifdef CONFIG_SYS_I2C_MXC /* i2c_num can be 0 - 3 */ int enable_i2c_clk(unsigned char enable, unsigned i2c_num) -- 2.52.0

