On 5/15/23 08:50, Traut Manuel LCPF-CH wrote:
Hi Marek,
Hi,
The PWM beeper volume can be controlled by adjusting the PWM duty cycle, expose volume setting via sysfs, so users can make the beeper quieter.
This patch adds sysfs attribute 'volume' in range 0..50000, i.e. from 0 to 50% in 1/1000th of percent steps, this resolution should be sufficient.
The reason for 50000 cap on volume or PWM duty cycle is because duty cycle above 50% again reduces the loudness, the PWM wave form is inverted > wave form of the one for duty cycle below 50% and the beeper gets quieter the closer the setting is to 100% . Hence, 50% cap where the wave form yields the loudest result.
Signed-off-by: Marek Vasut <marex@xxxxxxx>
---
An alternative option would be to extend the userspace input ABI, e.g. by using SND_TONE top 16bits to encode the duty cycle in 0..50000 range, and bottom 16bit to encode the existing frequency in Hz . Since frequency in Hz is likely to be below some 25 kHz for audible bell, this fits in 16bits just fine. Thoughts ?
I tend to not change existing user-space interfaces. I would prefer to have an additional event or using sysfs.
I am increasingly concerned about the race condition between change of
volume (via sysfs) and frequency (via SND_TONE) . So I would be banking
toward additional event, like SND_TONE_WITH_VOLUME or something along
those lines.
---
NOTE: This uses approach similar to [1], except it is much simpler.
[1] https://patchwork.kernel.org/project/linux-input/cover/20230201152128.614439-1-manuel.traut@xxxxxx/
This one is more complex, because the mapping between duty cycle and volume is not linear. Probably it depends also on the used beeper hardware which values are doing a significant change in volume. Therefore the patchset introduced a mapping between volume levels and duty cycle times in the device-tree to allow user-space applications to control the beeper volume hardware independently.
I wonder whether this mapping shouldn't be considered policy and left to
userspace to deal with, instead of swamping the kernel or DT with it ?
--
Best regards,
Marek Vasut