|
@@ -815,11 +815,12 @@ static void nau8825_xtalk_work(struct work_struct *work)
|
|
|
|
|
|
static void nau8825_xtalk_cancel(struct nau8825 *nau8825)
|
|
|
{
|
|
|
- /* If the xtalk_protect is true, that means the process is still
|
|
|
- * on going. The driver forces to cancel the cross talk task and
|
|
|
+ /* If the crosstalk is eanbled and the process is on going,
|
|
|
+ * the driver forces to cancel the crosstalk task and
|
|
|
* restores the configuration to original status.
|
|
|
*/
|
|
|
- if (nau8825->xtalk_protect) {
|
|
|
+ if (nau8825->xtalk_enable && nau8825->xtalk_state !=
|
|
|
+ NAU8825_XTALK_DONE) {
|
|
|
cancel_work_sync(&nau8825->xtalk_work);
|
|
|
nau8825_xtalk_clean(nau8825);
|
|
|
}
|
|
@@ -1686,7 +1687,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->xtalk_bypass && !nau8825->high_imped) {
|
|
|
+ if (nau8825->xtalk_enable && !nau8825->high_imped) {
|
|
|
/* Apply the cross talk suppression in the
|
|
|
* headset without high impedance.
|
|
|
*/
|
|
@@ -1732,8 +1733,10 @@ static irqreturn_t nau8825_interrupt(int irq, void *data)
|
|
|
nau8825->xtalk_event_mask = event_mask;
|
|
|
}
|
|
|
} else if (active_irq & NAU8825_IMPEDANCE_MEAS_IRQ) {
|
|
|
- schedule_work(&nau8825->xtalk_work);
|
|
|
- clear_irq = NAU8825_IMPEDANCE_MEAS_IRQ;
|
|
|
+ if (nau8825->xtalk_enable) {
|
|
|
+ schedule_work(&nau8825->xtalk_work);
|
|
|
+ clear_irq = NAU8825_IMPEDANCE_MEAS_IRQ;
|
|
|
+ }
|
|
|
} else if ((active_irq & NAU8825_JACK_INSERTION_IRQ_MASK) ==
|
|
|
NAU8825_JACK_INSERTION_DETECTED) {
|
|
|
/* One more step to check GPIO status directly. Thus, the
|
|
@@ -2440,8 +2443,8 @@ static void nau8825_print_device_properties(struct nau8825 *nau8825)
|
|
|
nau8825->jack_insert_debounce);
|
|
|
dev_dbg(dev, "jack-eject-debounce: %d\n",
|
|
|
nau8825->jack_eject_debounce);
|
|
|
- dev_dbg(dev, "crosstalk-bypass: %d\n",
|
|
|
- nau8825->xtalk_bypass);
|
|
|
+ dev_dbg(dev, "crosstalk-enable: %d\n",
|
|
|
+ nau8825->xtalk_enable);
|
|
|
}
|
|
|
|
|
|
static int nau8825_read_device_properties(struct device *dev,
|
|
@@ -2506,8 +2509,8 @@ static int nau8825_read_device_properties(struct device *dev,
|
|
|
&nau8825->jack_eject_debounce);
|
|
|
if (ret)
|
|
|
nau8825->jack_eject_debounce = 0;
|
|
|
- nau8825->xtalk_bypass = device_property_read_bool(dev,
|
|
|
- "nuvoton,crosstalk-bypass");
|
|
|
+ nau8825->xtalk_enable = device_property_read_bool(dev,
|
|
|
+ "nuvoton,crosstalk-enable");
|
|
|
|
|
|
nau8825->mclk = devm_clk_get(dev, "mclk");
|
|
|
if (PTR_ERR(nau8825->mclk) == -EPROBE_DEFER) {
|