diff mbox series

ASoC: da7219: Add Jack insertion detection polarity selection

Message ID 20230512081030.5138-1-David.Rau.opensource@dm.renesas.com
State Changes Requested, archived
Headers show
Series ASoC: da7219: Add Jack insertion detection polarity selection | expand

Checks

Context Check Description
robh/checkpatch warning total: 0 errors, 2 warnings, 85 lines checked
robh/patch-applied success

Commit Message

David Rau May 12, 2023, 8:10 a.m. UTC
DA7219 can support 2 kinds of insertion detection polarity
- Default polarity (Low)
- Inverted polarity (High)

This patch adds support for selecting insertion detection
polarity to the DT binding.

Signed-off-by: David Rau <David.Rau.opensource@dm.renesas.com>
---
 .../devicetree/bindings/sound/da7219.txt      |  3 ++
 include/sound/da7219-aad.h                    |  6 ++++
 sound/soc/codecs/da7219-aad.c                 | 34 +++++++++++++++++++
 3 files changed, 43 insertions(+)

Comments

Krzysztof Kozlowski May 12, 2023, 4:18 p.m. UTC | #1
On 12/05/2023 10:10, David Rau wrote:
> DA7219 can support 2 kinds of insertion detection polarity
> - Default polarity (Low)
> - Inverted polarity (High)
> 
> This patch adds support for selecting insertion detection
> polarity to the DT binding.
> 
> Signed-off-by: David Rau <David.Rau.opensource@dm.renesas.com>
> ---
>  .../devicetree/bindings/sound/da7219.txt      |  3 ++

Bindings are always separate patches.

Consider also converting them to DT schema first.

>  include/sound/da7219-aad.h                    |  6 ++++
>  sound/soc/codecs/da7219-aad.c                 | 34 +++++++++++++++++++
>  3 files changed, 43 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/sound/da7219.txt b/Documentation/devicetree/bindings/sound/da7219.txt
> index add1caf26ac2..357d1f61de1d 100644
> --- a/Documentation/devicetree/bindings/sound/da7219.txt
> +++ b/Documentation/devicetree/bindings/sound/da7219.txt



Best regards,
Krzysztof
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/sound/da7219.txt b/Documentation/devicetree/bindings/sound/da7219.txt
index add1caf26ac2..357d1f61de1d 100644
--- a/Documentation/devicetree/bindings/sound/da7219.txt
+++ b/Documentation/devicetree/bindings/sound/da7219.txt
@@ -52,6 +52,8 @@  Optional properties:
 	[<200>, <500>, <750>, <1000>]
 - dlg,jack-ins-deb : Debounce time for jack insertion (ms)
 	[<5>, <10>, <20>, <50>, <100>, <200>, <500>, <1000>]
+- dlg,jack-ins-det-pty : Polarity for jack insertion detection
+	["low", "high"]
 - dlg,jack-det-rate: Jack type detection latency (3/4 pole)
 	["32ms_64ms", "64ms_128ms", "128ms_256ms", "256ms_512ms"]
 - dlg,jack-rem-deb : Debounce time for jack removal (ms)
@@ -98,6 +100,7 @@  Example:
 			dlg,btn-cfg = <50>;
 			dlg,mic-det-thr = <500>;
 			dlg,jack-ins-deb = <20>;
+			dlg,jack-ins-det-pty = "low";
 			dlg,jack-det-rate = "32ms_64ms";
 			dlg,jack-rem-deb = <1>;
 
diff --git a/include/sound/da7219-aad.h b/include/sound/da7219-aad.h
index 24ee7baa2589..41320522daa2 100644
--- a/include/sound/da7219-aad.h
+++ b/include/sound/da7219-aad.h
@@ -44,6 +44,11 @@  enum da7219_aad_jack_ins_deb {
 	DA7219_AAD_JACK_INS_DEB_1S,
 };
 
+enum da7219_aad_jack_ins_det_pty {
+	DA7219_AAD_JACK_INS_DET_PTY_LOW = 0,
+	DA7219_AAD_JACK_INS_DET_PTY_HIGH,
+};
+
 enum da7219_aad_jack_det_rate {
 	DA7219_AAD_JACK_DET_RATE_32_64MS = 0,
 	DA7219_AAD_JACK_DET_RATE_64_128MS,
@@ -80,6 +85,7 @@  struct da7219_aad_pdata {
 	enum da7219_aad_btn_cfg btn_cfg;
 	enum da7219_aad_mic_det_thr mic_det_thr;
 	enum da7219_aad_jack_ins_deb jack_ins_deb;
+	enum da7219_aad_jack_ins_det_pty jack_ins_det_pty;
 	enum da7219_aad_jack_det_rate jack_det_rate;
 	enum da7219_aad_jack_rem_deb jack_rem_deb;
 
diff --git a/sound/soc/codecs/da7219-aad.c b/sound/soc/codecs/da7219-aad.c
index 993a0d00bc48..a61dc965f4fc 100644
--- a/sound/soc/codecs/da7219-aad.c
+++ b/sound/soc/codecs/da7219-aad.c
@@ -571,6 +571,19 @@  static enum da7219_aad_jack_ins_deb
 	}
 }
 
+static enum da7219_aad_jack_ins_det_pty
+	da7219_aad_fw_jack_ins_det_pty(struct device *dev, const char *str)
+{
+	if (!strcmp(str, "low")) {
+		return DA7219_AAD_JACK_INS_DET_PTY_LOW;
+	} else if (!strcmp(str, "high")) {
+		return DA7219_AAD_JACK_INS_DET_PTY_HIGH;
+	} else {
+		dev_warn(dev, "Invalid jack insertion detection polarity");
+		return DA7219_AAD_JACK_INS_DET_PTY_LOW;
+	}
+}
+
 static enum da7219_aad_jack_det_rate
 	da7219_aad_fw_jack_det_rate(struct device *dev, const char *str)
 {
@@ -688,6 +701,12 @@  static struct da7219_aad_pdata *da7219_aad_fw_to_pdata(struct device *dev)
 	else
 		aad_pdata->jack_ins_deb = DA7219_AAD_JACK_INS_DEB_20MS;
 
+	if (!fwnode_property_read_string(aad_np, "dlg,jack-ins-det-pty", &fw_str))
+		aad_pdata->jack_ins_det_pty =
+			da7219_aad_fw_jack_ins_det_pty(dev, fw_str);
+	else
+		aad_pdata->jack_ins_det_pty = DA7219_AAD_JACK_INS_DET_PTY_LOW;
+
 	if (!fwnode_property_read_string(aad_np, "dlg,jack-det-rate", &fw_str))
 		aad_pdata->jack_det_rate =
 			da7219_aad_fw_jack_det_rate(dev, fw_str);
@@ -849,6 +868,21 @@  static void da7219_aad_handle_pdata(struct snd_soc_component *component)
 			mask |= DA7219_ADC_1_BIT_REPEAT_MASK;
 		}
 		snd_soc_component_update_bits(component, DA7219_ACCDET_CONFIG_7, mask, cfg);
+
+		switch (aad_pdata->jack_ins_det_pty) {
+		case DA7219_AAD_JACK_INS_DET_PTY_LOW:
+			snd_soc_component_write(component, 0xF0, 0x8B);
+			snd_soc_component_write(component, 0x75, 0x80);
+			snd_soc_component_write(component, 0xF0, 0x00);
+			break;
+		case DA7219_AAD_JACK_INS_DET_PTY_HIGH:
+			snd_soc_component_write(component, 0xF0, 0x8B);
+			snd_soc_component_write(component, 0x75, 0x00);
+			snd_soc_component_write(component, 0xF0, 0x00);
+			break;
+		default:
+			break;
+		}
 	}
 }