ASoC: wsa881x: Add loadable module support for WSA
Add support to compile WSA as a loadable module. Move WSA kconfig tristate selection under the machine driver loadable module kconfig. CRs-fixed: 2036684 Change-Id: I810f22d3e9ab4849ca86e8444115f1f84c6a6a51 Signed-off-by: Karthikeyan Mani <kmani@codeaurora.org>
This commit is contained in:
@@ -742,10 +742,14 @@ config SND_SOC_WCD934X_MBHC
|
||||
depends on SND_SOC_WCD934X
|
||||
select SND_SOC_WCD_MBHC
|
||||
|
||||
config REGMAP_SWR
|
||||
tristate
|
||||
default y
|
||||
|
||||
config SND_SOC_WSA881X
|
||||
tristate
|
||||
depends on REGMAP_SWR
|
||||
tristate
|
||||
select MSM_CDC_PINCTRL
|
||||
select REGMAP_SWR
|
||||
|
||||
config SND_SOC_WSA881X_ANALOG
|
||||
tristate
|
||||
|
||||
@@ -1123,54 +1123,6 @@ static struct snd_soc_codec_driver soc_codec_dev_wsa881x = {
|
||||
.get_regmap = wsa881x_get_regmap,
|
||||
};
|
||||
|
||||
static int wsa881x_swr_startup(struct swr_device *swr_dev)
|
||||
{
|
||||
int ret = 0;
|
||||
u8 devnum = 0;
|
||||
struct wsa881x_priv *wsa881x;
|
||||
|
||||
wsa881x = swr_get_dev_data(swr_dev);
|
||||
if (!wsa881x) {
|
||||
dev_err(&swr_dev->dev, "%s: wsa881x is NULL\n", __func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Add 5msec delay to provide sufficient time for
|
||||
* soundwire auto enumeration of slave devices as
|
||||
* as per HW requirement.
|
||||
*/
|
||||
usleep_range(5000, 5010);
|
||||
ret = swr_get_logical_dev_num(swr_dev, swr_dev->addr, &devnum);
|
||||
if (ret) {
|
||||
dev_dbg(&swr_dev->dev,
|
||||
"%s get devnum %d for dev addr %lx failed\n",
|
||||
__func__, devnum, swr_dev->addr);
|
||||
goto err;
|
||||
}
|
||||
swr_dev->dev_num = devnum;
|
||||
|
||||
wsa881x->regmap = devm_regmap_init_swr(swr_dev,
|
||||
&wsa881x_regmap_config);
|
||||
if (IS_ERR(wsa881x->regmap)) {
|
||||
ret = PTR_ERR(wsa881x->regmap);
|
||||
dev_err(&swr_dev->dev, "%s: regmap_init failed %d\n",
|
||||
__func__, ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = snd_soc_register_codec(&swr_dev->dev, &soc_codec_dev_wsa881x,
|
||||
NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&swr_dev->dev, "%s: Codec registration failed\n",
|
||||
__func__);
|
||||
goto err;
|
||||
}
|
||||
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int wsa881x_gpio_ctrl(struct wsa881x_priv *wsa881x, bool enable)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -1232,6 +1184,7 @@ static int wsa881x_swr_probe(struct swr_device *pdev)
|
||||
{
|
||||
int ret = 0;
|
||||
struct wsa881x_priv *wsa881x;
|
||||
u8 devnum = 0;
|
||||
|
||||
wsa881x = devm_kzalloc(&pdev->dev, sizeof(struct wsa881x_priv),
|
||||
GFP_KERNEL);
|
||||
@@ -1291,8 +1244,43 @@ static int wsa881x_swr_probe(struct swr_device *pdev)
|
||||
&codec_debug_ops);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Add 5msec delay to provide sufficient time for
|
||||
* soundwire auto enumeration of slave devices as
|
||||
* as per HW requirement.
|
||||
*/
|
||||
usleep_range(5000, 5010);
|
||||
ret = swr_get_logical_dev_num(pdev, pdev->addr, &devnum);
|
||||
if (ret) {
|
||||
dev_dbg(&pdev->dev,
|
||||
"%s get devnum %d for dev addr %lx failed\n",
|
||||
__func__, devnum, pdev->addr);
|
||||
goto dev_err;
|
||||
}
|
||||
pdev->dev_num = devnum;
|
||||
|
||||
wsa881x->regmap = devm_regmap_init_swr(pdev,
|
||||
&wsa881x_regmap_config);
|
||||
if (IS_ERR(wsa881x->regmap)) {
|
||||
ret = PTR_ERR(wsa881x->regmap);
|
||||
dev_err(&pdev->dev, "%s: regmap_init failed %d\n",
|
||||
__func__, ret);
|
||||
goto dev_err;
|
||||
}
|
||||
|
||||
ret = snd_soc_register_codec(&pdev->dev, &soc_codec_dev_wsa881x,
|
||||
NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "%s: Codec registration failed\n",
|
||||
__func__);
|
||||
goto dev_err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
dev_err:
|
||||
swr_remove_device(pdev);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
@@ -1425,7 +1413,6 @@ static struct swr_driver wsa881x_codec_driver = {
|
||||
.device_up = wsa881x_swr_up,
|
||||
.device_down = wsa881x_swr_down,
|
||||
.reset_device = wsa881x_swr_reset,
|
||||
.startup = wsa881x_swr_startup,
|
||||
};
|
||||
|
||||
static int __init wsa881x_codec_init(void)
|
||||
|
||||
@@ -192,7 +192,7 @@ config SND_SOC_MSM8996
|
||||
|
||||
config SND_SOC_MACHINE_MSM8998
|
||||
tristate "SoC Machine driver for MSM8998 boards"
|
||||
|
||||
select SND_SOC_WSA881X
|
||||
help
|
||||
To enable the machine driver and the
|
||||
corresponding DAI-links
|
||||
@@ -212,7 +212,6 @@ config SND_SOC_MSM8998
|
||||
select MSM_QDSP6V2_CODECS
|
||||
select SND_SOC_WCD9335
|
||||
select SND_SOC_WCD934X
|
||||
select SND_SOC_WSA881X
|
||||
select SND_SOC_MSM_HDMI_CODEC_RX
|
||||
select DTS_SRS_TM
|
||||
select QTI_PP
|
||||
|
||||
Reference in New Issue
Block a user