diff options
Diffstat (limited to 'firmware/target/arm/imx233/pwm-imx233.c')
-rw-r--r-- | firmware/target/arm/imx233/pwm-imx233.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/firmware/target/arm/imx233/pwm-imx233.c b/firmware/target/arm/imx233/pwm-imx233.c index 5e1cc1daa5..3704b60ff2 100644 --- a/firmware/target/arm/imx233/pwm-imx233.c +++ b/firmware/target/arm/imx233/pwm-imx233.c | |||
@@ -54,9 +54,18 @@ bool imx233_pwm_is_enabled(int channel) | |||
54 | void imx233_pwm_enable(int channel, bool enable) | 54 | void imx233_pwm_enable(int channel, bool enable) |
55 | { | 55 | { |
56 | if(enable) | 56 | if(enable) |
57 | { | ||
58 | /* claim pin */ | ||
59 | imx233_pinctrl_setup_vpin(VPIN_PWM(channel), "pwm", PINCTRL_DRIVE_4mA, false); | ||
57 | BF_SET(PWM_CTRL, PWMx_ENABLE(channel)); | 60 | BF_SET(PWM_CTRL, PWMx_ENABLE(channel)); |
61 | } | ||
58 | else | 62 | else |
63 | { | ||
59 | BF_CLR(PWM_CTRL, PWMx_ENABLE(channel)); | 64 | BF_CLR(PWM_CTRL, PWMx_ENABLE(channel)); |
65 | /* stop claiming the pin */ | ||
66 | imx233_pinctrl_release(VPIN_UNPACK_BANK(VPIN_PWM(channel)), | ||
67 | VPIN_UNPACK_PIN(VPIN_PWM(channel)), "pwm"); | ||
68 | } | ||
60 | } | 69 | } |
61 | 70 | ||
62 | void imx233_pwm_setup(int channel, int period, int cdiv, int active, | 71 | void imx233_pwm_setup(int channel, int period, int cdiv, int active, |
@@ -66,8 +75,6 @@ void imx233_pwm_setup(int channel, int period, int cdiv, int active, | |||
66 | bool enable = imx233_pwm_is_enabled(channel); | 75 | bool enable = imx233_pwm_is_enabled(channel); |
67 | if(enable) | 76 | if(enable) |
68 | imx233_pwm_enable(channel, false); | 77 | imx233_pwm_enable(channel, false); |
69 | /* setup pin */ | ||
70 | imx233_pinctrl_setup_vpin(VPIN_PWM(channel), "pwm", PINCTRL_DRIVE_4mA, false); | ||
71 | /* watch the order ! active THEN period | 78 | /* watch the order ! active THEN period |
72 | * NOTE: the register value is period-1 */ | 79 | * NOTE: the register value is period-1 */ |
73 | BF_WR_ALL(PWM_ACTIVEn(channel), ACTIVE(active), INACTIVE(inactive)); | 80 | BF_WR_ALL(PWM_ACTIVEn(channel), ACTIVE(active), INACTIVE(inactive)); |