diff options
author | Jonathan Marek <jonathan@marek.ca> | 2020-06-08 12:54:38 -0400 |
---|---|---|
committer | Jonathan Marek <jonathan@marek.ca> | 2020-06-11 23:36:29 -0400 |
commit | 93909221e2334db4c76d0b74a980e856848b778c (patch) | |
tree | eb5ba479d441159e214393b6555f924f9cf8460a | |
parent | 878523ab8377f38afbba302c7755098f21de7735 (diff) |
HACK: soundwire hacks
* Make sure it probes after LPI pinctrl (pinctrl node is set in dts so why
doesn't it happen??)
* Only enable DAC channels (need this to make it work with 2x WSA config)
Signed-off-by: Jonathan Marek <jonathan@marek.ca>
-rw-r--r-- | drivers/soundwire/qcom.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index 58ffb46e0d648..6b3d18ad282b8 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -15,6 +15,7 @@ #include <linux/slimbus.h> #include <linux/soundwire/sdw.h> #include <linux/soundwire/sdw_registers.h> +#include <linux/pinctrl/consumer.h> #include <sound/pcm_params.h> #include <sound/soc.h> #include "bus.h" @@ -420,6 +421,9 @@ static int qcom_swrm_port_enable(struct sdw_bus *bus, ctrl->reg_read(ctrl, reg, &val); + if (enable_ch->ch_mask != 1) + return 0; + if (enable_ch->enable) val |= (enable_ch->ch_mask << SWRM_DP_PORT_CTRL_EN_CHAN_SHFT); else @@ -769,6 +773,7 @@ static int qcom_swrm_probe(struct platform_device *pdev) struct sdw_bus_params *params; struct qcom_swrm_ctrl *ctrl; struct resource *res; + struct pinctrl *pinctrl; int ret; u32 val; @@ -809,6 +814,15 @@ static int qcom_swrm_probe(struct platform_device *pdev) goto err_init; } + /* defer probe if pinctrl wasn't ready.. */ + pinctrl = devm_pinctrl_get(dev); + if (IS_ERR(pinctrl)) { + /* getting -ENODEV for some reason.. */ + return -EPROBE_DEFER; + } + + pinctrl_select_default_state(dev); + clk_prepare_enable(ctrl->hclk); ctrl->dev = dev; |