[alsa-devel] [PATCH v3 04/22] ASoC: rt5651: Allow specifying over-current threshold through a device-property
Hans de Goede
hdegoede at redhat.com
Sun Mar 4 15:35:52 CET 2018
OVer-Current-Detection (OVCD) for the micbias current is used to detect
if an inserted jack is a headset or headphones (mic shorted to ground).
Some boards may need different values for the OVCD current threshold
because of a resistor on the board in serial with or parallel to the
jack mic contact.
This commit adds support for configuring the OCVD current threshold
through the "realtek,over-current-threshold-microamp" device-property.
Note this commit changes the default value from 600uA to 2000uA,
because testing has shown 600uA to be a poor default.
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
Changes in v3:
-Split out the dt-bindings documentation for the new properties into a
separate patch
-Append "-microamp to the device-property name
-Split out seeting of OCVD scale-factor into a separate patch, keeping
only OVCD current threshold configuration in this patch
---
sound/soc/codecs/rt5651.c | 22 +++++++++++++++++++++-
sound/soc/codecs/rt5651.h | 1 +
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/rt5651.c b/sound/soc/codecs/rt5651.c
index f80b3da4667f..19f7c89d1e7a 100644
--- a/sound/soc/codecs/rt5651.c
+++ b/sound/soc/codecs/rt5651.c
@@ -1638,7 +1638,7 @@ static int rt5651_set_jack(struct snd_soc_component *component,
RT5651_PWR_CLK12M_MASK |
RT5651_PWR_MB_MASK,
RT5651_MIC1_OVCD_EN |
- RT5651_MIC1_OVTH_600UA |
+ rt5651->ovcd_th |
RT5651_PWR_MB_PU |
RT5651_PWR_CLK12M_PU);
@@ -1684,6 +1684,26 @@ static void rt5651_apply_properties(struct snd_soc_component *component)
if (device_property_read_u32(component->dev,
"realtek,jack-detect-source", &val) == 0)
rt5651->jd_src = val;
+
+ rt5651->ovcd_th = RT5651_MIC1_OVTH_2000UA;
+
+ if (device_property_read_u32(component->dev,
+ "realtek,over-current-threshold-microamp", &val) == 0) {
+ switch (val) {
+ case 600:
+ rt5651->ovcd_th = RT5651_MIC1_OVTH_600UA;
+ break;
+ case 1500:
+ rt5651->ovcd_th = RT5651_MIC1_OVTH_1500UA;
+ break;
+ case 2000:
+ rt5651->ovcd_th = RT5651_MIC1_OVTH_2000UA;
+ break;
+ default:
+ dev_warn(component->dev, "Warning: Invalid over-current-threshold-microamp value: %d, defaulting to 2000uA\n",
+ val);
+ }
+ }
}
static int rt5651_probe(struct snd_soc_component *component)
diff --git a/sound/soc/codecs/rt5651.h b/sound/soc/codecs/rt5651.h
index f3158488fc89..9cd5c279d0d6 100644
--- a/sound/soc/codecs/rt5651.h
+++ b/sound/soc/codecs/rt5651.h
@@ -2064,6 +2064,7 @@ struct rt5651_priv {
struct snd_soc_jack *hp_jack;
struct delayed_work jack_detect_work;
enum rt5651_jd_src jd_src;
+ unsigned int ovcd_th;
int irq;
int sysclk;
--
2.14.3
More information about the Alsa-devel
mailing list