diff options
Diffstat (limited to 'drivers/pwm/pwm-sifive.c')
| -rw-r--r-- | drivers/pwm/pwm-sifive.c | 8 | 
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pwm/pwm-sifive.c b/drivers/pwm/pwm-sifive.c index 62b6acc6373d..393a4b97fc19 100644 --- a/drivers/pwm/pwm-sifive.c +++ b/drivers/pwm/pwm-sifive.c @@ -161,7 +161,13 @@ static int pwm_sifive_apply(struct pwm_chip *chip, struct pwm_device *pwm,  	mutex_lock(&ddata->lock);  	if (state->period != ddata->approx_period) { -		if (ddata->user_count != 1) { +		/* +		 * Don't let a 2nd user change the period underneath the 1st user. +		 * However if ddate->approx_period == 0 this is the first time we set +		 * any period, so let whoever gets here first set the period so other +		 * users who agree on the period won't fail. +		 */ +		if (ddata->user_count != 1 && ddata->approx_period) {  			mutex_unlock(&ddata->lock);  			return -EBUSY;  		}  |