@ -112,6 +112,59 @@ int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
}
EXPORT_SYMBOL_GPL ( tegra_asoc_utils_set_rate ) ;
int tegra_asoc_utils_set_ac97_rate ( struct tegra_asoc_utils_data * data )
{
const int pll_rate = 73728000 ;
const int ac97_rate = 24576000 ;
int err ;
clk_disable_unprepare ( data - > clk_cdev1 ) ;
clk_disable_unprepare ( data - > clk_pll_a_out0 ) ;
clk_disable_unprepare ( data - > clk_pll_a ) ;
/*
* AC97 rate is fixed at 24.576 MHz and is used for both the host
* controller and the external codec
*/
err = clk_set_rate ( data - > clk_pll_a , pll_rate ) ;
if ( err ) {
dev_err ( data - > dev , " Can't set pll_a rate: %d \n " , err ) ;
return err ;
}
err = clk_set_rate ( data - > clk_pll_a_out0 , ac97_rate ) ;
if ( err ) {
dev_err ( data - > dev , " Can't set pll_a_out0 rate: %d \n " , err ) ;
return err ;
}
/* Don't set cdev1/extern1 rate; it's locked to pll_a_out0 */
err = clk_prepare_enable ( data - > clk_pll_a ) ;
if ( err ) {
dev_err ( data - > dev , " Can't enable pll_a: %d \n " , err ) ;
return err ;
}
err = clk_prepare_enable ( data - > clk_pll_a_out0 ) ;
if ( err ) {
dev_err ( data - > dev , " Can't enable pll_a_out0: %d \n " , err ) ;
return err ;
}
err = clk_prepare_enable ( data - > clk_cdev1 ) ;
if ( err ) {
dev_err ( data - > dev , " Can't enable cdev1: %d \n " , err ) ;
return err ;
}
data - > set_baseclock = pll_rate ;
data - > set_mclk = ac97_rate ;
return 0 ;
}
EXPORT_SYMBOL_GPL ( tegra_asoc_utils_set_ac97_rate ) ;
int tegra_asoc_utils_init ( struct tegra_asoc_utils_data * data ,
struct device * dev )
{