@ -245,15 +245,17 @@ static void i2c_readsl(struct tegra_i2c_dev *i2c_dev, void *data,
static void tegra_i2c_mask_irq ( struct tegra_i2c_dev * i2c_dev , u32 mask )
{
u32 int_mask = i2c_readl ( i2c_dev , I2C_INT_MASK ) ;
int_mask & = ~ mask ;
u32 int_mask ;
int_mask = i2c_readl ( i2c_dev , I2C_INT_MASK ) & ~ mask ;
i2c_writel ( i2c_dev , int_mask , I2C_INT_MASK ) ;
}
static void tegra_i2c_unmask_irq ( struct tegra_i2c_dev * i2c_dev , u32 mask )
{
u32 int_mask = i2c_readl ( i2c_dev , I2C_INT_MASK ) ;
int_mask | = mask ;
u32 int_mask ;
int_mask = i2c_readl ( i2c_dev , I2C_INT_MASK ) | mask ;
i2c_writel ( i2c_dev , int_mask , I2C_INT_MASK ) ;
}
@ -261,6 +263,7 @@ static int tegra_i2c_flush_fifos(struct tegra_i2c_dev *i2c_dev)
{
unsigned long timeout = jiffies + HZ ;
u32 val = i2c_readl ( i2c_dev , I2C_FIFO_CONTROL ) ;
val | = I2C_FIFO_CONTROL_TX_FLUSH | I2C_FIFO_CONTROL_RX_FLUSH ;
i2c_writel ( i2c_dev , val , I2C_FIFO_CONTROL ) ;
@ -386,7 +389,8 @@ static int tegra_i2c_fill_tx_fifo(struct tegra_i2c_dev *i2c_dev)
*/
static void tegra_dvc_init ( struct tegra_i2c_dev * i2c_dev )
{
u32 val = 0 ;
u32 val ;
val = dvc_readl ( i2c_dev , DVC_CTRL_REG3 ) ;
val | = DVC_CTRL_REG3_SW_PROG ;
val | = DVC_CTRL_REG3_I2C_DONE_INTR_EN ;
@ -400,6 +404,7 @@ static void tegra_dvc_init(struct tegra_i2c_dev *i2c_dev)
static inline int tegra_i2c_clock_enable ( struct tegra_i2c_dev * i2c_dev )
{
int ret ;
if ( ! i2c_dev - > hw - > has_single_clk_source ) {
ret = clk_enable ( i2c_dev - > fast_clk ) ;
if ( ret < 0 ) {
@ -461,11 +466,11 @@ static int tegra_i2c_init(struct tegra_i2c_dev *i2c_dev)
if ( ! i2c_dev - > is_dvc ) {
u32 sl_cfg = i2c_readl ( i2c_dev , I2C_SL_CNFG ) ;
sl_cfg | = I2C_SL_CNFG_NACK | I2C_SL_CNFG_NEWSL ;
i2c_writel ( i2c_dev , sl_cfg , I2C_SL_CNFG ) ;
i2c_writel ( i2c_dev , 0xfc , I2C_SL_ADDR1 ) ;
i2c_writel ( i2c_dev , 0x00 , I2C_SL_ADDR2 ) ;
}
val = 7 < < I2C_FIFO_CONTROL_TX_TRIG_SHIFT |
@ -680,6 +685,7 @@ static int tegra_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
for ( i = 0 ; i < num ; i + + ) {
enum msg_end_type end_type = MSG_END_STOP ;
if ( i < ( num - 1 ) ) {
if ( msgs [ i + 1 ] . flags & I2C_M_NOSTART )
end_type = MSG_END_CONTINUE ;
@ -956,6 +962,7 @@ unprepare_fast_clk:
static int tegra_i2c_remove ( struct platform_device * pdev )
{
struct tegra_i2c_dev * i2c_dev = platform_get_drvdata ( pdev ) ;
i2c_del_adapter ( & i2c_dev - > adapter ) ;
if ( i2c_dev - > is_multimaster_mode )