Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: da7219: Add Jack insertion detection polarity

Add support of selecting insertion detection polarity
- Default polarity (Low)
- Inverted polarity (High)

Correct the keywords of parsing `dlg,jack-det-rate`
bases on the new DT binding.

Signed-off-by: David Rau <David.Rau.opensource@dm.renesas.com>
Link: https://lore.kernel.org/r/20230523161821.4260-4-David.Rau.opensource@dm.renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

David Rau and committed by
Mark Brown
dc0ff0fa c28dc3bd

+44 -4
+6
include/sound/da7219-aad.h
··· 44 44 DA7219_AAD_JACK_INS_DEB_1S, 45 45 }; 46 46 47 + enum da7219_aad_jack_ins_det_pty { 48 + DA7219_AAD_JACK_INS_DET_PTY_LOW = 0, 49 + DA7219_AAD_JACK_INS_DET_PTY_HIGH, 50 + }; 51 + 47 52 enum da7219_aad_jack_det_rate { 48 53 DA7219_AAD_JACK_DET_RATE_32_64MS = 0, 49 54 DA7219_AAD_JACK_DET_RATE_64_128MS, ··· 85 80 enum da7219_aad_btn_cfg btn_cfg; 86 81 enum da7219_aad_mic_det_thr mic_det_thr; 87 82 enum da7219_aad_jack_ins_deb jack_ins_deb; 83 + enum da7219_aad_jack_ins_det_pty jack_ins_det_pty; 88 84 enum da7219_aad_jack_det_rate jack_det_rate; 89 85 enum da7219_aad_jack_rem_deb jack_rem_deb; 90 86
+38 -4
sound/soc/codecs/da7219-aad.c
··· 571 571 } 572 572 } 573 573 574 + static enum da7219_aad_jack_ins_det_pty 575 + da7219_aad_fw_jack_ins_det_pty(struct device *dev, const char *str) 576 + { 577 + if (!strcmp(str, "low")) { 578 + return DA7219_AAD_JACK_INS_DET_PTY_LOW; 579 + } else if (!strcmp(str, "high")) { 580 + return DA7219_AAD_JACK_INS_DET_PTY_HIGH; 581 + } else { 582 + dev_warn(dev, "Invalid jack insertion detection polarity"); 583 + return DA7219_AAD_JACK_INS_DET_PTY_LOW; 584 + } 585 + } 586 + 574 587 static enum da7219_aad_jack_det_rate 575 588 da7219_aad_fw_jack_det_rate(struct device *dev, const char *str) 576 589 { 577 - if (!strcmp(str, "32ms_64ms")) { 590 + if (!strcmp(str, "32_64")) { 578 591 return DA7219_AAD_JACK_DET_RATE_32_64MS; 579 - } else if (!strcmp(str, "64ms_128ms")) { 592 + } else if (!strcmp(str, "64_128")) { 580 593 return DA7219_AAD_JACK_DET_RATE_64_128MS; 581 - } else if (!strcmp(str, "128ms_256ms")) { 594 + } else if (!strcmp(str, "128_256")) { 582 595 return DA7219_AAD_JACK_DET_RATE_128_256MS; 583 - } else if (!strcmp(str, "256ms_512ms")) { 596 + } else if (!strcmp(str, "256_512")) { 584 597 return DA7219_AAD_JACK_DET_RATE_256_512MS; 585 598 } else { 586 599 dev_warn(dev, "Invalid jack detect rate"); ··· 700 687 da7219_aad_fw_jack_ins_deb(dev, fw_val32); 701 688 else 702 689 aad_pdata->jack_ins_deb = DA7219_AAD_JACK_INS_DEB_20MS; 690 + 691 + if (!fwnode_property_read_string(aad_np, "dlg,jack-ins-det-pty", &fw_str)) 692 + aad_pdata->jack_ins_det_pty = 693 + da7219_aad_fw_jack_ins_det_pty(dev, fw_str); 694 + else 695 + aad_pdata->jack_ins_det_pty = DA7219_AAD_JACK_INS_DET_PTY_LOW; 703 696 704 697 if (!fwnode_property_read_string(aad_np, "dlg,jack-det-rate", &fw_str)) 705 698 aad_pdata->jack_det_rate = ··· 868 849 mask |= DA7219_ADC_1_BIT_REPEAT_MASK; 869 850 } 870 851 snd_soc_component_update_bits(component, DA7219_ACCDET_CONFIG_7, mask, cfg); 852 + 853 + switch (aad_pdata->jack_ins_det_pty) { 854 + case DA7219_AAD_JACK_INS_DET_PTY_LOW: 855 + snd_soc_component_write(component, 0xF0, 0x8B); 856 + snd_soc_component_write(component, 0x75, 0x80); 857 + snd_soc_component_write(component, 0xF0, 0x00); 858 + break; 859 + case DA7219_AAD_JACK_INS_DET_PTY_HIGH: 860 + snd_soc_component_write(component, 0xF0, 0x8B); 861 + snd_soc_component_write(component, 0x75, 0x00); 862 + snd_soc_component_write(component, 0xF0, 0x00); 863 + break; 864 + default: 865 + break; 866 + } 871 867 } 872 868 } 873 869