mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	ASoC: rk3399_gru_sound: fix recording pop at first attempt
Pop happens when mclk applied but dmic's own boot-time Specify dmic delay times in dt to make sure clocks are ready earlier than dmic working Signed-off-by: Wonjoon Lee <woojoo.lee@samsung.com> Signed-off-by: Xing Zheng <zhengxing@rock-chips.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
		
							parent
							
								
									22b93eaf55
								
							
						
					
					
						commit
						3a6f9dce61
					
				
					 2 changed files with 21 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -6,10 +6,17 @@ Required properties:
 | 
			
		|||
  connected to the codecs
 | 
			
		||||
- rockchip,codec: The phandle of the MAX98357A/RT5514/DA7219 codecs
 | 
			
		||||
 | 
			
		||||
Optional properties:
 | 
			
		||||
- dmic-wakeup-delay-ms : specify delay time (ms) for DMIC ready.
 | 
			
		||||
  If this option is specified, which means it's required dmic need
 | 
			
		||||
  delay for DMIC to ready so that rt5514 can avoid recording before
 | 
			
		||||
  DMIC send valid data
 | 
			
		||||
 | 
			
		||||
Example:
 | 
			
		||||
 | 
			
		||||
sound {
 | 
			
		||||
	compatible = "rockchip,rk3399-gru-sound";
 | 
			
		||||
	rockchip,cpu = <&i2s0>;
 | 
			
		||||
	rockchip,codec = <&max98357a &rt5514 &da7219>;
 | 
			
		||||
	dmic-wakeup-delay-ms = <20>;
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,6 +38,8 @@
 | 
			
		|||
 | 
			
		||||
#define SOUND_FS	256
 | 
			
		||||
 | 
			
		||||
unsigned int rt5514_dmic_delay;
 | 
			
		||||
 | 
			
		||||
static struct snd_soc_jack rockchip_sound_jack;
 | 
			
		||||
 | 
			
		||||
static const struct snd_soc_dapm_widget rockchip_dapm_widgets[] = {
 | 
			
		||||
| 
						 | 
				
			
			@ -123,6 +125,9 @@ static int rockchip_sound_rt5514_hw_params(struct snd_pcm_substream *substream,
 | 
			
		|||
		return ret;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Wait for DMIC stable */
 | 
			
		||||
	msleep(rt5514_dmic_delay);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -343,6 +348,15 @@ static int rockchip_sound_probe(struct platform_device *pdev)
 | 
			
		|||
		return -ENODEV;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* Set DMIC delay */
 | 
			
		||||
	ret = device_property_read_u32(&pdev->dev, "dmic-delay",
 | 
			
		||||
					&rt5514_dmic_delay);
 | 
			
		||||
	if (ret) {
 | 
			
		||||
		rt5514_dmic_delay = 0;
 | 
			
		||||
		dev_dbg(&pdev->dev,
 | 
			
		||||
			"no optional property 'dmic-delay' found, default: no delay\n");
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	rockchip_dailinks[DAILINK_RT5514_DSP].cpu_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
 | 
			
		||||
	rockchip_dailinks[DAILINK_RT5514_DSP].cpu_dai_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
 | 
			
		||||
	rockchip_dailinks[DAILINK_RT5514_DSP].platform_name = kstrdup_const(dev_name(dev), GFP_KERNEL);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue