2013-07-21 21:35:52 -07:00
/*
* Renesas R - Car SRU / SCU / SSIU / SSI support
*
* Copyright ( C ) 2013 Renesas Solutions Corp .
* Kuninori Morimoto < kuninori . morimoto . gx @ renesas . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef RCAR_SND_H
# define RCAR_SND_H
# include <linux/sh_clk.h>
2013-07-21 21:36:35 -07:00
# define RSND_GEN1_SRU 0
2013-07-21 21:36:46 -07:00
# define RSND_GEN1_ADG 1
2013-07-21 21:36:57 -07:00
# define RSND_GEN1_SSI 2
2013-07-21 21:35:52 -07:00
2013-11-19 01:06:15 -08:00
# define RSND_GEN2_SCU 0
2013-07-21 21:36:46 -07:00
# define RSND_GEN2_ADG 1
2013-07-21 21:36:57 -07:00
# define RSND_GEN2_SSIU 2
# define RSND_GEN2_SSI 3
2013-07-21 21:36:35 -07:00
2013-07-21 21:36:57 -07:00
# define RSND_BASE_MAX 4
/*
* flags
*
2013-07-28 18:58:29 -07:00
* 0xAB000000
2013-07-21 21:36:57 -07:00
*
* A : clock sharing settings
2013-07-28 18:58:29 -07:00
* B : SSI direction
2013-07-21 21:36:57 -07:00
*/
# define RSND_SSI_CLK_PIN_SHARE (1 << 31)
2013-07-28 18:58:29 -07:00
2014-03-03 20:49:50 -08:00
# define RSND_SSI(_dma_id, _pio_irq, _flags) \
{ . dma_id = _dma_id , . pio_irq = _pio_irq , . flags = _flags }
2013-07-28 18:58:29 -07:00
# define RSND_SSI_UNUSED \
2014-05-08 01:59:26 -07:00
{ . dma_id = - 1 , . pio_irq = - 1 , . flags = 0 }
2013-07-28 18:58:29 -07:00
2013-07-21 21:36:57 -07:00
struct rsnd_ssi_platform_info {
2013-07-28 18:59:02 -07:00
int dma_id ;
2013-07-21 21:36:57 -07:00
int pio_irq ;
u32 flags ;
} ;
2013-07-21 21:36:35 -07:00
2014-03-03 20:51:21 -08:00
# define RSND_SRC(rate, _dma_id) \
2014-05-08 01:59:26 -07:00
{ . convert_rate = rate , . dma_id = _dma_id , }
2014-03-03 20:51:21 -08:00
# define RSND_SRC_UNUSED \
2014-05-08 01:59:26 -07:00
{ . convert_rate = 0 , . dma_id = - 1 , }
2014-03-03 20:51:21 -08:00
struct rsnd_src_platform_info {
2013-12-19 19:28:51 -08:00
u32 convert_rate ; /* sampling rate convert */
2014-01-23 18:42:00 -08:00
int dma_id ; /* for Gen2 SCU */
2013-07-21 21:36:35 -07:00
} ;
2013-07-21 21:35:52 -07:00
2014-05-08 17:44:49 -07:00
/*
* flags
*/
struct rsnd_dvc_platform_info {
u32 flags ;
} ;
2014-03-03 20:49:50 -08:00
struct rsnd_dai_path_info {
struct rsnd_ssi_platform_info * ssi ;
2014-03-03 20:51:21 -08:00
struct rsnd_src_platform_info * src ;
2014-05-08 17:44:49 -07:00
struct rsnd_dvc_platform_info * dvc ;
2014-03-03 20:49:50 -08:00
} ;
struct rsnd_dai_platform_info {
struct rsnd_dai_path_info playback ;
struct rsnd_dai_path_info capture ;
} ;
2013-07-21 21:36:21 -07:00
/*
* flags
*
* 0x0000000A
*
* A : generation
*/
2013-10-11 00:07:01 -07:00
# define RSND_GEN_MASK (0xF << 0)
2013-07-21 21:36:21 -07:00
# define RSND_GEN1 (1 << 0) /* fixme */
# define RSND_GEN2 (2 << 0) /* fixme */
2013-07-21 21:35:52 -07:00
struct rcar_snd_info {
u32 flags ;
2013-07-21 21:36:57 -07:00
struct rsnd_ssi_platform_info * ssi_info ;
int ssi_info_nr ;
2014-03-03 20:51:21 -08:00
struct rsnd_src_platform_info * src_info ;
int src_info_nr ;
2014-05-08 17:44:49 -07:00
struct rsnd_dvc_platform_info * dvc_info ;
int dvc_info_nr ;
2014-03-03 20:49:50 -08:00
struct rsnd_dai_platform_info * dai_info ;
int dai_info_nr ;
2013-07-21 21:35:52 -07:00
int ( * start ) ( int id ) ;
int ( * stop ) ( int id ) ;
} ;
# endif