@ -26,6 +26,7 @@ struct simple_card_data {
struct simple_dai_props {
struct asoc_simple_dai cpu_dai ;
struct asoc_simple_dai codec_dai ;
unsigned int mclk_fs ;
} * dai_props ;
unsigned int mclk_fs ;
int gpio_hp_det ;
@ -76,11 +77,18 @@ static int asoc_simple_card_hw_params(struct snd_pcm_substream *substream,
struct snd_soc_pcm_runtime * rtd = substream - > private_data ;
struct snd_soc_dai * codec_dai = rtd - > codec_dai ;
struct simple_card_data * priv = snd_soc_card_get_drvdata ( rtd - > card ) ;
unsigned int mclk ;
struct simple_dai_props * dai_props =
& priv - > dai_props [ rtd - rtd - > card - > rtd ] ;
unsigned int mclk , mclk_fs = 0 ;
int ret = 0 ;
if ( priv - > mclk_fs ) {
mclk = params_rate ( params ) * priv - > mclk_fs ;
if ( priv - > mclk_fs )
mclk_fs = priv - > mclk_fs ;
else if ( dai_props - > mclk_fs )
mclk_fs = dai_props - > mclk_fs ;
if ( mclk_fs ) {
mclk = params_rate ( params ) * mclk_fs ;
ret = snd_soc_dai_set_sysclk ( codec_dai , 0 , mclk ,
SND_SOC_CLOCK_IN ) ;
}
@ -313,6 +321,7 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
char prop [ 128 ] ;
char * prefix = " " ;
int ret , cpu_args ;
u32 val ;
/* For single DAI link & old style of DT node */
if ( is_top_level_node )
@ -338,6 +347,9 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
if ( ret < 0 )
goto dai_link_of_err ;
if ( ! of_property_read_u32 ( node , " mclk-fs " , & val ) )
dai_props - > mclk_fs = val ;
ret = asoc_simple_card_sub_parse_of ( cpu , & dai_props - > cpu_dai ,
& dai_link - > cpu_of_node ,
& dai_link - > cpu_dai_name ,