Merge "ASoC: msm: Fix audio SSR on SDM660 external codec"
This commit is contained in:
commit
5901096e46
4 changed files with 26 additions and 10 deletions
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -2772,11 +2772,24 @@ static int msm_asoc_machine_probe(struct platform_device *pdev)
|
||||||
|
|
||||||
|
|
||||||
ret = devm_snd_soc_register_card(&pdev->dev, card);
|
ret = devm_snd_soc_register_card(&pdev->dev, card);
|
||||||
if (ret) {
|
if (ret == -EPROBE_DEFER) {
|
||||||
|
if (codec_reg_done) {
|
||||||
|
/*
|
||||||
|
* return failure as EINVAL since other codec
|
||||||
|
* registered sound card successfully.
|
||||||
|
* This avoids any further probe calls.
|
||||||
|
*/
|
||||||
|
ret = -EINVAL;
|
||||||
|
}
|
||||||
|
goto err;
|
||||||
|
} else if (ret) {
|
||||||
dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
|
dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n",
|
||||||
ret);
|
ret);
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
if (pdata->snd_card_val != INT_SND_CARD)
|
||||||
|
msm_ext_register_audio_notifier(pdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
err:
|
err:
|
||||||
if (pdata->us_euro_gpio > 0) {
|
if (pdata->us_euro_gpio > 0) {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -66,6 +66,7 @@ enum {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const struct snd_kcontrol_new msm_common_snd_controls[];
|
extern const struct snd_kcontrol_new msm_common_snd_controls[];
|
||||||
|
extern bool codec_reg_done;
|
||||||
struct sdm660_codec {
|
struct sdm660_codec {
|
||||||
void* (*get_afe_config_fn)(struct snd_soc_codec *codec,
|
void* (*get_afe_config_fn)(struct snd_soc_codec *codec,
|
||||||
enum afe_config_type config_type);
|
enum afe_config_type config_type);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -56,6 +56,7 @@
|
||||||
|
|
||||||
static int msm_ext_spk_control = 1;
|
static int msm_ext_spk_control = 1;
|
||||||
static struct wcd_mbhc_config *wcd_mbhc_cfg_ptr;
|
static struct wcd_mbhc_config *wcd_mbhc_cfg_ptr;
|
||||||
|
bool codec_reg_done;
|
||||||
|
|
||||||
struct msm_asoc_wcd93xx_codec {
|
struct msm_asoc_wcd93xx_codec {
|
||||||
void* (*get_afe_config_fn)(struct snd_soc_codec *codec,
|
void* (*get_afe_config_fn)(struct snd_soc_codec *codec,
|
||||||
|
@ -1722,6 +1723,7 @@ int msm_audrx_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
codec_reg_done = true;
|
||||||
done:
|
done:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -1735,10 +1737,12 @@ EXPORT_SYMBOL(msm_audrx_init);
|
||||||
/**
|
/**
|
||||||
* msm_ext_register_audio_notifier - register SSR notifier.
|
* msm_ext_register_audio_notifier - register SSR notifier.
|
||||||
*/
|
*/
|
||||||
void msm_ext_register_audio_notifier(void)
|
void msm_ext_register_audio_notifier(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
is_initial_boot = true;
|
||||||
|
spdev = pdev;
|
||||||
ret = audio_notifier_register("sdm660", AUDIO_NOTIFIER_ADSP_DOMAIN,
|
ret = audio_notifier_register("sdm660", AUDIO_NOTIFIER_ADSP_DOMAIN,
|
||||||
&service_nb);
|
&service_nb);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
@ -1777,10 +1781,8 @@ int msm_ext_cdc_init(struct platform_device *pdev,
|
||||||
ret = -EPROBE_DEFER;
|
ret = -EPROBE_DEFER;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
spdev = pdev;
|
|
||||||
platform_set_drvdata(pdev, *card);
|
platform_set_drvdata(pdev, *card);
|
||||||
snd_soc_card_set_drvdata(*card, pdata);
|
snd_soc_card_set_drvdata(*card, pdata);
|
||||||
is_initial_boot = true;
|
|
||||||
pdata->hph_en1_gpio = of_get_named_gpio(pdev->dev.of_node,
|
pdata->hph_en1_gpio = of_get_named_gpio(pdev->dev.of_node,
|
||||||
"qcom,hph-en1-gpio", 0);
|
"qcom,hph-en1-gpio", 0);
|
||||||
if (!gpio_is_valid(pdata->hph_en1_gpio))
|
if (!gpio_is_valid(pdata->hph_en1_gpio))
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
|
/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 and
|
* it under the terms of the GNU General Public License version 2 and
|
||||||
|
@ -33,7 +33,7 @@ int msm_ext_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
||||||
#ifdef CONFIG_SND_SOC_EXT_CODEC
|
#ifdef CONFIG_SND_SOC_EXT_CODEC
|
||||||
int msm_ext_cdc_init(struct platform_device *, struct msm_asoc_mach_data *,
|
int msm_ext_cdc_init(struct platform_device *, struct msm_asoc_mach_data *,
|
||||||
struct snd_soc_card **, struct wcd_mbhc_config *);
|
struct snd_soc_card **, struct wcd_mbhc_config *);
|
||||||
void msm_ext_register_audio_notifier(void);
|
void msm_ext_register_audio_notifier(struct platform_device *pdev);
|
||||||
void msm_ext_cdc_deinit(void);
|
void msm_ext_cdc_deinit(void);
|
||||||
#else
|
#else
|
||||||
inline int msm_ext_cdc_init(struct platform_device *pdev,
|
inline int msm_ext_cdc_init(struct platform_device *pdev,
|
||||||
|
@ -44,7 +44,7 @@ inline int msm_ext_cdc_init(struct platform_device *pdev,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void msm_ext_register_audio_notifier(void)
|
inline void msm_ext_register_audio_notifier(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
inline void msm_ext_cdc_deinit(void)
|
inline void msm_ext_cdc_deinit(void)
|
||||||
|
|
Loading…
Add table
Reference in a new issue