ASoC: rsnd: tidyup SSI interrupt enable/disable method
Current SSI doesn't care interrupt "disable" method. And, it is used when PIO mode only at this point. SSI interrupt will be used for sound R/L issue workaround when DMA mode too. This patch tidyup SSI interrupt enable/disable method. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
		
					parent
					
						
							
								05795411ae
							
						
					
				
			
			
				commit
				
					
						c17dba8b8e
					
				
			
		
					 3 changed files with 29 additions and 6 deletions
				
			
		| 
						 | 
					@ -432,8 +432,10 @@ int rsnd_src_ssiu_start(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
			int use_busif);
 | 
								int use_busif);
 | 
				
			||||||
int rsnd_src_ssiu_stop(struct rsnd_mod *ssi_mod,
 | 
					int rsnd_src_ssiu_stop(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
		       struct rsnd_dai *rdai);
 | 
							       struct rsnd_dai *rdai);
 | 
				
			||||||
int rsnd_src_enable_ssi_irq(struct rsnd_mod *ssi_mod,
 | 
					int rsnd_src_ssi_irq_enable(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
			    struct rsnd_dai *rdai);
 | 
								    struct rsnd_dai *rdai);
 | 
				
			||||||
 | 
					int rsnd_src_ssi_irq_disable(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
 | 
								     struct rsnd_dai *rdai);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define rsnd_src_nr(priv) ((priv)->src_nr)
 | 
					#define rsnd_src_nr(priv) ((priv)->src_nr)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,18 +185,37 @@ int rsnd_src_ssiu_stop(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int rsnd_src_enable_ssi_irq(struct rsnd_mod *ssi_mod,
 | 
					int rsnd_src_ssi_irq_enable(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
			    struct rsnd_dai *rdai)
 | 
								    struct rsnd_dai *rdai)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);
 | 
						struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* enable PIO interrupt if Gen2 */
 | 
						if (rsnd_is_gen1(priv))
 | 
				
			||||||
	if (rsnd_is_gen2(priv))
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* enable SSI interrupt if Gen2 */
 | 
				
			||||||
 | 
						if (rsnd_ssi_is_dma_mode(ssi_mod))
 | 
				
			||||||
 | 
							rsnd_mod_write(ssi_mod, INT_ENABLE, 0x0e000000);
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
		rsnd_mod_write(ssi_mod, INT_ENABLE, 0x0f000000);
 | 
							rsnd_mod_write(ssi_mod, INT_ENABLE, 0x0f000000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int rsnd_src_ssi_irq_disable(struct rsnd_mod *ssi_mod,
 | 
				
			||||||
 | 
								    struct rsnd_dai *rdai)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct rsnd_priv *priv = rsnd_mod_to_priv(ssi_mod);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (rsnd_is_gen1(priv))
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* disable SSI interrupt if Gen2 */
 | 
				
			||||||
 | 
						rsnd_mod_write(ssi_mod, INT_ENABLE, 0x00000000);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
unsigned int rsnd_src_get_ssi_rate(struct rsnd_priv *priv,
 | 
					unsigned int rsnd_src_get_ssi_rate(struct rsnd_priv *priv,
 | 
				
			||||||
				   struct rsnd_dai_stream *io,
 | 
									   struct rsnd_dai_stream *io,
 | 
				
			||||||
				   struct snd_pcm_runtime *runtime)
 | 
									   struct snd_pcm_runtime *runtime)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -410,10 +410,10 @@ static int rsnd_ssi_pio_start(struct rsnd_mod *mod,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsnd_src_ssiu_start(mod, rdai, 0);
 | 
						rsnd_src_ssiu_start(mod, rdai, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsnd_src_enable_ssi_irq(mod, rdai);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	rsnd_ssi_hw_start(ssi, rdai, io);
 | 
						rsnd_ssi_hw_start(ssi, rdai, io);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rsnd_src_ssi_irq_enable(mod, rdai);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -422,6 +422,8 @@ static int rsnd_ssi_pio_stop(struct rsnd_mod *mod,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
 | 
						struct rsnd_ssi *ssi = rsnd_mod_to_ssi(mod);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						rsnd_src_ssi_irq_disable(mod, rdai);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsnd_ssi_hw_stop(ssi, rdai);
 | 
						rsnd_ssi_hw_stop(ssi, rdai);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rsnd_src_ssiu_stop(mod, rdai);
 | 
						rsnd_src_ssiu_stop(mod, rdai);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue