@@ -121,6 +121,26 @@ static inline void pwm_mediatek_writel(struct pwm_mediatek_chip *chip,
121
121
writel (value , chip -> regs + chip -> soc -> reg_offset [num ] + offset );
122
122
}
123
123
124
+ static void pwm_mediatek_enable (struct pwm_chip * chip , struct pwm_device * pwm )
125
+ {
126
+ struct pwm_mediatek_chip * pc = to_pwm_mediatek_chip (chip );
127
+ u32 value ;
128
+
129
+ value = readl (pc -> regs );
130
+ value |= BIT (pwm -> hwpwm );
131
+ writel (value , pc -> regs );
132
+ }
133
+
134
+ static void pwm_mediatek_disable (struct pwm_chip * chip , struct pwm_device * pwm )
135
+ {
136
+ struct pwm_mediatek_chip * pc = to_pwm_mediatek_chip (chip );
137
+ u32 value ;
138
+
139
+ value = readl (pc -> regs );
140
+ value &= ~BIT (pwm -> hwpwm );
141
+ writel (value , pc -> regs );
142
+ }
143
+
124
144
static int pwm_mediatek_config (struct pwm_chip * chip , struct pwm_device * pwm ,
125
145
int duty_ns , int period_ns )
126
146
{
@@ -183,35 +203,6 @@ static int pwm_mediatek_config(struct pwm_chip *chip, struct pwm_device *pwm,
183
203
return ret ;
184
204
}
185
205
186
- static int pwm_mediatek_enable (struct pwm_chip * chip , struct pwm_device * pwm )
187
- {
188
- struct pwm_mediatek_chip * pc = to_pwm_mediatek_chip (chip );
189
- u32 value ;
190
- int ret ;
191
-
192
- ret = pwm_mediatek_clk_enable (chip , pwm );
193
- if (ret < 0 )
194
- return ret ;
195
-
196
- value = readl (pc -> regs );
197
- value |= BIT (pwm -> hwpwm );
198
- writel (value , pc -> regs );
199
-
200
- return 0 ;
201
- }
202
-
203
- static void pwm_mediatek_disable (struct pwm_chip * chip , struct pwm_device * pwm )
204
- {
205
- struct pwm_mediatek_chip * pc = to_pwm_mediatek_chip (chip );
206
- u32 value ;
207
-
208
- value = readl (pc -> regs );
209
- value &= ~BIT (pwm -> hwpwm );
210
- writel (value , pc -> regs );
211
-
212
- pwm_mediatek_clk_disable (chip , pwm );
213
- }
214
-
215
206
static int pwm_mediatek_apply (struct pwm_chip * chip , struct pwm_device * pwm ,
216
207
const struct pwm_state * state )
217
208
{
@@ -221,8 +212,10 @@ static int pwm_mediatek_apply(struct pwm_chip *chip, struct pwm_device *pwm,
221
212
return - EINVAL ;
222
213
223
214
if (!state -> enabled ) {
224
- if (pwm -> state .enabled )
215
+ if (pwm -> state .enabled ) {
225
216
pwm_mediatek_disable (chip , pwm );
217
+ pwm_mediatek_clk_disable (chip , pwm );
218
+ }
226
219
227
220
return 0 ;
228
221
}
@@ -231,8 +224,11 @@ static int pwm_mediatek_apply(struct pwm_chip *chip, struct pwm_device *pwm,
231
224
if (err )
232
225
return err ;
233
226
234
- if (!pwm -> state .enabled )
235
- err = pwm_mediatek_enable (chip , pwm );
227
+ if (!pwm -> state .enabled ) {
228
+ err = pwm_mediatek_clk_enable (chip , pwm );
229
+ if (!err )
230
+ pwm_mediatek_enable (chip , pwm );
231
+ }
236
232
237
233
return err ;
238
234
}
0 commit comments