Loading drivers/i2c/busses/i2c-imx.c +5 −15 Original line number Diff line number Diff line Loading @@ -412,19 +412,6 @@ static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx) dma->chan_using = NULL; } static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits) { unsigned int temp; /* * i2sr_clr_opcode is the value to clear all interrupts. Here we want to * clear only <bits>, so we write ~i2sr_clr_opcode with just <bits> * toggled. This is required because i.MX needs W1C and Vybrid uses W0C. */ temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); } static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic) { unsigned long orig_jiffies = jiffies; Loading @@ -437,7 +424,8 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool a /* check for arbitration lost */ if (temp & I2SR_IAL) { i2c_imx_clear_irq(i2c_imx, I2SR_IAL); temp &= ~I2SR_IAL; imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); return -EAGAIN; } Loading Loading @@ -635,7 +623,9 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id) if (temp & I2SR_IIF) { /* save status register */ i2c_imx->i2csr = temp; i2c_imx_clear_irq(i2c_imx, I2SR_IIF); temp &= ~I2SR_IIF; temp |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IIF); imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); wake_up(&i2c_imx->queue); return IRQ_HANDLED; } Loading Loading
drivers/i2c/busses/i2c-imx.c +5 −15 Original line number Diff line number Diff line Loading @@ -412,19 +412,6 @@ static void i2c_imx_dma_free(struct imx_i2c_struct *i2c_imx) dma->chan_using = NULL; } static void i2c_imx_clear_irq(struct imx_i2c_struct *i2c_imx, unsigned int bits) { unsigned int temp; /* * i2sr_clr_opcode is the value to clear all interrupts. Here we want to * clear only <bits>, so we write ~i2sr_clr_opcode with just <bits> * toggled. This is required because i.MX needs W1C and Vybrid uses W0C. */ temp = ~i2c_imx->hwdata->i2sr_clr_opcode ^ bits; imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); } static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool atomic) { unsigned long orig_jiffies = jiffies; Loading @@ -437,7 +424,8 @@ static int i2c_imx_bus_busy(struct imx_i2c_struct *i2c_imx, int for_busy, bool a /* check for arbitration lost */ if (temp & I2SR_IAL) { i2c_imx_clear_irq(i2c_imx, I2SR_IAL); temp &= ~I2SR_IAL; imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); return -EAGAIN; } Loading Loading @@ -635,7 +623,9 @@ static irqreturn_t i2c_imx_isr(int irq, void *dev_id) if (temp & I2SR_IIF) { /* save status register */ i2c_imx->i2csr = temp; i2c_imx_clear_irq(i2c_imx, I2SR_IIF); temp &= ~I2SR_IIF; temp |= (i2c_imx->hwdata->i2sr_clr_opcode & I2SR_IIF); imx_i2c_write_reg(temp, i2c_imx, IMX_I2C_I2SR); wake_up(&i2c_imx->queue); return IRQ_HANDLED; } Loading