@ -65,7 +65,6 @@ static void i2s_txctrl(struct i2s_reg *i2s_reg, int on)
if ( on ) {
if ( on ) {
con | = CON_ACTIVE ;
con | = CON_ACTIVE ;
con & = ~ CON_TXCH_PAUSE ;
con & = ~ CON_TXCH_PAUSE ;
} else {
} else {
con | = CON_TXCH_PAUSE ;
con | = CON_TXCH_PAUSE ;
con & = ~ CON_ACTIVE ;
con & = ~ CON_ACTIVE ;
@ -300,18 +299,29 @@ int i2s_tx_init(struct i2stx_info *pi2s_tx)
int ret ;
int ret ;
struct i2s_reg * i2s_reg =
struct i2s_reg * i2s_reg =
( struct i2s_reg * ) pi2s_tx - > base_address ;
( struct i2s_reg * ) pi2s_tx - > base_address ;
if ( pi2s_tx - > id = = 0 ) {
/* Initialize GPIO for I2S-0 */
exynos_pinmux_config ( PERIPH_ID_I2S0 , 0 ) ;
/* Initialize GPIO for I2s */
/* Set EPLL Clock */
ret = set_epll_clk ( pi2s_tx - > samplingrate * pi2s_tx - > rfs * 4 ) ;
} else if ( pi2s_tx - > id = = 1 ) {
/* Initialize GPIO for I2S-1 */
exynos_pinmux_config ( PERIPH_ID_I2S1 , 0 ) ;
exynos_pinmux_config ( PERIPH_ID_I2S1 , 0 ) ;
/* Set EPLL Clock */
/* Set EPLL Clock */
ret = set_epll_clk ( pi2s_tx - > audio_pll_clk ) ;
ret = set_epll_clk ( pi2s_tx - > audio_pll_clk ) ;
} else {
debug ( " %s: unsupported i2s-%d bus \n " , __func__ , pi2s_tx - > id ) ;
return - 1 ;
}
if ( ret ! = 0 ) {
if ( ret ! = 0 ) {
debug ( " %s: epll clock set rate falied \n " , __func__ ) ;
debug ( " %s: epll clock set rate fail ed \n " , __func__ ) ;
return - 1 ;
return - 1 ;
}
}
/* Select Clk Source for Audio1 */
/* Select Clk Source for Audio 0 or 1 */
ret = set_i2s_clk_source ( pi2s_tx - > id ) ;
ret = set_i2s_clk_source ( pi2s_tx - > id ) ;
if ( ret = = - 1 ) {
if ( ret = = - 1 ) {
debug ( " %s: unsupported clock for i2s-%d \n " , __func__ ,
debug ( " %s: unsupported clock for i2s-%d \n " , __func__ ,
@ -319,10 +329,19 @@ int i2s_tx_init(struct i2stx_info *pi2s_tx)
return - 1 ;
return - 1 ;
}
}
if ( pi2s_tx - > id = = 0 ) {
/*Reset the i2s module */
writel ( CON_RESET , & i2s_reg - > con ) ;
writel ( MOD_OP_CLK | MOD_RCLKSRC , & i2s_reg - > mod ) ;
/* set i2s prescaler */
writel ( PSREN | PSVAL , & i2s_reg - > psr ) ;
} else {
/* Set Prescaler to get MCLK */
/* Set Prescaler to get MCLK */
ret = set_i2s_clk_prescaler ( pi2s_tx - > audio_pll_clk ,
ret = set_i2s_clk_prescaler ( pi2s_tx - > audio_pll_clk ,
( pi2s_tx - > samplingrate * ( pi2s_tx - > rfs ) ) ,
( pi2s_tx - > samplingrate * ( pi2s_tx - > rfs ) ) ,
pi2s_tx - > id ) ;
pi2s_tx - > id ) ;
}
if ( ret = = - 1 ) {
if ( ret = = - 1 ) {
debug ( " %s: unsupported prescalar for i2s-%d \n " , __func__ ,
debug ( " %s: unsupported prescalar for i2s-%d \n " , __func__ ,
pi2s_tx - > id ) ;
pi2s_tx - > id ) ;