diff options
| -rw-r--r-- | Documentation/devicetree/bindings/sound/nau8825.txt | 4 | ||||
| -rw-r--r-- | sound/soc/codecs/nau8825.c | 23 | ||||
| -rw-r--r-- | sound/soc/codecs/nau8825.h | 2 |
3 files changed, 16 insertions, 13 deletions
diff --git a/Documentation/devicetree/bindings/sound/nau8825.txt b/Documentation/devicetree/bindings/sound/nau8825.txt index 2f5e973285a6..d16d96839bcb 100644 --- a/Documentation/devicetree/bindings/sound/nau8825.txt +++ b/Documentation/devicetree/bindings/sound/nau8825.txt | |||
| @@ -69,7 +69,7 @@ Optional properties: | |||
| 69 | - nuvoton,jack-insert-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms | 69 | - nuvoton,jack-insert-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms |
| 70 | - nuvoton,jack-eject-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms | 70 | - nuvoton,jack-eject-debounce: number from 0 to 7 that sets debounce time to 2^(n+2) ms |
| 71 | 71 | ||
| 72 | - nuvoton,crosstalk-bypass: make crosstalk function bypass if set. | 72 | - nuvoton,crosstalk-enable: make crosstalk function enable if set. |
| 73 | 73 | ||
| 74 | - clocks: list of phandle and clock specifier pairs according to common clock bindings for the | 74 | - clocks: list of phandle and clock specifier pairs according to common clock bindings for the |
| 75 | clocks described in clock-names | 75 | clocks described in clock-names |
| @@ -98,7 +98,7 @@ Example: | |||
| 98 | nuvoton,short-key-debounce = <2>; | 98 | nuvoton,short-key-debounce = <2>; |
| 99 | nuvoton,jack-insert-debounce = <7>; | 99 | nuvoton,jack-insert-debounce = <7>; |
| 100 | nuvoton,jack-eject-debounce = <7>; | 100 | nuvoton,jack-eject-debounce = <7>; |
| 101 | nuvoton,crosstalk-bypass; | 101 | nuvoton,crosstalk-enable; |
| 102 | 102 | ||
| 103 | clock-names = "mclk"; | 103 | clock-names = "mclk"; |
| 104 | clocks = <&tegra_car TEGRA210_CLK_CLK_OUT_2>; | 104 | clocks = <&tegra_car TEGRA210_CLK_CLK_OUT_2>; |
diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c index 714ce17da717..d3c1a02f1e15 100644 --- a/sound/soc/codecs/nau8825.c +++ b/sound/soc/codecs/nau8825.c | |||
| @@ -815,11 +815,12 @@ static void nau8825_xtalk_work(struct work_struct *work) | |||
| 815 | 815 | ||
| 816 | static void nau8825_xtalk_cancel(struct nau8825 *nau8825) | 816 | static void nau8825_xtalk_cancel(struct nau8825 *nau8825) |
| 817 | { | 817 | { |
| 818 | /* If the xtalk_protect is true, that means the process is still | 818 | /* If the crosstalk is eanbled and the process is on going, |
| 819 | * on going. The driver forces to cancel the cross talk task and | 819 | * the driver forces to cancel the crosstalk task and |
| 820 | * restores the configuration to original status. | 820 | * restores the configuration to original status. |
| 821 | */ | 821 | */ |
| 822 | if (nau8825->xtalk_protect) { | 822 | if (nau8825->xtalk_enable && nau8825->xtalk_state != |
| 823 | NAU8825_XTALK_DONE) { | ||
| 823 | cancel_work_sync(&nau8825->xtalk_work); | 824 | cancel_work_sync(&nau8825->xtalk_work); |
| 824 | nau8825_xtalk_clean(nau8825); | 825 | nau8825_xtalk_clean(nau8825); |
| 825 | } | 826 | } |
| @@ -1686,7 +1687,7 @@ static irqreturn_t nau8825_interrupt(int irq, void *data) | |||
| 1686 | } else if (active_irq & NAU8825_HEADSET_COMPLETION_IRQ) { | 1687 | } else if (active_irq & NAU8825_HEADSET_COMPLETION_IRQ) { |
| 1687 | if (nau8825_is_jack_inserted(regmap)) { | 1688 | if (nau8825_is_jack_inserted(regmap)) { |
| 1688 | event |= nau8825_jack_insert(nau8825); | 1689 | event |= nau8825_jack_insert(nau8825); |
| 1689 | if (!nau8825->xtalk_bypass && !nau8825->high_imped) { | 1690 | if (nau8825->xtalk_enable && !nau8825->high_imped) { |
| 1690 | /* Apply the cross talk suppression in the | 1691 | /* Apply the cross talk suppression in the |
| 1691 | * headset without high impedance. | 1692 | * headset without high impedance. |
| 1692 | */ | 1693 | */ |
| @@ -1732,8 +1733,10 @@ static irqreturn_t nau8825_interrupt(int irq, void *data) | |||
| 1732 | nau8825->xtalk_event_mask = event_mask; | 1733 | nau8825->xtalk_event_mask = event_mask; |
| 1733 | } | 1734 | } |
| 1734 | } else if (active_irq & NAU8825_IMPEDANCE_MEAS_IRQ) { | 1735 | } else if (active_irq & NAU8825_IMPEDANCE_MEAS_IRQ) { |
| 1735 | schedule_work(&nau8825->xtalk_work); | 1736 | if (nau8825->xtalk_enable) { |
| 1736 | clear_irq = NAU8825_IMPEDANCE_MEAS_IRQ; | 1737 | schedule_work(&nau8825->xtalk_work); |
| 1738 | clear_irq = NAU8825_IMPEDANCE_MEAS_IRQ; | ||
| 1739 | } | ||
| 1737 | } else if ((active_irq & NAU8825_JACK_INSERTION_IRQ_MASK) == | 1740 | } else if ((active_irq & NAU8825_JACK_INSERTION_IRQ_MASK) == |
| 1738 | NAU8825_JACK_INSERTION_DETECTED) { | 1741 | NAU8825_JACK_INSERTION_DETECTED) { |
| 1739 | /* One more step to check GPIO status directly. Thus, the | 1742 | /* One more step to check GPIO status directly. Thus, the |
| @@ -2440,8 +2443,8 @@ static void nau8825_print_device_properties(struct nau8825 *nau8825) | |||
| 2440 | nau8825->jack_insert_debounce); | 2443 | nau8825->jack_insert_debounce); |
| 2441 | dev_dbg(dev, "jack-eject-debounce: %d\n", | 2444 | dev_dbg(dev, "jack-eject-debounce: %d\n", |
| 2442 | nau8825->jack_eject_debounce); | 2445 | nau8825->jack_eject_debounce); |
| 2443 | dev_dbg(dev, "crosstalk-bypass: %d\n", | 2446 | dev_dbg(dev, "crosstalk-enable: %d\n", |
| 2444 | nau8825->xtalk_bypass); | 2447 | nau8825->xtalk_enable); |
| 2445 | } | 2448 | } |
| 2446 | 2449 | ||
| 2447 | static int nau8825_read_device_properties(struct device *dev, | 2450 | static int nau8825_read_device_properties(struct device *dev, |
| @@ -2506,8 +2509,8 @@ static int nau8825_read_device_properties(struct device *dev, | |||
| 2506 | &nau8825->jack_eject_debounce); | 2509 | &nau8825->jack_eject_debounce); |
| 2507 | if (ret) | 2510 | if (ret) |
| 2508 | nau8825->jack_eject_debounce = 0; | 2511 | nau8825->jack_eject_debounce = 0; |
| 2509 | nau8825->xtalk_bypass = device_property_read_bool(dev, | 2512 | nau8825->xtalk_enable = device_property_read_bool(dev, |
| 2510 | "nuvoton,crosstalk-bypass"); | 2513 | "nuvoton,crosstalk-enable"); |
| 2511 | 2514 | ||
| 2512 | nau8825->mclk = devm_clk_get(dev, "mclk"); | 2515 | nau8825->mclk = devm_clk_get(dev, "mclk"); |
| 2513 | if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) { | 2516 | if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) { |
diff --git a/sound/soc/codecs/nau8825.h b/sound/soc/codecs/nau8825.h index 8aee5c8647ae..199d6ea4dcdc 100644 --- a/sound/soc/codecs/nau8825.h +++ b/sound/soc/codecs/nau8825.h | |||
| @@ -476,7 +476,7 @@ struct nau8825 { | |||
| 476 | int xtalk_event_mask; | 476 | int xtalk_event_mask; |
| 477 | bool xtalk_protect; | 477 | bool xtalk_protect; |
| 478 | int imp_rms[NAU8825_XTALK_IMM]; | 478 | int imp_rms[NAU8825_XTALK_IMM]; |
| 479 | int xtalk_bypass; | 479 | int xtalk_enable; |
| 480 | }; | 480 | }; |
| 481 | 481 | ||
| 482 | int nau8825_enable_jack_detect(struct snd_soc_codec *codec, | 482 | int nau8825_enable_jack_detect(struct snd_soc_codec *codec, |
