Merge tag 'asoc-fix-v5.2-rc4' of https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound into for-linus
ASoC: Fixes for v5.2 There's an awful lot of fixes here, almost all for the newly introduced SoF DSP drivers (including a few things it turned up in shared code). This is a large and complex piece of code so it's not surprising that there have been quite a few issues here, fortunately things seem to have mostly calmed down now. Otherwise there's just a smattering of small fixes.
This commit is contained in:
@@ -304,7 +304,10 @@ static int ak4458_rstn_control(struct snd_soc_component *component, int bit)
|
||||
AK4458_00_CONTROL1,
|
||||
AK4458_RSTN_MASK,
|
||||
0x0);
|
||||
return ret;
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ak4458_hw_params(struct snd_pcm_substream *substream,
|
||||
@@ -536,9 +539,10 @@ static void ak4458_power_on(struct ak4458_priv *ak4458)
|
||||
}
|
||||
}
|
||||
|
||||
static void ak4458_init(struct snd_soc_component *component)
|
||||
static int ak4458_init(struct snd_soc_component *component)
|
||||
{
|
||||
struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
|
||||
int ret;
|
||||
|
||||
/* External Mute ON */
|
||||
if (ak4458->mute_gpiod)
|
||||
@@ -546,21 +550,21 @@ static void ak4458_init(struct snd_soc_component *component)
|
||||
|
||||
ak4458_power_on(ak4458);
|
||||
|
||||
snd_soc_component_update_bits(component, AK4458_00_CONTROL1,
|
||||
ret = snd_soc_component_update_bits(component, AK4458_00_CONTROL1,
|
||||
0x80, 0x80); /* ACKS bit = 1; 10000000 */
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ak4458_rstn_control(component, 1);
|
||||
return ak4458_rstn_control(component, 1);
|
||||
}
|
||||
|
||||
static int ak4458_probe(struct snd_soc_component *component)
|
||||
{
|
||||
struct ak4458_priv *ak4458 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
ak4458_init(component);
|
||||
|
||||
ak4458->fs = 48000;
|
||||
|
||||
return 0;
|
||||
return ak4458_init(component);
|
||||
}
|
||||
|
||||
static void ak4458_remove(struct snd_soc_component *component)
|
||||
|
@@ -60,7 +60,7 @@ static const struct reg_default cs4265_reg_defaults[] = {
|
||||
static bool cs4265_readable_register(struct device *dev, unsigned int reg)
|
||||
{
|
||||
switch (reg) {
|
||||
case CS4265_CHIP_ID ... CS4265_SPDIF_CTL2:
|
||||
case CS4265_CHIP_ID ... CS4265_MAX_REGISTER:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
|
@@ -558,6 +558,7 @@ static int cs42xx8_runtime_resume(struct device *dev)
|
||||
msleep(5);
|
||||
|
||||
regcache_cache_only(cs42xx8->regmap, false);
|
||||
regcache_mark_dirty(cs42xx8->regmap);
|
||||
|
||||
ret = regcache_sync(cs42xx8->regmap);
|
||||
if (ret) {
|
||||
|
@@ -1909,6 +1909,21 @@ static int max98090_configure_dmic(struct max98090_priv *max98090,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int max98090_dai_startup(struct snd_pcm_substream *substream,
|
||||
struct snd_soc_dai *dai)
|
||||
{
|
||||
struct snd_soc_component *component = dai->component;
|
||||
struct max98090_priv *max98090 = snd_soc_component_get_drvdata(component);
|
||||
unsigned int fmt = max98090->dai_fmt;
|
||||
|
||||
/* Remove 24-bit format support if it is not in right justified mode. */
|
||||
if ((fmt & SND_SOC_DAIFMT_FORMAT_MASK) != SND_SOC_DAIFMT_RIGHT_J) {
|
||||
substream->runtime->hw.formats = SNDRV_PCM_FMTBIT_S16_LE;
|
||||
snd_pcm_hw_constraint_msbits(substream->runtime, 0, 16, 16);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int max98090_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
struct snd_pcm_hw_params *params,
|
||||
struct snd_soc_dai *dai)
|
||||
@@ -2316,6 +2331,7 @@ EXPORT_SYMBOL_GPL(max98090_mic_detect);
|
||||
#define MAX98090_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S24_LE)
|
||||
|
||||
static const struct snd_soc_dai_ops max98090_dai_ops = {
|
||||
.startup = max98090_dai_startup,
|
||||
.set_sysclk = max98090_dai_set_sysclk,
|
||||
.set_fmt = max98090_dai_set_fmt,
|
||||
.set_tdm_slot = max98090_set_tdm_slot,
|
||||
|
@@ -405,6 +405,8 @@ static int rt274_mic_detect(struct snd_soc_component *component,
|
||||
{
|
||||
struct rt274_priv *rt274 = snd_soc_component_get_drvdata(component);
|
||||
|
||||
rt274->jack = jack;
|
||||
|
||||
if (jack == NULL) {
|
||||
/* Disable jack detection */
|
||||
regmap_update_bits(rt274->regmap, RT274_EAPD_GPIO_IRQ_CTRL,
|
||||
@@ -412,7 +414,6 @@ static int rt274_mic_detect(struct snd_soc_component *component,
|
||||
|
||||
return 0;
|
||||
}
|
||||
rt274->jack = jack;
|
||||
|
||||
regmap_update_bits(rt274->regmap, RT274_EAPD_GPIO_IRQ_CTRL,
|
||||
RT274_IRQ_EN, RT274_IRQ_EN);
|
||||
|
@@ -2882,6 +2882,18 @@ static const struct dmi_system_id dmi_platform_intel_quirks[] = {
|
||||
RT5670_DEV_GPIO |
|
||||
RT5670_JD_MODE3),
|
||||
},
|
||||
{
|
||||
.callback = rt5670_quirk_cb,
|
||||
.ident = "Aegex 10 tablet (RU2)",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "AEGEX"),
|
||||
DMI_MATCH(DMI_PRODUCT_VERSION, "RU2"),
|
||||
},
|
||||
.driver_data = (unsigned long *)(RT5670_DMIC_EN |
|
||||
RT5670_DMIC2_INR |
|
||||
RT5670_DEV_GPIO |
|
||||
RT5670_JD_MODE3),
|
||||
},
|
||||
{}
|
||||
};
|
||||
|
||||
|
@@ -101,7 +101,7 @@ static void rt5677_spi_reverse(u8 *dst, u32 dstlen, const u8 *src, u32 srclen)
|
||||
u32 word_size = min_t(u32, dstlen, 8);
|
||||
|
||||
for (w = 0; w < dstlen; w += word_size) {
|
||||
for (i = 0; i < word_size; i++) {
|
||||
for (i = 0; i < word_size && i + w < dstlen; i++) {
|
||||
si = w + word_size - i - 1;
|
||||
dst[w + i] = si < srclen ? src[si] : 0;
|
||||
}
|
||||
@@ -152,8 +152,9 @@ int rt5677_spi_read(u32 addr, void *rxbuf, size_t len)
|
||||
status |= spi_sync(g_spi, &m);
|
||||
mutex_unlock(&spi_mutex);
|
||||
|
||||
|
||||
/* Copy data back to caller buffer */
|
||||
rt5677_spi_reverse(cb + offset, t[1].len, body, t[1].len);
|
||||
rt5677_spi_reverse(cb + offset, len - offset, body, t[1].len);
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
Reference in New Issue
Block a user