summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/pwm/pwm-rzg2l-gpt.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/pwm/pwm-rzg2l-gpt.c b/drivers/pwm/pwm-rzg2l-gpt.c
index 2ddbb13f50aa..360c8bf3b190 100644
--- a/drivers/pwm/pwm-rzg2l-gpt.c
+++ b/drivers/pwm/pwm-rzg2l-gpt.c
@@ -270,15 +270,19 @@ static int rzg2l_gpt_config(struct pwm_chip *chip, struct pwm_device *pwm,
* prescale and period can NOT be modified when there are multiple IOs
* in use with different settings.
*/
- if (rzg2l_gpt->channel_request_count[ch] > 1 && period_ticks != rzg2l_gpt->period_ticks[ch])
- return -EBUSY;
+ if (rzg2l_gpt->channel_request_count[ch] > 1) {
+ if (period_ticks < rzg2l_gpt->period_ticks[ch])
+ return -EBUSY;
+ else
+ period_ticks = rzg2l_gpt->period_ticks[ch];
+ }
prescale = rzg2l_gpt_calculate_prescale(rzg2l_gpt, period_ticks);
pv = rzg2l_gpt_calculate_pv_or_dc(period_ticks, prescale);
duty_ticks = mul_u64_u64_div_u64(state->duty_cycle, rzg2l_gpt->rate_khz, USEC_PER_SEC);
- if (duty_ticks > RZG2L_MAX_TICKS)
- duty_ticks = RZG2L_MAX_TICKS;
+ if (duty_ticks > period_ticks)
+ duty_ticks = period_ticks;
dc = rzg2l_gpt_calculate_pv_or_dc(duty_ticks, prescale);
/*