[PATCH v3 0/3] ASoC: ts3a227e control debounce times
From: Astrid Rost astridr@axis.com
PATCH 1 - convert ts3a227e bindings to yaml. PATCH 2 - add ts3a227e bindings to support debounce times. PATCH 3 - add ts3a227e driver to support debounce times.
v2 -> v3 Changes in the yaml file: - Renamed ts3a227e.yaml to ti,ts3a227e.yaml. - Changed "ti,micbias" default value to the reset register value. - Skipped some obvious descriptions. - Removed unused include. - Node name is "audio-controller". - Removed register value from the description.
Signed-off-by: Astrid Rost astrid.rost@axis.com
Astrid Rost (3): dt-bindings: sound: ti,ts3a227e: convert to yaml dt-bindings: sound: ti,s3a227e: add control of debounce ASoC: ts3a227e: add parameters to control debounce times
.../bindings/sound/ti,ts3a227e.yaml | 94 +++++++++++++++++++ .../devicetree/bindings/sound/ts3a227e.txt | 30 ------ sound/soc/codecs/ts3a227e.c | 58 ++++++++++-- 3 files changed, 146 insertions(+), 36 deletions(-) create mode 100644 Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml delete mode 100644 Documentation/devicetree/bindings/sound/ts3a227e.txt
Convert from ts3a227e.txt to yaml.
Signed-off-by: Astrid Rost astrid.rost@axis.com --- .../bindings/sound/ti,ts3a227e.yaml | 65 +++++++++++++++++++ .../devicetree/bindings/sound/ts3a227e.txt | 30 --------- 2 files changed, 65 insertions(+), 30 deletions(-) create mode 100644 Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml delete mode 100644 Documentation/devicetree/bindings/sound/ts3a227e.txt
diff --git a/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml b/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml new file mode 100644 index 000000000000..327d204cf957 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml @@ -0,0 +1,65 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/ti,ts3a227e.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Texas Instruments TS3A227E + Autonomous Audio Accessory Detection and Configuration Switch + +maintainers: + - Dylan Reid dgreid@chromium.org + +description: | + The TS3A227E detect headsets of 3-ring and 4-ring standards and + switches automatically to route the microphone correctly. It also + handles key press detection in accordance with the Android audio + headset specification v1.0. + +properties: + compatible: + enum: + - ti,ts3a227e + + reg: + const: 0x3b + + interrupts: + maxItems: 1 + + ti,micbias: + $ref: /schemas/types.yaml#/definitions/uint32 + description: Intended MICBIAS voltage (datasheet section 9.6.7). + enum: + - 0 # 2.1 V + - 1 # 2.2 V + - 2 # 2.3 V + - 3 # 2.4 V + - 4 # 2.5 V + - 5 # 2.6 V + - 6 # 2.7 V + - 7 # 2.8 V + default: 1 + +required: + - compatible + - reg + - interrupts + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/irq.h> + i2c { + #address-cells = <1>; + #size-cells = <0>; + codec: audio-controller@3b { + compatible = "ti,ts3a227e"; + reg = <0x3b>; + interrupt-parent = <&gpio1>; + interrupts = <3 IRQ_TYPE_LEVEL_LOW>; + }; + }; + +... diff --git a/Documentation/devicetree/bindings/sound/ts3a227e.txt b/Documentation/devicetree/bindings/sound/ts3a227e.txt deleted file mode 100644 index 21ab45bc7e8f..000000000000 --- a/Documentation/devicetree/bindings/sound/ts3a227e.txt +++ /dev/null @@ -1,30 +0,0 @@ -Texas Instruments TS3A227E -Autonomous Audio Accessory Detection and Configuration Switch - -The TS3A227E detect headsets of 3-ring and 4-ring standards and -switches automatically to route the microphone correctly. It also -handles key press detection in accordance with the Android audio -headset specification v1.0. - -Required properties: - - - compatible: Should contain "ti,ts3a227e". - - reg: The i2c address. Should contain <0x3b>. - - interrupts: Interrupt number for /INT pin from the 227e - -Optional properies: - - ti,micbias: Intended MICBIAS voltage (datasheet section 9.6.7). - Select 0/1/2/3/4/5/6/7 to specify MICBIAS voltage - 2.1V/2.2V/2.3V/2.4V/2.5V/2.6V/2.7V/2.8V - Default value is "1" (2.2V). - -Examples: - - i2c { - ts3a227e@3b { - compatible = "ti,ts3a227e"; - reg = <0x3b>; - interrupt-parent = <&gpio>; - interrupts = <3 IRQ_TYPE_LEVEL_LOW>; - }; - };
On 19/09/2022 13:12, Astrid Rost wrote:
Convert from ts3a227e.txt to yaml.
Signed-off-by: Astrid Rost astrid.rost@axis.com
Reviewed-by: Krzysztof Kozlowski krzysztof.kozlowski@linaro.org
Best regards, Krzysztof
Add devicetree parameters to control the insertion, release and press debounce times.
Signed-off-by: Astrid Rost astrid.rost@axis.com --- .../bindings/sound/ti,ts3a227e.yaml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml b/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml index 327d204cf957..76ce323ce965 100644 --- a/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml +++ b/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml @@ -41,6 +41,35 @@ properties: - 7 # 2.8 V default: 1
+ ti,debounce-release-ms: + description: key release debounce time in ms (datasheet section 9.6.7). + enum: + - 0 # 0 ms + - 20 # 20 ms + default: 20 + + ti,debounce-press-ms: + description: key press debounce time in ms (datasheet section 9.6.7). + enum: + - 2 # 2 ms + - 40 # 40 ms + - 80 # 80 ms + - 120 # 120 ms + default: 80 + + ti,debounce-insertion-ms: + description: headset insertion debounce time in ms (datasheet section 9.6.5). + enum: + - 2 # 2 ms + - 30 # 30 ms + - 60 # 60 ms + - 90 # 90 ms + - 120 # 120 ms + - 150 # 150 ms + - 1000 # 1 s + - 2000 # 2 s + default: 90 + required: - compatible - reg
On 19/09/2022 13:12, Astrid Rost wrote:
Add devicetree parameters to control the insertion, release and press debounce times.
Signed-off-by: Astrid Rost astrid.rost@axis.com
.../bindings/sound/ti,ts3a227e.yaml | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml b/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml index 327d204cf957..76ce323ce965 100644 --- a/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml +++ b/Documentation/devicetree/bindings/sound/ti,ts3a227e.yaml @@ -41,6 +41,35 @@ properties: - 7 # 2.8 V default: 1
- ti,debounce-release-ms:
- description: key release debounce time in ms (datasheet section 9.6.7).
- enum:
- 0 # 0 ms
- 20 # 20 ms
I don't see any improvements here.
Best regards, Krzysztof
+ ti,debounce-release-ms: + description: key release debounce time in ms (datasheet section 9.6.7). + enum: + - 0 # 0 ms + - 20 # 20 ms
I don't see any improvements here.
Sorry, I miss understood. I have now just kept the enum values.
Astrid
Add devicetree parameters to control the insert, release and press debounce times.
Signed-off-by: Astrid Rost astrid.rost@axis.com --- sound/soc/codecs/ts3a227e.c | 58 +++++++++++++++++++++++++++++++++---- 1 file changed, 52 insertions(+), 6 deletions(-)
diff --git a/sound/soc/codecs/ts3a227e.c b/sound/soc/codecs/ts3a227e.c index d8ab0810fceb..f2d1367c46ca 100644 --- a/sound/soc/codecs/ts3a227e.c +++ b/sound/soc/codecs/ts3a227e.c @@ -78,12 +78,20 @@ static const int ts3a227e_buttons[] = { #define ADC_COMPLETE_INT_DISABLE 0x04 #define INTB_DISABLE 0x08
+/* TS3A227E_REG_SETTING_1 0x4 */ +#define DEBOUNCE_INSERTION_SETTING_SFT (0) +#define DEBOUNCE_INSERTION_SETTING_MASK (0x7 << DEBOUNCE_PRESS_SETTING_SFT) + /* TS3A227E_REG_SETTING_2 0x05 */ #define KP_ENABLE 0x04
/* TS3A227E_REG_SETTING_3 0x06 */ -#define MICBIAS_SETTING_SFT (3) +#define MICBIAS_SETTING_SFT 3 #define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT) +#define DEBOUNCE_RELEASE_SETTING_SFT 2 +#define DEBOUNCE_RELEASE_SETTING_MASK (0x1 << DEBOUNCE_RELEASE_SETTING_SFT) +#define DEBOUNCE_PRESS_SETTING_SFT 0 +#define DEBOUNCE_PRESS_SETTING_MASK (0x3 << DEBOUNCE_PRESS_SETTING_SFT)
/* TS3A227E_REG_ACCESSORY_STATUS 0x0b */ #define TYPE_3_POLE 0x01 @@ -136,7 +144,7 @@ static bool ts3a227e_volatile_reg(struct device *dev, unsigned int reg) { switch (reg) { case TS3A227E_REG_INTERRUPT ... TS3A227E_REG_INTERRUPT_DISABLE: - case TS3A227E_REG_SETTING_2: + case TS3A227E_REG_SETTING_1 ... TS3A227E_REG_SETTING_2: case TS3A227E_REG_SWITCH_STATUS_1 ... TS3A227E_REG_ADC_OUTPUT: return true; default: @@ -269,14 +277,52 @@ static const struct regmap_config ts3a227e_regmap_config = { static int ts3a227e_parse_device_property(struct ts3a227e *ts3a227e, struct device *dev) { - u32 micbias; + u32 value; + u32 value_ms; + u32 setting3_value = 0; + u32 setting3_mask = 0; int err;
- err = device_property_read_u32(dev, "ti,micbias", &micbias); + err = device_property_read_u32(dev, "ti,micbias", &value); + if (!err) { + setting3_mask = MICBIAS_SETTING_MASK; + setting3_value = + (value << MICBIAS_SETTING_SFT) & MICBIAS_SETTING_MASK; + } + + err = device_property_read_u32(dev, "ti,debounce-release-ms", &value_ms); if (!err) { + value = (value_ms > 10); + setting3_mask |= DEBOUNCE_RELEASE_SETTING_MASK; + setting3_value |= (value << DEBOUNCE_RELEASE_SETTING_SFT) & + DEBOUNCE_RELEASE_SETTING_MASK; + } + + err = device_property_read_u32(dev, "ti,debounce-press-ms", &value_ms); + if (!err) { + value = (value_ms + 20) / 40; + if (value > 3) + value = 3; + setting3_mask |= DEBOUNCE_PRESS_SETTING_MASK; + setting3_value |= (value << DEBOUNCE_PRESS_SETTING_SFT) & + DEBOUNCE_PRESS_SETTING_MASK; + } + + if (setting3_mask) regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3, - MICBIAS_SETTING_MASK, - (micbias & 0x07) << MICBIAS_SETTING_SFT); + setting3_mask, setting3_value); + + err = device_property_read_u32(dev, "ti,debounce-insertion-ms", &value_ms); + if (!err) { + if (value_ms < 165) + value = (value_ms + 15) / 30; + else if (value_ms < 1500) + value = 6; + else + value = 7; + regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_1, + DEBOUNCE_INSERTION_SETTING_MASK, (value << DEBOUNCE_INSERTION_SETTING_SFT) + & DEBOUNCE_INSERTION_SETTING_MASK); }
return 0;
participants (3)
-
Astrid Rost
-
Astrid Rost
-
Krzysztof Kozlowski