mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-23 01:31:30 +03:00
tegra-alt: use actual rate values to configure SFC
Use actual values for sample rate instead of strings/enums when configuring SFC. Bug 200082413 Bug 200086391 Bug 200100093 Change-Id: I736a31a9569e0353e059417f10f54e9e4efa1185 Signed-off-by: Viraj Karandikar <vkarandikar@nvidia.com> Reviewed-on: http://git-master/r/746656 (cherry picked from commit eb4ba049cfc2ea2fb052a9e18484d1d9b4eb329b) Reviewed-on: http://git-master/r/751861
This commit is contained in:
committed by
Sameer Pujar
parent
810f0dbe87
commit
f412a0819f
@@ -46,6 +46,22 @@ static const struct reg_default tegra210_sfc_reg_defaults[] = {
|
|||||||
{ TEGRA210_SFC_AHUBRAMCTL_SFC_CTRL, 0x00004000},
|
{ TEGRA210_SFC_AHUBRAMCTL_SFC_CTRL, 0x00004000},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int tegra210_sfc_rates[] = {
|
||||||
|
8000, /* #define TEGRA210_SFC_FS8 0 */
|
||||||
|
11025, /* #define TEGRA210_SFC_FS11_025 1 */
|
||||||
|
16000, /* #define TEGRA210_SFC_FS16 2 */
|
||||||
|
22050, /* #define TEGRA210_SFC_FS22_05 3 */
|
||||||
|
24000, /* #define TEGRA210_SFC_FS24 4 */
|
||||||
|
32000, /* #define TEGRA210_SFC_FS32 5 */
|
||||||
|
44100, /* #define TEGRA210_SFC_FS44_1 6 */
|
||||||
|
48000, /* #define TEGRA210_SFC_FS48 7 */
|
||||||
|
64000, /* #define TEGRA210_SFC_FS64 8 */
|
||||||
|
88200, /* #define TEGRA210_SFC_FS88_2 9 */
|
||||||
|
96000, /* #define TEGRA210_SFC_FS96 10 */
|
||||||
|
176400, /* #define TEGRA210_SFC_FS176_4 11 */
|
||||||
|
192000, /* #define TEGRA210_SFC_FS192 12 */
|
||||||
|
};
|
||||||
|
|
||||||
static int tegra210_sfc_runtime_suspend(struct device *dev)
|
static int tegra210_sfc_runtime_suspend(struct device *dev)
|
||||||
{
|
{
|
||||||
struct tegra210_sfc *sfc = dev_get_drvdata(dev);
|
struct tegra210_sfc *sfc = dev_get_drvdata(dev);
|
||||||
@@ -387,6 +403,16 @@ static int tegra210_sfc_out_hw_params(struct snd_pcm_substream *substream,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int tegra210_sfc_rate_to_index(int rate)
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
for (index = 0; index < ARRAY_SIZE(tegra210_sfc_rates); index++) {
|
||||||
|
if (rate == tegra210_sfc_rates[index])
|
||||||
|
return index;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
static int tegra210_sfc_get_srate(struct snd_kcontrol *kcontrol,
|
static int tegra210_sfc_get_srate(struct snd_kcontrol *kcontrol,
|
||||||
struct snd_ctl_elem_value *ucontrol)
|
struct snd_ctl_elem_value *ucontrol)
|
||||||
{
|
{
|
||||||
@@ -395,9 +421,9 @@ static int tegra210_sfc_get_srate(struct snd_kcontrol *kcontrol,
|
|||||||
|
|
||||||
/* get the sfc output rate */
|
/* get the sfc output rate */
|
||||||
if (strstr(kcontrol->id.name, "input"))
|
if (strstr(kcontrol->id.name, "input"))
|
||||||
ucontrol->value.integer.value[0] = sfc->srate_in + 1;
|
ucontrol->value.integer.value[0] = tegra210_sfc_rates[sfc->srate_in];
|
||||||
else if (strstr(kcontrol->id.name, "output"))
|
else if (strstr(kcontrol->id.name, "output"))
|
||||||
ucontrol->value.integer.value[0] = sfc->srate_out + 1;
|
ucontrol->value.integer.value[0] = tegra210_sfc_rates[sfc->srate_out];
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -407,9 +433,9 @@ static int tegra210_sfc_put_srate(struct snd_kcontrol *kcontrol,
|
|||||||
{
|
{
|
||||||
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
|
||||||
struct tegra210_sfc *sfc = snd_soc_codec_get_drvdata(codec);
|
struct tegra210_sfc *sfc = snd_soc_codec_get_drvdata(codec);
|
||||||
int srate = ucontrol->value.integer.value[0] - 1;
|
int srate = tegra210_sfc_rate_to_index(ucontrol->value.integer.value[0]);
|
||||||
|
|
||||||
if ((srate < TEGRA210_SFC_FS8 - 1) || (srate > TEGRA210_SFC_FS192))
|
if ((srate < TEGRA210_SFC_FS8) || (srate > TEGRA210_SFC_FS192))
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
/* Update the SFC input/output rate */
|
/* Update the SFC input/output rate */
|
||||||
@@ -592,32 +618,11 @@ static const struct snd_soc_dapm_route tegra210_sfc_routes[] = {
|
|||||||
{ "SFC Transmit", NULL, "SFC TX" },
|
{ "SFC Transmit", NULL, "SFC TX" },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char * const tegra210_sfc_srate_text[] = {
|
|
||||||
"None",
|
|
||||||
"8kHz",
|
|
||||||
"11kHz",
|
|
||||||
"16kHz",
|
|
||||||
"22kHz",
|
|
||||||
"24kHz",
|
|
||||||
"32kHz",
|
|
||||||
"44kHz",
|
|
||||||
"48kHz",
|
|
||||||
"64kHz",
|
|
||||||
"88kHz",
|
|
||||||
"96kHz",
|
|
||||||
"176kHz",
|
|
||||||
"192kHz",
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char * const tegra210_sfc_format_text[] = {
|
static const char * const tegra210_sfc_format_text[] = {
|
||||||
"None",
|
"None",
|
||||||
"16",
|
"16",
|
||||||
"32",
|
"32",
|
||||||
};
|
};
|
||||||
static const struct soc_enum tegra210_sfc_srate_enum =
|
|
||||||
SOC_ENUM_SINGLE(SND_SOC_NOPM, 0,
|
|
||||||
ARRAY_SIZE(tegra210_sfc_srate_text),
|
|
||||||
tegra210_sfc_srate_text);
|
|
||||||
|
|
||||||
static const struct soc_enum tegra210_sfc_format_enum =
|
static const struct soc_enum tegra210_sfc_format_enum =
|
||||||
SOC_ENUM_SINGLE(SND_SOC_NOPM, 0,
|
SOC_ENUM_SINGLE(SND_SOC_NOPM, 0,
|
||||||
@@ -625,9 +630,9 @@ static const struct soc_enum tegra210_sfc_format_enum =
|
|||||||
tegra210_sfc_format_text);
|
tegra210_sfc_format_text);
|
||||||
|
|
||||||
static const struct snd_kcontrol_new tegra210_sfc_controls[] = {
|
static const struct snd_kcontrol_new tegra210_sfc_controls[] = {
|
||||||
SOC_ENUM_EXT("input rate", tegra210_sfc_srate_enum,
|
SOC_SINGLE_EXT("input rate", 0, 0, 192000, 0,
|
||||||
tegra210_sfc_get_srate, tegra210_sfc_put_srate),
|
tegra210_sfc_get_srate, tegra210_sfc_put_srate),
|
||||||
SOC_ENUM_EXT("output rate", tegra210_sfc_srate_enum,
|
SOC_SINGLE_EXT("output rate", 0, 0, 192000, 0,
|
||||||
tegra210_sfc_get_srate, tegra210_sfc_put_srate),
|
tegra210_sfc_get_srate, tegra210_sfc_put_srate),
|
||||||
SOC_ENUM_EXT("input bit format", tegra210_sfc_format_enum,
|
SOC_ENUM_EXT("input bit format", tegra210_sfc_format_enum,
|
||||||
tegra210_sfc_get_format, tegra210_sfc_put_format),
|
tegra210_sfc_get_format, tegra210_sfc_put_format),
|
||||||
|
|||||||
Reference in New Issue
Block a user