diff options
Diffstat (limited to 'sound/soc/dwc/dwc-i2s.c')
| -rw-r--r-- | sound/soc/dwc/dwc-i2s.c | 45 | 
1 files changed, 11 insertions, 34 deletions
diff --git a/sound/soc/dwc/dwc-i2s.c b/sound/soc/dwc/dwc-i2s.c index acdf98b2ee9c..399a489f24f2 100644 --- a/sound/soc/dwc/dwc-i2s.c +++ b/sound/soc/dwc/dwc-i2s.c @@ -132,13 +132,13 @@ static irqreturn_t i2s_irq_handler(int irq, void *dev_id)  		/* Error Handling: TX */  		if (isr[i] & ISR_TXFO) { -			dev_err(dev->dev, "TX overrun (ch_id=%d)\n", i); +			dev_err_ratelimited(dev->dev, "TX overrun (ch_id=%d)\n", i);  			irq_valid = true;  		}  		/* Error Handling: TX */  		if (isr[i] & ISR_RXFO) { -			dev_err(dev->dev, "RX overrun (ch_id=%d)\n", i); +			dev_err_ratelimited(dev->dev, "RX overrun (ch_id=%d)\n", i);  			irq_valid = true;  		}  	} @@ -183,30 +183,6 @@ static void i2s_stop(struct dw_i2s_dev *dev,  	}  } -static int dw_i2s_startup(struct snd_pcm_substream *substream, -		struct snd_soc_dai *cpu_dai) -{ -	struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(cpu_dai); -	union dw_i2s_snd_dma_data *dma_data = NULL; - -	if (!(dev->capability & DWC_I2S_RECORD) && -			(substream->stream == SNDRV_PCM_STREAM_CAPTURE)) -		return -EINVAL; - -	if (!(dev->capability & DWC_I2S_PLAY) && -			(substream->stream == SNDRV_PCM_STREAM_PLAYBACK)) -		return -EINVAL; - -	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) -		dma_data = &dev->play_dma_data; -	else if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) -		dma_data = &dev->capture_dma_data; - -	snd_soc_dai_set_dma_data(cpu_dai, substream, (void *)dma_data); - -	return 0; -} -  static void dw_i2s_config(struct dw_i2s_dev *dev, int stream)  {  	u32 ch_reg; @@ -305,12 +281,6 @@ static int dw_i2s_hw_params(struct snd_pcm_substream *substream,  	return 0;  } -static void dw_i2s_shutdown(struct snd_pcm_substream *substream, -		struct snd_soc_dai *dai) -{ -	snd_soc_dai_set_dma_data(dai, substream, NULL); -} -  static int dw_i2s_prepare(struct snd_pcm_substream *substream,  			  struct snd_soc_dai *dai)  { @@ -382,8 +352,6 @@ static int dw_i2s_set_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)  }  static const struct snd_soc_dai_ops dw_i2s_dai_ops = { -	.startup	= dw_i2s_startup, -	.shutdown	= dw_i2s_shutdown,  	.hw_params	= dw_i2s_hw_params,  	.prepare	= dw_i2s_prepare,  	.trigger	= dw_i2s_trigger, @@ -625,6 +593,14 @@ static int dw_configure_dai_by_dt(struct dw_i2s_dev *dev,  } +static int dw_i2s_dai_probe(struct snd_soc_dai *dai) +{ +	struct dw_i2s_dev *dev = snd_soc_dai_get_drvdata(dai); + +	snd_soc_dai_init_dma_data(dai, &dev->play_dma_data, &dev->capture_dma_data); +	return 0; +} +  static int dw_i2s_probe(struct platform_device *pdev)  {  	const struct i2s_platform_data *pdata = pdev->dev.platform_data; @@ -643,6 +619,7 @@ static int dw_i2s_probe(struct platform_device *pdev)  		return -ENOMEM;  	dw_i2s_dai->ops = &dw_i2s_dai_ops; +	dw_i2s_dai->probe = dw_i2s_dai_probe;  	dev->i2s_base = devm_platform_get_and_ioremap_resource(pdev, 0, &res);  	if (IS_ERR(dev->i2s_base))  | 
