mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 09:04:39 +02:00
ASoC: codecs: wcd938x: fix mux error handling
Merge series from Johan Hovold <johan+linaro@kernel.org>:
A recent change added support for looking up an optional mux control
before falling back to gpio control for us-euro plug selection.
The mux framework does however not yet support optional muxes and an
error message is now incorrectly logged on machines like the Lenovo
ThinkPad X13s which do not have one:
wcd938x_codec audio-codec: /audio-codec: failed to get mux-control (0)
Suppress the bogus error and add the missing mux error handling by
making sure that the 'mux-controls' DT property is present before
looking up the mux control.
Included is also a related cleanup.
This commit is contained in:
commit
b009011500
|
|
@ -3270,25 +3270,24 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device
|
|||
return dev_err_probe(dev, PTR_ERR(wcd938x->reset_gpio),
|
||||
"Failed to get reset gpio\n");
|
||||
|
||||
wcd938x->us_euro_mux = devm_mux_control_get(dev, NULL);
|
||||
if (IS_ERR(wcd938x->us_euro_mux)) {
|
||||
if (PTR_ERR(wcd938x->us_euro_mux) == -EPROBE_DEFER)
|
||||
return -EPROBE_DEFER;
|
||||
if (of_property_present(dev->of_node, "mux-controls")) {
|
||||
wcd938x->us_euro_mux = devm_mux_control_get(dev, NULL);
|
||||
if (IS_ERR(wcd938x->us_euro_mux)) {
|
||||
ret = PTR_ERR(wcd938x->us_euro_mux);
|
||||
return dev_err_probe(dev, ret, "failed to get mux control\n");
|
||||
}
|
||||
|
||||
/* mux is optional and now fallback to using gpio */
|
||||
wcd938x->us_euro_mux = NULL;
|
||||
ret = mux_control_try_select(wcd938x->us_euro_mux, wcd938x->mux_state);
|
||||
if (ret) {
|
||||
dev_err(dev, "Error (%d) Unable to select us/euro mux state\n", ret);
|
||||
return ret;
|
||||
}
|
||||
wcd938x->mux_setup_done = true;
|
||||
} else {
|
||||
wcd938x->us_euro_gpio = devm_gpiod_get_optional(dev, "us-euro", GPIOD_OUT_LOW);
|
||||
if (IS_ERR(wcd938x->us_euro_gpio))
|
||||
return dev_err_probe(dev, PTR_ERR(wcd938x->us_euro_gpio),
|
||||
"us-euro swap Control GPIO not found\n");
|
||||
} else {
|
||||
ret = mux_control_try_select(wcd938x->us_euro_mux, wcd938x->mux_state);
|
||||
if (ret) {
|
||||
dev_err(dev, "Error (%d) Unable to select us/euro mux state\n", ret);
|
||||
wcd938x->mux_setup_done = false;
|
||||
return ret;
|
||||
}
|
||||
wcd938x->mux_setup_done = true;
|
||||
}
|
||||
|
||||
cfg->swap_gnd_mic = wcd938x_swap_gnd_mic;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user