Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a0334c50 authored by Takashi Iwai's avatar Takashi Iwai
Browse files

Merge branch 'fix/asoc' into for-linus

parents 12ff414e f8852b12
Loading
Loading
Loading
Loading
+8 −8
Original line number Original line Diff line number Diff line
@@ -45,25 +45,25 @@
/* platform domain */
/* platform domain */
#define SND_SOC_DAPM_INPUT(wname) \
#define SND_SOC_DAPM_INPUT(wname) \
{	.id = snd_soc_dapm_input, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_input, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0}
	.num_kcontrols = 0, .reg = SND_SOC_NOPM }
#define SND_SOC_DAPM_OUTPUT(wname) \
#define SND_SOC_DAPM_OUTPUT(wname) \
{	.id = snd_soc_dapm_output, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_output, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0}
	.num_kcontrols = 0, .reg = SND_SOC_NOPM }
#define SND_SOC_DAPM_MIC(wname, wevent) \
#define SND_SOC_DAPM_MIC(wname, wevent) \
{	.id = snd_soc_dapm_mic, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_mic, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0, .event = wevent, \
	.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD}
	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD}
#define SND_SOC_DAPM_HP(wname, wevent) \
#define SND_SOC_DAPM_HP(wname, wevent) \
{	.id = snd_soc_dapm_hp, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_hp, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0, .event = wevent, \
	.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
#define SND_SOC_DAPM_SPK(wname, wevent) \
#define SND_SOC_DAPM_SPK(wname, wevent) \
{	.id = snd_soc_dapm_spk, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_spk, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0, .event = wevent, \
	.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
#define SND_SOC_DAPM_LINE(wname, wevent) \
#define SND_SOC_DAPM_LINE(wname, wevent) \
{	.id = snd_soc_dapm_line, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_line, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0, .event = wevent, \
	.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD}


/* path domain */
/* path domain */
@@ -189,11 +189,11 @@
/* events that are pre and post DAPM */
/* events that are pre and post DAPM */
#define SND_SOC_DAPM_PRE(wname, wevent) \
#define SND_SOC_DAPM_PRE(wname, wevent) \
{	.id = snd_soc_dapm_pre, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_pre, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0, .event = wevent, \
	.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD}
	.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_PRE_PMD}
#define SND_SOC_DAPM_POST(wname, wevent) \
#define SND_SOC_DAPM_POST(wname, wevent) \
{	.id = snd_soc_dapm_post, .name = wname, .kcontrols = NULL, \
{	.id = snd_soc_dapm_post, .name = wname, .kcontrols = NULL, \
	.num_kcontrols = 0, .event = wevent, \
	.num_kcontrols = 0, .reg = SND_SOC_NOPM, .event = wevent, \
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}
	.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}


/* stream domain */
/* stream domain */
+20 −12
Original line number Original line Diff line number Diff line
@@ -324,6 +324,10 @@ static void dac33_init_chip(struct snd_soc_codec *codec)
	dac33_write(codec, DAC33_OUT_AMP_CTRL,
	dac33_write(codec, DAC33_OUT_AMP_CTRL,
		    dac33_read_reg_cache(codec, DAC33_OUT_AMP_CTRL));
		    dac33_read_reg_cache(codec, DAC33_OUT_AMP_CTRL));


	dac33_write(codec, DAC33_LDAC_PWR_CTRL,
		    dac33_read_reg_cache(codec, DAC33_LDAC_PWR_CTRL));
	dac33_write(codec, DAC33_RDAC_PWR_CTRL,
		    dac33_read_reg_cache(codec, DAC33_RDAC_PWR_CTRL));
}
}


static inline int dac33_read_id(struct snd_soc_codec *codec)
static inline int dac33_read_id(struct snd_soc_codec *codec)
@@ -670,6 +674,7 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
{
{
	struct snd_soc_codec *codec = dac33->codec;
	struct snd_soc_codec *codec = dac33->codec;
	unsigned int delay;
	unsigned int delay;
	unsigned long flags;


	switch (dac33->fifo_mode) {
	switch (dac33->fifo_mode) {
	case DAC33_FIFO_MODE1:
	case DAC33_FIFO_MODE1:
@@ -677,10 +682,10 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
			DAC33_THRREG(dac33->nsample));
			DAC33_THRREG(dac33->nsample));


		/* Take the timestamps */
		/* Take the timestamps */
		spin_lock_irq(&dac33->lock);
		spin_lock_irqsave(&dac33->lock, flags);
		dac33->t_stamp2 = ktime_to_us(ktime_get());
		dac33->t_stamp2 = ktime_to_us(ktime_get());
		dac33->t_stamp1 = dac33->t_stamp2;
		dac33->t_stamp1 = dac33->t_stamp2;
		spin_unlock_irq(&dac33->lock);
		spin_unlock_irqrestore(&dac33->lock, flags);


		dac33_write16(codec, DAC33_PREFILL_MSB,
		dac33_write16(codec, DAC33_PREFILL_MSB,
				DAC33_THRREG(dac33->alarm_threshold));
				DAC33_THRREG(dac33->alarm_threshold));
@@ -692,11 +697,11 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
		break;
		break;
	case DAC33_FIFO_MODE7:
	case DAC33_FIFO_MODE7:
		/* Take the timestamp */
		/* Take the timestamp */
		spin_lock_irq(&dac33->lock);
		spin_lock_irqsave(&dac33->lock, flags);
		dac33->t_stamp1 = ktime_to_us(ktime_get());
		dac33->t_stamp1 = ktime_to_us(ktime_get());
		/* Move back the timestamp with drain time */
		/* Move back the timestamp with drain time */
		dac33->t_stamp1 -= dac33->mode7_us_to_lthr;
		dac33->t_stamp1 -= dac33->mode7_us_to_lthr;
		spin_unlock_irq(&dac33->lock);
		spin_unlock_irqrestore(&dac33->lock, flags);


		dac33_write16(codec, DAC33_PREFILL_MSB,
		dac33_write16(codec, DAC33_PREFILL_MSB,
				DAC33_THRREG(DAC33_MODE7_MARGIN));
				DAC33_THRREG(DAC33_MODE7_MARGIN));
@@ -714,13 +719,14 @@ static inline void dac33_prefill_handler(struct tlv320dac33_priv *dac33)
static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33)
static inline void dac33_playback_handler(struct tlv320dac33_priv *dac33)
{
{
	struct snd_soc_codec *codec = dac33->codec;
	struct snd_soc_codec *codec = dac33->codec;
	unsigned long flags;


	switch (dac33->fifo_mode) {
	switch (dac33->fifo_mode) {
	case DAC33_FIFO_MODE1:
	case DAC33_FIFO_MODE1:
		/* Take the timestamp */
		/* Take the timestamp */
		spin_lock_irq(&dac33->lock);
		spin_lock_irqsave(&dac33->lock, flags);
		dac33->t_stamp2 = ktime_to_us(ktime_get());
		dac33->t_stamp2 = ktime_to_us(ktime_get());
		spin_unlock_irq(&dac33->lock);
		spin_unlock_irqrestore(&dac33->lock, flags);


		dac33_write16(codec, DAC33_NSAMPLE_MSB,
		dac33_write16(codec, DAC33_NSAMPLE_MSB,
				DAC33_THRREG(dac33->nsample));
				DAC33_THRREG(dac33->nsample));
@@ -773,10 +779,11 @@ static irqreturn_t dac33_interrupt_handler(int irq, void *dev)
{
{
	struct snd_soc_codec *codec = dev;
	struct snd_soc_codec *codec = dev;
	struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
	struct tlv320dac33_priv *dac33 = snd_soc_codec_get_drvdata(codec);
	unsigned long flags;


	spin_lock(&dac33->lock);
	spin_lock_irqsave(&dac33->lock, flags);
	dac33->t_stamp1 = ktime_to_us(ktime_get());
	dac33->t_stamp1 = ktime_to_us(ktime_get());
	spin_unlock(&dac33->lock);
	spin_unlock_irqrestore(&dac33->lock, flags);


	/* Do not schedule the workqueue in Mode7 */
	/* Do not schedule the workqueue in Mode7 */
	if (dac33->fifo_mode != DAC33_FIFO_MODE7)
	if (dac33->fifo_mode != DAC33_FIFO_MODE7)
@@ -1173,15 +1180,16 @@ static snd_pcm_sframes_t dac33_dai_delay(
	unsigned int time_delta, uthr;
	unsigned int time_delta, uthr;
	int samples_out, samples_in, samples;
	int samples_out, samples_in, samples;
	snd_pcm_sframes_t delay = 0;
	snd_pcm_sframes_t delay = 0;
	unsigned long flags;


	switch (dac33->fifo_mode) {
	switch (dac33->fifo_mode) {
	case DAC33_FIFO_BYPASS:
	case DAC33_FIFO_BYPASS:
		break;
		break;
	case DAC33_FIFO_MODE1:
	case DAC33_FIFO_MODE1:
		spin_lock(&dac33->lock);
		spin_lock_irqsave(&dac33->lock, flags);
		t0 = dac33->t_stamp1;
		t0 = dac33->t_stamp1;
		t1 = dac33->t_stamp2;
		t1 = dac33->t_stamp2;
		spin_unlock(&dac33->lock);
		spin_unlock_irqrestore(&dac33->lock, flags);
		t_now = ktime_to_us(ktime_get());
		t_now = ktime_to_us(ktime_get());


		/* We have not started to fill the FIFO yet, delay is 0 */
		/* We have not started to fill the FIFO yet, delay is 0 */
@@ -1246,10 +1254,10 @@ static snd_pcm_sframes_t dac33_dai_delay(
		}
		}
		break;
		break;
	case DAC33_FIFO_MODE7:
	case DAC33_FIFO_MODE7:
		spin_lock(&dac33->lock);
		spin_lock_irqsave(&dac33->lock, flags);
		t0 = dac33->t_stamp1;
		t0 = dac33->t_stamp1;
		uthr = dac33->uthr;
		uthr = dac33->uthr;
		spin_unlock(&dac33->lock);
		spin_unlock_irqrestore(&dac33->lock, flags);
		t_now = ktime_to_us(ktime_get());
		t_now = ktime_to_us(ktime_get());


		/* We have not started to fill the FIFO yet, delay is 0 */
		/* We have not started to fill the FIFO yet, delay is 0 */
+3 −1
Original line number Original line Diff line number Diff line
@@ -1629,8 +1629,10 @@ static int twl6040_probe(struct snd_soc_codec *codec)
	priv->naudint = naudint;
	priv->naudint = naudint;
	priv->workqueue = create_singlethread_workqueue("twl6040-codec");
	priv->workqueue = create_singlethread_workqueue("twl6040-codec");


	if (!priv->workqueue)
	if (!priv->workqueue) {
		ret = -ENOMEM;
		goto work_err;
		goto work_err;
	}


	INIT_DELAYED_WORK(&priv->delayed_work, twl6040_accessory_work);
	INIT_DELAYED_WORK(&priv->delayed_work, twl6040_accessory_work);


+7 −2
Original line number Original line Diff line number Diff line
@@ -110,12 +110,12 @@ static int imx_ssi_dma_alloc(struct snd_pcm_substream *substream,
		slave_config.direction = DMA_TO_DEVICE;
		slave_config.direction = DMA_TO_DEVICE;
		slave_config.dst_addr = dma_params->dma_addr;
		slave_config.dst_addr = dma_params->dma_addr;
		slave_config.dst_addr_width = buswidth;
		slave_config.dst_addr_width = buswidth;
		slave_config.dst_maxburst = dma_params->burstsize;
		slave_config.dst_maxburst = dma_params->burstsize * buswidth;
	} else {
	} else {
		slave_config.direction = DMA_FROM_DEVICE;
		slave_config.direction = DMA_FROM_DEVICE;
		slave_config.src_addr = dma_params->dma_addr;
		slave_config.src_addr = dma_params->dma_addr;
		slave_config.src_addr_width = buswidth;
		slave_config.src_addr_width = buswidth;
		slave_config.src_maxburst = dma_params->burstsize;
		slave_config.src_maxburst = dma_params->burstsize * buswidth;
	}
	}


	ret = dmaengine_slave_config(iprtd->dma_chan, &slave_config);
	ret = dmaengine_slave_config(iprtd->dma_chan, &slave_config);
@@ -303,6 +303,11 @@ static struct snd_soc_platform_driver imx_soc_platform_mx2 = {


static int __devinit imx_soc_platform_probe(struct platform_device *pdev)
static int __devinit imx_soc_platform_probe(struct platform_device *pdev)
{
{
	struct imx_ssi *ssi = platform_get_drvdata(pdev);

	ssi->dma_params_tx.burstsize = 6;
	ssi->dma_params_rx.burstsize = 4;

	return snd_soc_register_platform(&pdev->dev, &imx_soc_platform_mx2);
	return snd_soc_register_platform(&pdev->dev, &imx_soc_platform_mx2);
}
}


+0 −3
Original line number Original line Diff line number Diff line
@@ -234,7 +234,4 @@ void imx_pcm_free(struct snd_pcm *pcm);
 */
 */
#define IMX_SSI_DMABUF_SIZE	(64 * 1024)
#define IMX_SSI_DMABUF_SIZE	(64 * 1024)


#define DMA_RXFIFO_BURST      0x4
#define DMA_TXFIFO_BURST      0x6

#endif /* _IMX_SSI_H */
#endif /* _IMX_SSI_H */
Loading