Message ID | 1475831223-6006-3-git-send-email-frieder.schrempf@exceet.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Fri, Oct 07, 2016 at 09:08:17AM +0000, Schrempf Frieder wrote: > This patch adds the documentation for the devicetree bindings to set > the volume levels. > > Signed-off-by: Frieder Schrempf <frieder.schrempf@exceet.de> > --- > Changes in v2: > - split into 3 separate patches > - make volume properties optional > > .../devicetree/bindings/input/pwm-beeper.txt | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/Documentation/devicetree/bindings/input/pwm-beeper.txt b/Documentation/devicetree/bindings/input/pwm-beeper.txt > index be332ae..6d8ba4e 100644 > --- a/Documentation/devicetree/bindings/input/pwm-beeper.txt > +++ b/Documentation/devicetree/bindings/input/pwm-beeper.txt > @@ -5,3 +5,25 @@ Registers a PWM device as beeper. > Required properties: > - compatible: should be "pwm-beeper" > - pwms: phandle to the physical PWM device > + > +Optional properties: > +- volume-levels: Array of distinct volume levels. These need to be in the > + range of 0 to 500, while 0 means 0% duty cycle (mute) and 500 means > + 50% duty cycle (max volume). > + Please note that the actual volume of most beepers is highly > + non-linear, which means that low volume levels are probably somewhere > + in the range of 1 to 30 (0.1-3% duty cycle). What does the index correspond to? The linear volume? > +- default-volume-level: the default volume level (index into the > + array defined by the "volume-levels" property) > + > +The volume level can be set via sysfs under /sys/class/input/inputX/volume. > +The maximum volume level index can be read from /sys/class/input/inputX/max_volume_level. > + > +Example: > + > + pwm-beeper { > + compatible = "pwm-beeper"; > + pwms = <&pwm4 0 5000>; > + volume-levels = <0 8 20 40 500>; > + default-volume-level = <4>; > + }; > -- > 1.9.1 -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 10.10.2016 17:20, Rob Herring wrote: > On Fri, Oct 07, 2016 at 09:08:17AM +0000, Schrempf Frieder wrote: >> This patch adds the documentation for the devicetree bindings to set >> the volume levels. >> >> Signed-off-by: Frieder Schrempf <frieder.schrempf@exceet.de> >> --- >> Changes in v2: >> - split into 3 separate patches >> - make volume properties optional >> >> .../devicetree/bindings/input/pwm-beeper.txt | 22 ++++++++++++++++++++++ >> 1 file changed, 22 insertions(+) >> >> diff --git a/Documentation/devicetree/bindings/input/pwm-beeper.txt b/Documentation/devicetree/bindings/input/pwm-beeper.txt >> index be332ae..6d8ba4e 100644 >> --- a/Documentation/devicetree/bindings/input/pwm-beeper.txt >> +++ b/Documentation/devicetree/bindings/input/pwm-beeper.txt >> @@ -5,3 +5,25 @@ Registers a PWM device as beeper. >> Required properties: >> - compatible: should be "pwm-beeper" >> - pwms: phandle to the physical PWM device >> + >> +Optional properties: >> +- volume-levels: Array of distinct volume levels. These need to be in the >> + range of 0 to 500, while 0 means 0% duty cycle (mute) and 500 means >> + 50% duty cycle (max volume). >> + Please note that the actual volume of most beepers is highly >> + non-linear, which means that low volume levels are probably somewhere >> + in the range of 1 to 30 (0.1-3% duty cycle). > > What does the index correspond to? The linear volume? In most cases users probably need linear volume levels (e.g. 0%, 25%, 50%, 75%, 100%) and in this case the index would indeed correspond to the linear perceived volume. But also non-linear relations are possible (e.g. 0%, 20%, 100%), if the user needs for example "mute", "low", "high" as volume levels. The linearization (defining the corresponding duty cycle for each index) depends on the beeper and the perception of the user. For the example array definition below, I tried different duty cycles and found values of 0.8%, 2%, 4%, 50% to be approximately correspondent to perceived volume levels of 25%, 50%, 75%, 100% in my case. > >> +- default-volume-level: the default volume level (index into the >> + array defined by the "volume-levels" property) >> + >> +The volume level can be set via sysfs under /sys/class/input/inputX/volume. >> +The maximum volume level index can be read from /sys/class/input/inputX/max_volume_level. >> + >> +Example: >> + >> + pwm-beeper { >> + compatible = "pwm-beeper"; >> + pwms = <&pwm4 0 5000>; >> + volume-levels = <0 8 20 40 500>; >> + default-volume-level = <4>; >> + }; >> -- >> 1.9.1-- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Oct 11, 2016 at 3:17 AM, Schrempf Frieder <frieder.schrempf@exceet.de> wrote: > On 10.10.2016 17:20, Rob Herring wrote: >> On Fri, Oct 07, 2016 at 09:08:17AM +0000, Schrempf Frieder wrote: >>> This patch adds the documentation for the devicetree bindings to set >>> the volume levels. >>> >>> Signed-off-by: Frieder Schrempf <frieder.schrempf@exceet.de> >>> --- >>> Changes in v2: >>> - split into 3 separate patches >>> - make volume properties optional >>> >>> .../devicetree/bindings/input/pwm-beeper.txt | 22 ++++++++++++++++++++++ >>> 1 file changed, 22 insertions(+) >>> >>> diff --git a/Documentation/devicetree/bindings/input/pwm-beeper.txt b/Documentation/devicetree/bindings/input/pwm-beeper.txt >>> index be332ae..6d8ba4e 100644 >>> --- a/Documentation/devicetree/bindings/input/pwm-beeper.txt >>> +++ b/Documentation/devicetree/bindings/input/pwm-beeper.txt >>> @@ -5,3 +5,25 @@ Registers a PWM device as beeper. >>> Required properties: >>> - compatible: should be "pwm-beeper" >>> - pwms: phandle to the physical PWM device >>> + >>> +Optional properties: >>> +- volume-levels: Array of distinct volume levels. These need to be in the >>> + range of 0 to 500, while 0 means 0% duty cycle (mute) and 500 means >>> + 50% duty cycle (max volume). >>> + Please note that the actual volume of most beepers is highly >>> + non-linear, which means that low volume levels are probably somewhere >>> + in the range of 1 to 30 (0.1-3% duty cycle). >> >> What does the index correspond to? The linear volume? > > In most cases users probably need linear volume levels (e.g. 0%, 25%, > 50%, 75%, 100%) and in this case the index would indeed correspond to > the linear perceived volume. > > But also non-linear relations are possible (e.g. 0%, 20%, 100%), if the > user needs for example "mute", "low", "high" as volume levels. Exclude off/mute and this is still linear. Also, the user exposed levels could be a subset of the defined h/w levels. That should be independent of DT. > The linearization (defining the corresponding duty cycle for each index) > depends on the beeper and the perception of the user. This has to be a consistent interface across h/w to have a userspace that can work across h/w. For that, you have to define the binding as linear. Of course, it's all measured by perception and not completely accurate which is fine. > For the example array definition below, I tried different duty cycles > and found values of 0.8%, 2%, 4%, 50% to be approximately correspondent > to perceived volume levels of 25%, 50%, 75%, 100% in my case. > >> >>> +- default-volume-level: the default volume level (index into the >>> + array defined by the "volume-levels" property) >>> + >>> +The volume level can be set via sysfs under /sys/class/input/inputX/volume. >>> +The maximum volume level index can be read from /sys/class/input/inputX/max_volume_level. Also, drop this. Not relevant to the binding. Rob -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 11.10.2016 15:39, Rob Herring wrote: > On Tue, Oct 11, 2016 at 3:17 AM, Schrempf Frieder > <frieder.schrempf@exceet.de> wrote: >> On 10.10.2016 17:20, Rob Herring wrote: >>> On Fri, Oct 07, 2016 at 09:08:17AM +0000, Schrempf Frieder wrote: >>>> This patch adds the documentation for the devicetree bindings to set >>>> the volume levels. >>>> >>>> Signed-off-by: Frieder Schrempf <frieder.schrempf@exceet.de> >>>> --- >>>> Changes in v2: >>>> - split into 3 separate patches >>>> - make volume properties optional >>>> >>>> .../devicetree/bindings/input/pwm-beeper.txt | 22 ++++++++++++++++++++++ >>>> 1 file changed, 22 insertions(+) >>>> >>>> diff --git a/Documentation/devicetree/bindings/input/pwm-beeper.txt b/Documentation/devicetree/bindings/input/pwm-beeper.txt >>>> index be332ae..6d8ba4e 100644 >>>> --- a/Documentation/devicetree/bindings/input/pwm-beeper.txt >>>> +++ b/Documentation/devicetree/bindings/input/pwm-beeper.txt >>>> @@ -5,3 +5,25 @@ Registers a PWM device as beeper. >>>> Required properties: >>>> - compatible: should be "pwm-beeper" >>>> - pwms: phandle to the physical PWM device >>>> + >>>> +Optional properties: >>>> +- volume-levels: Array of distinct volume levels. These need to be in the >>>> + range of 0 to 500, while 0 means 0% duty cycle (mute) and 500 means >>>> + 50% duty cycle (max volume). >>>> + Please note that the actual volume of most beepers is highly >>>> + non-linear, which means that low volume levels are probably somewhere >>>> + in the range of 1 to 30 (0.1-3% duty cycle). >>> >>> What does the index correspond to? The linear volume? >> >> In most cases users probably need linear volume levels (e.g. 0%, 25%, >> 50%, 75%, 100%) and in this case the index would indeed correspond to >> the linear perceived volume. >> >> But also non-linear relations are possible (e.g. 0%, 20%, 100%), if the >> user needs for example "mute", "low", "high" as volume levels. > > Exclude off/mute and this is still linear. Also, the user exposed > levels could be a subset of the defined h/w levels. That should be > independent of DT. Ok > >> The linearization (defining the corresponding duty cycle for each index) >> depends on the beeper and the perception of the user. > > This has to be a consistent interface across h/w to have a userspace > that can work across h/w. For that, you have to define the binding as > linear. Of course, it's all measured by perception and not completely > accurate which is fine. I see. I will resend and change the description to make clear, that the volume-levels property is meant to specify linear volume levels. > >> For the example array definition below, I tried different duty cycles >> and found values of 0.8%, 2%, 4%, 50% to be approximately correspondent >> to perceived volume levels of 25%, 50%, 75%, 100% in my case. >> >>> >>>> +- default-volume-level: the default volume level (index into the >>>> + array defined by the "volume-levels" property) >>>> + >>>> +The volume level can be set via sysfs under /sys/class/input/inputX/volume. >>>> +The maximum volume level index can be read from /sys/class/input/inputX/max_volume_level. > > Also, drop this. Not relevant to the binding. Ok, I will drop this. > > Rob > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Make the driver accept switching volume levels via sysfs. This can be helpful if the beep/bell sound intensity needs to be adapted to the environment of the device. The number of volume levels available and their values can be specified via device tree (similar to pwm-backlight). The volume adjustment is done by changing the duty cycle of the pwm signal. Changes in v3: - update date - change description of volume-levels to be used for linear levels Frieder Schrempf (3): input: pwm-beeper: add feature to set volume via sysfs input: pwm-beeper: add documentation for volume devicetree bindings input: pwm-beeper: add devicetree bindings to set volume levels .../ABI/testing/sysfs-class-input-pwm-beeper | 17 +++ .../devicetree/bindings/input/pwm-beeper.txt | 20 ++++ drivers/input/misc/pwm-beeper.c | 116 ++++++++++++++++++++- 3 files changed, 151 insertions(+), 2 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-class-input-pwm-beeper
On Thu, Jan 19, 2017 at 04:24:07PM +0100, Frieder Schrempf wrote: > Make the driver accept switching volume levels via sysfs. > This can be helpful if the beep/bell sound intensity needs > to be adapted to the environment of the device. > > The number of volume levels available and their values can > be specified via device tree (similar to pwm-backlight). > > The volume adjustment is done by changing the duty cycle of > the pwm signal. I wonder how this all will mesh up with beepers that have dedicated amplifiers (support is being added by David Lechner). Thanks.
On 01/19/2017 03:37 PM, Dmitry Torokhov wrote: > On Thu, Jan 19, 2017 at 04:24:07PM +0100, Frieder Schrempf wrote: >> Make the driver accept switching volume levels via sysfs. >> This can be helpful if the beep/bell sound intensity needs >> to be adapted to the environment of the device. >> >> The number of volume levels available and their values can >> be specified via device tree (similar to pwm-backlight). >> >> The volume adjustment is done by changing the duty cycle of >> the pwm signal. > > I wonder how this all will mesh up with beepers that have dedicated > amplifiers (support is being added by David Lechner). This will work very well with it. I fact, it is a feature I would like to have but I was not sure about a good way to implement it. Please Cc: me on future revisions of this series and I will be glad to test it. One thing that would be nice would be for a more generic way to change the volume from userspace. Having a sysfs attribute on the platform device will work, but it requires very specific knowledge from any userspace program that wants to control the volume. Would it be possible to add an alsa mixer volume control or something like that? -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Make the driver accept switching volume levels via sysfs. This can be helpful if the beep/bell sound intensity needs to be adapted to the environment of the device. The number of volume levels available and their values can be specified via device tree (similar to pwm-backlight). The volume adjustment is done by changing the duty cycle of the pwm signal. Changes in v4: - move sysfs attributes from class/input to devices/pwm-beeper - rename max_volume_level to max_volume - move array allocation to probe function - rename attribute structs - remove needless code - update date - use generic device properties instead of dt properties Frieder Schrempf (3): input: pwm-beeper: add feature to set volume via sysfs input: pwm-beeper: add documentation for volume devicetree bindings input: pwm-beeper: add devicetree bindings to set volume levels Documentation/ABI/testing/sysfs-devices-pwm-beeper | 17 ++++ .../devicetree/bindings/input/pwm-beeper.txt | 20 ++++ drivers/input/misc/pwm-beeper.c | 111 ++++++++++++++++++++- 3 files changed, 146 insertions(+), 2 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-devices-pwm-beeper
Hello David, On 20.01.2017 20:11, David Lechner wrote: > On 01/19/2017 03:37 PM, Dmitry Torokhov wrote: >> On Thu, Jan 19, 2017 at 04:24:07PM +0100, Frieder Schrempf wrote: >>> Make the driver accept switching volume levels via sysfs. >>> This can be helpful if the beep/bell sound intensity needs >>> to be adapted to the environment of the device. >>> >>> The number of volume levels available and their values can >>> be specified via device tree (similar to pwm-backlight). >>> >>> The volume adjustment is done by changing the duty cycle of >>> the pwm signal. >> >> I wonder how this all will mesh up with beepers that have dedicated >> amplifiers (support is being added by David Lechner). > > This will work very well with it. I fact, it is a feature I would like > to have but I was not sure about a good way to implement it. Please Cc: > me on future revisions of this series and I will be glad to test it. I have just send v4. > > One thing that would be nice would be for a more generic way to change > the volume from userspace. Having a sysfs attribute on the platform > device will work, but it requires very specific knowledge from any > userspace program that wants to control the volume. Would it be possible > to add an alsa mixer volume control or something like that? An alsa mixer control for the pwm-beeper volume sounds nice, but unfortunately I have no idea how one would implement this, or if this is even possible. > -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 02/16/2017 03:15 PM, Frieder Schrempf wrote: > Hello David, > > On 20.01.2017 20:11, David Lechner wrote: >> On 01/19/2017 03:37 PM, Dmitry Torokhov wrote: >>> On Thu, Jan 19, 2017 at 04:24:07PM +0100, Frieder Schrempf wrote: >>>> Make the driver accept switching volume levels via sysfs. >>>> This can be helpful if the beep/bell sound intensity needs >>>> to be adapted to the environment of the device. >>>> >>>> The number of volume levels available and their values can >>>> be specified via device tree (similar to pwm-backlight). >>>> >>>> The volume adjustment is done by changing the duty cycle of >>>> the pwm signal. >>> >>> I wonder how this all will mesh up with beepers that have dedicated >>> amplifiers (support is being added by David Lechner). >> >> This will work very well with it. I fact, it is a feature I would like >> to have but I was not sure about a good way to implement it. Please Cc: >> me on future revisions of this series and I will be glad to test it. > > I have just send v4. >> >> One thing that would be nice would be for a more generic way to change >> the volume from userspace. Having a sysfs attribute on the platform >> device will work, but it requires very specific knowledge from any >> userspace program that wants to control the volume. Would it be possible >> to add an alsa mixer volume control or something like that? > > An alsa mixer control for the pwm-beeper volume sounds nice, but > unfortunately I have no idea how one would implement this, or if this is > even possible. >> I know it is possible because I have done it. ;-) https://github.com/ev3dev/lego-linux-drivers/blob/master/evb/evb_sound.c The driver in the link above does PCM playback using PWM. But, it also included an input device similar to pwm-beeper and it includes an ALSA volume control specifically for the beeper. -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Make the driver accept switching volume levels via sysfs. This can be helpful if the beep/bell sound intensity needs to be adapted to the environment of the device. The number of volume levels available and their values can be specified via device tree (similar to pwm-backlight). The volume adjustment is done by changing the duty cycle of the pwm signal. Changes in v5: - fix renaming of max_volume_level to max_volume - remove needless variable declaration Frieder Schrempf (3): input: pwm-beeper: add feature to set volume via sysfs input: pwm-beeper: add documentation for volume devicetree bindings input: pwm-beeper: add devicetree bindings to set volume levels Documentation/ABI/testing/sysfs-devices-pwm-beeper | 17 ++++ .../devicetree/bindings/input/pwm-beeper.txt | 20 ++++ drivers/input/misc/pwm-beeper.c | 110 ++++++++++++++++++++- 3 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 Documentation/ABI/testing/sysfs-devices-pwm-beeper
On 16.02.2017 22:44, David Lechner wrote: > On 02/16/2017 03:15 PM, Frieder Schrempf wrote: >> Hello David, >> >> On 20.01.2017 20:11, David Lechner wrote: >>> On 01/19/2017 03:37 PM, Dmitry Torokhov wrote: >>>> On Thu, Jan 19, 2017 at 04:24:07PM +0100, Frieder Schrempf wrote: >>>>> Make the driver accept switching volume levels via sysfs. >>>>> This can be helpful if the beep/bell sound intensity needs >>>>> to be adapted to the environment of the device. >>>>> >>>>> The number of volume levels available and their values can >>>>> be specified via device tree (similar to pwm-backlight). >>>>> >>>>> The volume adjustment is done by changing the duty cycle of >>>>> the pwm signal. >>>> >>>> I wonder how this all will mesh up with beepers that have dedicated >>>> amplifiers (support is being added by David Lechner). >>> >>> This will work very well with it. I fact, it is a feature I would like >>> to have but I was not sure about a good way to implement it. Please Cc: >>> me on future revisions of this series and I will be glad to test it. >> >> I have just send v4. >>> >>> One thing that would be nice would be for a more generic way to change >>> the volume from userspace. Having a sysfs attribute on the platform >>> device will work, but it requires very specific knowledge from any >>> userspace program that wants to control the volume. Would it be possible >>> to add an alsa mixer volume control or something like that? >> >> An alsa mixer control for the pwm-beeper volume sounds nice, but >> unfortunately I have no idea how one would implement this, or if this is >> even possible. >>> > > > I know it is possible because I have done it. ;-) > > https://github.com/ev3dev/lego-linux-drivers/blob/master/evb/evb_sound.c > > The driver in the link above does PCM playback using PWM. But, it also > included an input device similar to pwm-beeper and it includes an ALSA > volume control specifically for the beeper. Aha, thanks. Doesn't look too complicated. I think I will play with this a bit, when I have time. So maybe the sysfs volume control can be replaced with a proper volume mixer control at some point. -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/Documentation/devicetree/bindings/input/pwm-beeper.txt b/Documentation/devicetree/bindings/input/pwm-beeper.txt index be332ae..6d8ba4e 100644 --- a/Documentation/devicetree/bindings/input/pwm-beeper.txt +++ b/Documentation/devicetree/bindings/input/pwm-beeper.txt @@ -5,3 +5,25 @@ Registers a PWM device as beeper. Required properties: - compatible: should be "pwm-beeper" - pwms: phandle to the physical PWM device + +Optional properties: +- volume-levels: Array of distinct volume levels. These need to be in the + range of 0 to 500, while 0 means 0% duty cycle (mute) and 500 means + 50% duty cycle (max volume). + Please note that the actual volume of most beepers is highly + non-linear, which means that low volume levels are probably somewhere + in the range of 1 to 30 (0.1-3% duty cycle). +- default-volume-level: the default volume level (index into the + array defined by the "volume-levels" property) + +The volume level can be set via sysfs under /sys/class/input/inputX/volume. +The maximum volume level index can be read from /sys/class/input/inputX/max_volume_level. + +Example: + + pwm-beeper { + compatible = "pwm-beeper"; + pwms = <&pwm4 0 5000>; + volume-levels = <0 8 20 40 500>; + default-volume-level = <4>; + };
This patch adds the documentation for the devicetree bindings to set the volume levels. Signed-off-by: Frieder Schrempf <frieder.schrempf@exceet.de> --- Changes in v2: - split into 3 separate patches - make volume properties optional .../devicetree/bindings/input/pwm-beeper.txt | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)