Hi YueHaibing, On Fri, May 31, 2019 at 11:49 PM YueHaibing <yuehaib...@huawei.com> wrote: > > mutex_lock(&pca->lock); > - pwm = &pca->chip.pwms[offset]; > mutex_unlock(&pca->lock);
Thanks for noticing this issue. However it should be fixed differently. This was introduced by Uwe's clean-up patch: commit e926b12c611c2095c79 ("pwm: Clear chip_data in pwm_put()") But Uwe did not realize that in this case, the pwm chip_data is used as a synchronization mechanism between pwm and gpio. Moving the chip_data clear out of the mutex breaks this mechanism. I think the following would restore the mechanism: > mutex_lock(&pca->lock); > pwm = &pca->chip.pwms[offset]; > + pwm_set_chip_data(pwm, NULL); > mutex_unlock(&pca->lock); This would of course clear the pwm chip_data twice, once in the driver and once in the core, but that's not a problem. I'd like to hear Mika Westerberg's opinion, because he introduced this synchronization mechanism back in 2016. [Adding Mika] Sven