On Tue, Dec 8, 2020 at 11:57 AM Thierry Reding <thierry.red...@gmail.com> wrote:
>
> Is this really that complicated? I sounds to me like the only thing that
> you need is to have some sort of usage count for the prescaler. Whenever
> you want to use the prescaler you check that usage count. If it is zero,
> then you can just set it to whatever you need. If it isn't zero, that
> means somebody else is already using it and you can't change it, which
> means you have to check if you're trying to request the value that's
> already set. If so, you can succeed, but otherwise you'll have to fail.

+1
I think your suggestion is an elegant solution to get the required behaviour.

One possible complication is synchronization. The sysfs interface has a lock
protecting against concurrent pwm_apply() calls. But the in-kernel
API (e.g. pwm_apply_state()) doesn't seem to. This is not normally a problem
when pwm bits are strictly separated. But in this case we have shared state
(prescale value and use count), so we probably need to protect pwm_apply()
with a mutex?

Not sure if it is currently possible *in practice* for two regulator consumer
drivers to call pwm_apply() from different threads. But Linux is slowly moving
towards asynchronous probing.

Uwe and Thierry, what is your opinion? Do you think we need to worry about
synchronization?

Reply via email to