]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ASoC: nau8825: make crosstalk function optional
authorJohn Hsu <supercraig0719@gmail.com>
Thu, 22 Jun 2017 03:57:55 +0000 (11:57 +0800)
committerMark Brown <broonie@kernel.org>
Fri, 23 Jun 2017 12:02:17 +0000 (13:02 +0100)
Make crosstalk functoin optional.
The jack detection can speed up without crosstalk detection.
Let the decision of function usage to platform design.

The patch helps the issue concern as follows:
Google issue 35574278: Chell_headphone pop back from S3

There is a concern as follows:
cras getting blocked for 2 seconds (worst-case 3 seconds)
As I understand, ChromeOS expects resume finishes in 1 seconds.
Video/Audio playing after 3 seconds of resume seems against the spec.
If we really have to make the choice I would choose pop noise instead
of waiting for 3 seconds.

Signed-off-by: John Hsu <KCHSU0@nuvoton.com>
Signed-off-by: John Hsu <supercraig0719@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/nau8825.c
sound/soc/codecs/nau8825.h

index 503a6d8130b7faf356786d096db52b377aad668b..a8c7a556a6a8b679bd8629af0330967bba3c970b 100644 (file)
@@ -1686,7 +1686,7 @@ static irqreturn_t nau8825_interrupt(int irq, void *data)
        } else if (active_irq & NAU8825_HEADSET_COMPLETION_IRQ) {
                if (nau8825_is_jack_inserted(regmap)) {
                        event |= nau8825_jack_insert(nau8825);
-                       if (!nau8825->high_imped) {
+                       if (!nau8825->xtalk_bypass && !nau8825->high_imped) {
                                /* Apply the cross talk suppression in the
                                 * headset without high impedance.
                                 */
@@ -2504,6 +2504,10 @@ static int nau8825_read_device_properties(struct device *dev,
                &nau8825->jack_eject_debounce);
        if (ret)
                nau8825->jack_eject_debounce = 0;
+       ret = device_property_read_u32(dev, "nuvoton,crosstalk-bypass",
+               &nau8825->xtalk_bypass);
+       if (ret)
+               nau8825->xtalk_bypass = 1;
 
        nau8825->mclk = devm_clk_get(dev, "mclk");
        if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) {
index 514fd13c2f4624bb96b237422dfd63fae52adf17..8aee5c8647aee153f151ac09175dc3f6a9fd25da 100644 (file)
@@ -476,6 +476,7 @@ struct nau8825 {
        int xtalk_event_mask;
        bool xtalk_protect;
        int imp_rms[NAU8825_XTALK_IMM];
+       int xtalk_bypass;
 };
 
 int nau8825_enable_jack_detect(struct snd_soc_codec *codec,