2013-07-22 08:35:52 +04: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-22 08:36:35 +04:00
# define RSND_GEN1_SRU 0
2013-07-22 08:36:46 +04:00
# define RSND_GEN1_ADG 1
2013-07-22 08:36:57 +04:00
# define RSND_GEN1_SSI 2
2013-07-22 08:35:52 +04:00
2013-11-19 13:06:15 +04:00
# define RSND_GEN2_SCU 0
2013-07-22 08:36:46 +04:00
# define RSND_GEN2_ADG 1
2013-07-22 08:36:57 +04:00
# define RSND_GEN2_SSIU 2
# define RSND_GEN2_SSI 3
2013-07-22 08:36:35 +04:00
2013-07-22 08:36:57 +04:00
# define RSND_BASE_MAX 4
/*
* flags
*
2013-07-29 05:58:29 +04:00
* 0xAB000000
2013-07-22 08:36:57 +04:00
*
* A : clock sharing settings
2013-07-29 05:58:29 +04:00
* B : SSI direction
2013-07-22 08:36:57 +04:00
*/
# define RSND_SSI_CLK_PIN_SHARE (1 << 31)
2014-06-23 04:56:23 +04:00
# define RSND_SSI_NO_BUSIF (1 << 30) /* SSI+DMA without BUSIF */
2013-07-29 05:58:29 +04:00
2014-11-27 11:08:10 +03:00
# define RSND_SSI(_dma_id, _irq, _flags) \
{ . dma_id = _dma_id , . irq = _irq , . flags = _flags }
2013-07-29 05:58:29 +04:00
# define RSND_SSI_UNUSED \
2014-11-27 11:08:10 +03:00
{ . dma_id = - 1 , . irq = - 1 , . flags = 0 }
2013-07-29 05:58:29 +04:00
2013-07-22 08:36:57 +04:00
struct rsnd_ssi_platform_info {
2013-07-29 05:59:02 +04:00
int dma_id ;
2014-11-27 11:08:10 +03:00
int irq ;
2013-07-22 08:36:57 +04:00
u32 flags ;
} ;
2013-07-22 08:36:35 +04:00
2014-03-04 08:51:21 +04:00
# define RSND_SRC(rate, _dma_id) \
2014-05-08 12:59:26 +04:00
{ . convert_rate = rate , . dma_id = _dma_id , }
2014-03-04 08:51:21 +04:00
# define RSND_SRC_UNUSED \
2014-05-08 12:59:26 +04:00
{ . convert_rate = 0 , . dma_id = - 1 , }
2014-03-04 08:51:21 +04:00
struct rsnd_src_platform_info {
2013-12-20 07:28:51 +04:00
u32 convert_rate ; /* sampling rate convert */
2014-01-24 06:42:00 +04:00
int dma_id ; /* for Gen2 SCU */
2015-01-08 04:52:36 +03:00
int irq ;
2013-07-22 08:36:35 +04:00
} ;
2013-07-22 08:35:52 +04:00
2014-05-09 04:44:49 +04:00
/*
* flags
*/
struct rsnd_dvc_platform_info {
u32 flags ;
} ;
2014-03-04 08:49:50 +04:00
struct rsnd_dai_path_info {
struct rsnd_ssi_platform_info * ssi ;
2014-03-04 08:51:21 +04:00
struct rsnd_src_platform_info * src ;
2014-05-09 04:44:49 +04:00
struct rsnd_dvc_platform_info * dvc ;
2014-03-04 08:49:50 +04:00
} ;
struct rsnd_dai_platform_info {
struct rsnd_dai_path_info playback ;
struct rsnd_dai_path_info capture ;
} ;
2013-07-22 08:36:21 +04:00
/*
* flags
*
* 0x0000000A
*
* A : generation
*/
2013-10-11 11:07:01 +04:00
# define RSND_GEN_MASK (0xF << 0)
2013-07-22 08:36:21 +04:00
# define RSND_GEN1 (1 << 0) /* fixme */
# define RSND_GEN2 (2 << 0) /* fixme */
2013-07-22 08:35:52 +04:00
struct rcar_snd_info {
u32 flags ;
2013-07-22 08:36:57 +04:00
struct rsnd_ssi_platform_info * ssi_info ;
int ssi_info_nr ;
2014-03-04 08:51:21 +04:00
struct rsnd_src_platform_info * src_info ;
int src_info_nr ;
2014-05-09 04:44:49 +04:00
struct rsnd_dvc_platform_info * dvc_info ;
int dvc_info_nr ;
2014-03-04 08:49:50 +04:00
struct rsnd_dai_platform_info * dai_info ;
int dai_info_nr ;
2013-07-22 08:35:52 +04:00
int ( * start ) ( int id ) ;
int ( * stop ) ( int id ) ;
} ;
# endif