forked from luck/tmp_suning_uos_patched
ASoC: samsung: s3c24xx-i2s: Fix build after removal of DAI suspend/resume
Commit450312b640
("ASoC: soc-core: remove DAI suspend/resume") removed the DAI side suspend/resume hooks and switched entirely to component suspend/resume. However the Samsung SoC s3c-i2s-v2 driver was not updated. Move the suspend/resume hooks from s3c-i2s-v2.c to s3c2412-i2s.c while changing dai to component which allows to keep the struct snd_soc_component_driver const. This fixes build errors: sound/soc/samsung/s3c-i2s-v2.c: In function ‘s3c_i2sv2_register_component’: sound/soc/samsung/s3c-i2s-v2.c:730:9: error: ‘struct snd_soc_dai_driver’ has no member named ‘suspend’ dai_drv->suspend = s3c2412_i2s_suspend; Reported-by: Arnd Bergmann <arnd@arndb.de> Fixes:450312b640
("ASoC: soc-core: remove DAI suspend/resume") Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org> Link: https://lore.kernel.org/r/20200413124548.28197-1-krzk@kernel.org Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
dd8e871d4e
commit
ec21bdc6dd
|
@ -656,60 +656,6 @@ void s3c_i2sv2_cleanup(struct snd_soc_dai *dai,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(s3c_i2sv2_cleanup);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int s3c2412_i2s_suspend(struct snd_soc_dai *dai)
|
||||
{
|
||||
struct s3c_i2sv2_info *i2s = to_info(dai);
|
||||
u32 iismod;
|
||||
|
||||
if (dai->active) {
|
||||
i2s->suspend_iismod = readl(i2s->regs + S3C2412_IISMOD);
|
||||
i2s->suspend_iiscon = readl(i2s->regs + S3C2412_IISCON);
|
||||
i2s->suspend_iispsr = readl(i2s->regs + S3C2412_IISPSR);
|
||||
|
||||
/* some basic suspend checks */
|
||||
|
||||
iismod = readl(i2s->regs + S3C2412_IISMOD);
|
||||
|
||||
if (iismod & S3C2412_IISCON_RXDMA_ACTIVE)
|
||||
pr_warn("%s: RXDMA active?\n", __func__);
|
||||
|
||||
if (iismod & S3C2412_IISCON_TXDMA_ACTIVE)
|
||||
pr_warn("%s: TXDMA active?\n", __func__);
|
||||
|
||||
if (iismod & S3C2412_IISCON_IIS_ACTIVE)
|
||||
pr_warn("%s: IIS active\n", __func__);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3c2412_i2s_resume(struct snd_soc_dai *dai)
|
||||
{
|
||||
struct s3c_i2sv2_info *i2s = to_info(dai);
|
||||
|
||||
pr_info("dai_active %d, IISMOD %08x, IISCON %08x\n",
|
||||
dai->active, i2s->suspend_iismod, i2s->suspend_iiscon);
|
||||
|
||||
if (dai->active) {
|
||||
writel(i2s->suspend_iiscon, i2s->regs + S3C2412_IISCON);
|
||||
writel(i2s->suspend_iismod, i2s->regs + S3C2412_IISMOD);
|
||||
writel(i2s->suspend_iispsr, i2s->regs + S3C2412_IISPSR);
|
||||
|
||||
writel(S3C2412_IISFIC_RXFLUSH | S3C2412_IISFIC_TXFLUSH,
|
||||
i2s->regs + S3C2412_IISFIC);
|
||||
|
||||
ndelay(250);
|
||||
writel(0x0, i2s->regs + S3C2412_IISFIC);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define s3c2412_i2s_suspend NULL
|
||||
#define s3c2412_i2s_resume NULL
|
||||
#endif
|
||||
|
||||
int s3c_i2sv2_register_component(struct device *dev, int id,
|
||||
const struct snd_soc_component_driver *cmp_drv,
|
||||
struct snd_soc_dai_driver *dai_drv)
|
||||
|
@ -727,9 +673,6 @@ int s3c_i2sv2_register_component(struct device *dev, int id,
|
|||
if (!ops->delay)
|
||||
ops->delay = s3c2412_i2s_delay;
|
||||
|
||||
dai_drv->suspend = s3c2412_i2s_suspend;
|
||||
dai_drv->resume = s3c2412_i2s_resume;
|
||||
|
||||
return devm_snd_soc_register_component(dev, cmp_drv, dai_drv, 1);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(s3c_i2sv2_register_component);
|
||||
|
|
|
@ -117,6 +117,60 @@ static int s3c2412_i2s_hw_params(struct snd_pcm_substream *substream,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int s3c2412_i2s_suspend(struct snd_soc_component *component)
|
||||
{
|
||||
struct s3c_i2sv2_info *i2s = snd_soc_component_get_drvdata(component);
|
||||
u32 iismod;
|
||||
|
||||
if (component->active) {
|
||||
i2s->suspend_iismod = readl(i2s->regs + S3C2412_IISMOD);
|
||||
i2s->suspend_iiscon = readl(i2s->regs + S3C2412_IISCON);
|
||||
i2s->suspend_iispsr = readl(i2s->regs + S3C2412_IISPSR);
|
||||
|
||||
/* some basic suspend checks */
|
||||
|
||||
iismod = readl(i2s->regs + S3C2412_IISMOD);
|
||||
|
||||
if (iismod & S3C2412_IISCON_RXDMA_ACTIVE)
|
||||
pr_warn("%s: RXDMA active?\n", __func__);
|
||||
|
||||
if (iismod & S3C2412_IISCON_TXDMA_ACTIVE)
|
||||
pr_warn("%s: TXDMA active?\n", __func__);
|
||||
|
||||
if (iismod & S3C2412_IISCON_IIS_ACTIVE)
|
||||
pr_warn("%s: IIS active\n", __func__);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int s3c2412_i2s_resume(struct snd_soc_component *component)
|
||||
{
|
||||
struct s3c_i2sv2_info *i2s = snd_soc_component_get_drvdata(component);
|
||||
|
||||
pr_info("component_active %d, IISMOD %08x, IISCON %08x\n",
|
||||
component->active, i2s->suspend_iismod, i2s->suspend_iiscon);
|
||||
|
||||
if (component->active) {
|
||||
writel(i2s->suspend_iiscon, i2s->regs + S3C2412_IISCON);
|
||||
writel(i2s->suspend_iismod, i2s->regs + S3C2412_IISMOD);
|
||||
writel(i2s->suspend_iispsr, i2s->regs + S3C2412_IISPSR);
|
||||
|
||||
writel(S3C2412_IISFIC_RXFLUSH | S3C2412_IISFIC_TXFLUSH,
|
||||
i2s->regs + S3C2412_IISFIC);
|
||||
|
||||
ndelay(250);
|
||||
writel(0x0, i2s->regs + S3C2412_IISFIC);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define s3c2412_i2s_suspend NULL
|
||||
#define s3c2412_i2s_resume NULL
|
||||
#endif
|
||||
|
||||
#define S3C2412_I2S_RATES \
|
||||
(SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_11025 | SNDRV_PCM_RATE_16000 | \
|
||||
SNDRV_PCM_RATE_22050 | SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | \
|
||||
|
@ -146,6 +200,8 @@ static struct snd_soc_dai_driver s3c2412_i2s_dai = {
|
|||
|
||||
static const struct snd_soc_component_driver s3c2412_i2s_component = {
|
||||
.name = "s3c2412-i2s",
|
||||
.suspend = s3c2412_i2s_suspend,
|
||||
.resume = s3c2412_i2s_resume,
|
||||
};
|
||||
|
||||
static int s3c2412_iis_dev_probe(struct platform_device *pdev)
|
||||
|
|
Loading…
Reference in New Issue
Block a user