2018-07-02 09:30:44 +03:00
/* SPDX-License-Identifier: GPL-2.0
*
2016-12-02 08:27:30 +03:00
* simple_card_utils . h
2016-05-31 12:00:14 +03:00
*
* Copyright ( c ) 2016 Kuninori Morimoto < kuninori . morimoto . gx @ renesas . com >
*/
2018-07-02 09:30:44 +03:00
2016-12-02 08:27:30 +03:00
# ifndef __SIMPLE_CARD_UTILS_H
# define __SIMPLE_CARD_UTILS_H
2016-05-31 12:00:14 +03:00
# include <sound/soc.h>
2018-06-11 11:32:12 +03:00
# define asoc_simple_card_init_hp(card, sjack, prefix) \
asoc_simple_card_init_jack ( card , sjack , 1 , prefix )
# define asoc_simple_card_init_mic(card, sjack, prefix) \
asoc_simple_card_init_jack ( card , sjack , 0 , prefix )
2016-06-30 09:02:46 +03:00
struct asoc_simple_dai {
const char * name ;
unsigned int sysclk ;
2017-08-17 14:42:36 +03:00
int clk_direction ;
2016-06-30 09:02:46 +03:00
int slots ;
int slot_width ;
unsigned int tx_slot_mask ;
unsigned int rx_slot_mask ;
struct clk * clk ;
} ;
2017-06-15 03:24:09 +03:00
struct asoc_simple_card_data {
u32 convert_rate ;
u32 convert_channels ;
} ;
2018-06-11 11:32:12 +03:00
struct asoc_simple_jack {
struct snd_soc_jack jack ;
struct snd_soc_jack_pin pin ;
struct snd_soc_jack_gpio gpio ;
} ;
2016-05-31 12:00:14 +03:00
int asoc_simple_card_parse_daifmt ( struct device * dev ,
struct device_node * node ,
struct device_node * codec ,
char * prefix ,
unsigned int * retfmt ) ;
2016-08-23 11:51:22 +03:00
__printf ( 3 , 4 )
2016-07-12 02:57:14 +03:00
int asoc_simple_card_set_dailink_name ( struct device * dev ,
struct snd_soc_dai_link * dai_link ,
const char * fmt , . . . ) ;
2016-07-12 02:59:16 +03:00
int asoc_simple_card_parse_card_name ( struct snd_soc_card * card ,
char * prefix ) ;
2016-05-31 12:00:14 +03:00
2017-01-23 10:29:42 +03:00
# define asoc_simple_card_parse_clk_cpu(dev, node, dai_link, simple_dai) \
2017-06-05 07:28:45 +03:00
asoc_simple_card_parse_clk ( dev , node , dai_link - > cpu_of_node , simple_dai , \
2018-08-31 06:08:09 +03:00
dai_link - > cpu_dai_name , NULL )
2017-01-23 10:29:42 +03:00
# define asoc_simple_card_parse_clk_codec(dev, node, dai_link, simple_dai) \
2017-06-05 07:28:45 +03:00
asoc_simple_card_parse_clk ( dev , node , dai_link - > codec_of_node , simple_dai , \
2018-08-31 06:08:09 +03:00
dai_link - > codec_dai_name , dai_link - > codecs )
2017-01-23 10:29:42 +03:00
int asoc_simple_card_parse_clk ( struct device * dev ,
struct device_node * node ,
2016-08-08 08:59:56 +03:00
struct device_node * dai_of_node ,
2017-06-05 07:28:45 +03:00
struct asoc_simple_dai * simple_dai ,
2018-08-31 06:08:09 +03:00
const char * dai_name ,
struct snd_soc_dai_link_component * dlc ) ;
2017-06-09 03:43:18 +03:00
int asoc_simple_card_clk_enable ( struct asoc_simple_dai * dai ) ;
void asoc_simple_card_clk_disable ( struct asoc_simple_dai * dai ) ;
2016-08-08 08:59:56 +03:00
2016-08-08 09:01:43 +03:00
# define asoc_simple_card_parse_cpu(node, dai_link, \
list_name , cells_name , is_single_link ) \
2018-08-31 06:08:09 +03:00
asoc_simple_card_parse_dai ( node , NULL , \
& dai_link - > cpu_of_node , \
2016-08-08 09:01:43 +03:00
& dai_link - > cpu_dai_name , list_name , cells_name , is_single_link )
# define asoc_simple_card_parse_codec(node, dai_link, list_name, cells_name) \
2018-08-31 06:08:09 +03:00
asoc_simple_card_parse_dai ( node , dai_link - > codecs , \
& dai_link - > codec_of_node , \
& dai_link - > codec_dai_name , \
list_name , cells_name , NULL )
2016-08-08 09:01:43 +03:00
# define asoc_simple_card_parse_platform(node, dai_link, list_name, cells_name) \
2019-01-21 03:32:32 +03:00
asoc_simple_card_parse_dai ( node , dai_link - > platforms , \
2018-08-31 06:08:09 +03:00
& dai_link - > platform_of_node , \
2016-08-08 09:01:43 +03:00
NULL , list_name , cells_name , NULL )
int asoc_simple_card_parse_dai ( struct device_node * node ,
2018-08-31 06:08:09 +03:00
struct snd_soc_dai_link_component * dlc ,
2016-08-08 09:01:43 +03:00
struct device_node * * endpoint_np ,
const char * * dai_name ,
const char * list_name ,
const char * cells_name ,
int * is_single_links ) ;
2017-04-20 04:35:18 +03:00
# define asoc_simple_card_parse_graph_cpu(ep, dai_link) \
2018-08-31 06:08:09 +03:00
asoc_simple_card_parse_graph_dai ( ep , NULL , \
& dai_link - > cpu_of_node , \
2017-04-20 04:35:18 +03:00
& dai_link - > cpu_dai_name )
# define asoc_simple_card_parse_graph_codec(ep, dai_link) \
2018-08-31 06:08:09 +03:00
asoc_simple_card_parse_graph_dai ( ep , dai_link - > codecs , \
& dai_link - > codec_of_node , \
2017-04-20 04:35:18 +03:00
& dai_link - > codec_dai_name )
int asoc_simple_card_parse_graph_dai ( struct device_node * ep ,
2018-08-31 06:08:09 +03:00
struct snd_soc_dai_link_component * dlc ,
2017-04-20 04:35:18 +03:00
struct device_node * * endpoint_np ,
const char * * dai_name ) ;
2017-06-14 03:34:35 +03:00
# define asoc_simple_card_of_parse_tdm(np, dai) \
snd_soc_of_parse_tdm_slot ( np , & ( dai ) - > tx_slot_mask , \
& ( dai ) - > rx_slot_mask , \
& ( dai ) - > slots , \
& ( dai ) - > slot_width ) ;
2016-08-09 08:48:30 +03:00
int asoc_simple_card_init_dai ( struct snd_soc_dai * dai ,
struct asoc_simple_dai * simple_dai ) ;
2016-08-09 08:49:41 +03:00
2019-01-21 10:40:59 +03:00
void asoc_simple_card_canonicalize_platform ( struct snd_soc_dai_link * dai_link ) ;
2016-08-10 05:20:19 +03:00
void asoc_simple_card_canonicalize_cpu ( struct snd_soc_dai_link * dai_link ,
int is_single_links ) ;
2016-08-09 08:49:41 +03:00
2016-08-10 05:21:25 +03:00
int asoc_simple_card_clean_reference ( struct snd_soc_card * card ) ;
2017-06-15 03:24:09 +03:00
void asoc_simple_card_convert_fixup ( struct asoc_simple_card_data * data ,
struct snd_pcm_hw_params * params ) ;
2018-11-21 05:10:51 +03:00
void asoc_simple_card_parse_convert ( struct device * dev ,
struct device_node * np , char * prefix ,
2017-06-15 03:24:09 +03:00
struct asoc_simple_card_data * data ) ;
2017-06-15 03:25:02 +03:00
int asoc_simple_card_of_parse_routing ( struct snd_soc_card * card ,
2018-11-21 05:11:13 +03:00
char * prefix ) ;
2017-06-16 04:38:50 +03:00
int asoc_simple_card_of_parse_widgets ( struct snd_soc_card * card ,
char * prefix ) ;
2017-06-15 03:25:02 +03:00
2018-06-11 11:32:12 +03:00
int asoc_simple_card_init_jack ( struct snd_soc_card * card ,
struct asoc_simple_jack * sjack ,
int is_hp , char * prefix ) ;
2016-12-02 08:27:30 +03:00
# endif /* __SIMPLE_CARD_UTILS_H */