RE: [PATCH] pwm: rzg2l-gpt: Accept requests for too high period length

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Uwe,

Thanks for the patch.

> -----Original Message-----
> From: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxx>
> Sent: 23 April 2025 10:57
> Subject: [PATCH] pwm: rzg2l-gpt: Accept requests for too high period length
> 
> The period setting is shared for each pair of PWM channels. So if the twin channel is in use, the
> period must not be changed. According to the usual practise to pick the next smaller possible period,
> accept a request for a period that is bigger than the unchangable value.
> 
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@xxxxxxxxxxxx>

Tested-by: Biju Das <biju.das.jz@xxxxxxxxxxxxxx>

> ---
> Hello Biju,
> 
> here comes the patch that I promised when I applied your driver patch.
> 
> This aligns the period setting to the usual procedure. Obviously only compile tested.

It is tested with [1]

[1] https://lore.kernel.org/all/20250424054050.28310-1-biju.das.jz@xxxxxxxxxxxxxx/

Cheers,
Biju

>
> 
>  drivers/pwm/pwm-rzg2l-gpt.c | 12 ++++++++----
>  1 file 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);
> 
>  	/*
> 
> base-commit: 6d54ef7161f815beded94837b40a522df7fd7177
> --
> 2.47.2





[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux