forked from mirrors/linux
		
	ASoC: tas6424: Allow disabling auto diagnostics for faster power-on
The TAS6424 incorporates both DC-load and AC-load diagnostics which are used to determine the status of the load. The DC diagnostics runs when any channel is directed to leave the Hi-Z state and enter the MUTE or PLAY state. The DC diagnostics are turned on by default but, if a fast startup without diagnostics is required, the diagnostics can be disabled using a dedicated ALSA control. Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
		
							parent
							
								
									a7ea9385d4
								
							
						
					
					
						commit
						396888772a
					
				
					 2 changed files with 15 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -64,6 +64,8 @@ static const struct snd_kcontrol_new tas6424_snd_controls[] = {
 | 
			
		|||
		       TAS6424_CH3_VOL_CTRL, 0, 0xff, 0, dac_tlv),
 | 
			
		||||
	SOC_SINGLE_TLV("Speaker Driver CH4 Playback Volume",
 | 
			
		||||
		       TAS6424_CH4_VOL_CTRL, 0, 0xff, 0, dac_tlv),
 | 
			
		||||
	SOC_SINGLE_STROBE("Auto Diagnostics Switch", TAS6424_DC_DIAG_CTRL1,
 | 
			
		||||
			  TAS6424_LDGBYPASS_SHIFT, 1),
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static int tas6424_dac_event(struct snd_soc_dapm_widget *w,
 | 
			
		||||
| 
						 | 
				
			
			@ -297,6 +299,11 @@ static int tas6424_power_on(struct snd_soc_component *component)
 | 
			
		|||
	struct tas6424_data *tas6424 = snd_soc_component_get_drvdata(component);
 | 
			
		||||
	int ret;
 | 
			
		||||
	u8 chan_states;
 | 
			
		||||
	int no_auto_diags = 0;
 | 
			
		||||
	unsigned int reg_val;
 | 
			
		||||
 | 
			
		||||
	if (!regmap_read(tas6424->regmap, TAS6424_DC_DIAG_CTRL1, ®_val))
 | 
			
		||||
		no_auto_diags = reg_val & TAS6424_LDGBYPASS_MASK;
 | 
			
		||||
 | 
			
		||||
	ret = regulator_bulk_enable(ARRAY_SIZE(tas6424->supplies),
 | 
			
		||||
				    tas6424->supplies);
 | 
			
		||||
| 
						 | 
				
			
			@ -327,8 +334,10 @@ static int tas6424_power_on(struct snd_soc_component *component)
 | 
			
		|||
	snd_soc_component_write(component, TAS6424_CH_STATE_CTRL, chan_states);
 | 
			
		||||
 | 
			
		||||
	/* any time we come out of HIZ, the output channels automatically run DC
 | 
			
		||||
	 * load diagnostics, wait here until this completes
 | 
			
		||||
	 * load diagnostics if autodiagnotics are enabled. wait here until this
 | 
			
		||||
	 * completes.
 | 
			
		||||
	 */
 | 
			
		||||
	if (!no_auto_diags)
 | 
			
		||||
		msleep(230);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -111,6 +111,10 @@
 | 
			
		|||
					 TAS6424_CH3_STATE_DIAG | \
 | 
			
		||||
					 TAS6424_CH4_STATE_DIAG)
 | 
			
		||||
 | 
			
		||||
/* TAS6424_DC_DIAG_CTRL1 */
 | 
			
		||||
#define TAS6424_LDGBYPASS_SHIFT		0
 | 
			
		||||
#define TAS6424_LDGBYPASS_MASK		BIT(TAS6424_LDGBYPASS_SHIFT)
 | 
			
		||||
 | 
			
		||||
/* TAS6424_GLOB_FAULT1_REG */
 | 
			
		||||
#define TAS6424_FAULT_CLOCK		BIT(4)
 | 
			
		||||
#define TAS6424_FAULT_PVDD_OV		BIT(3)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue