diff options
author | Ola Lilja <ola.o.lilja@stericsson.com> | 2010-01-20 11:37:28 +0100 |
---|---|---|
committer | John Rigby <john.rigby@linaro.org> | 2010-09-02 22:43:43 -0600 |
commit | 9dcf1ca851c3a18c8fe4e586ea848b85a8ba9d45 (patch) | |
tree | 327e01af4d0dc8123657712ae967956b2dae777b /drivers/i2c/busses | |
parent | e0c67890aa1b309162559414514f4b090fbbb57e (diff) |
New ASoC driver for Fairbanks.
Diffstat (limited to 'drivers/i2c/busses')
-rw-r--r-- | drivers/i2c/busses/i2c-stm.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/i2c/busses/i2c-stm.c b/drivers/i2c/busses/i2c-stm.c index 77ebe88d0c3..2a8770e3867 100644 --- a/drivers/i2c/busses/i2c-stm.c +++ b/drivers/i2c/busses/i2c-stm.c @@ -533,9 +533,10 @@ static inline int read_i2c_master_mode(struct i2c_driver_data *priv) irq_mask = create_irq_mask(priv->adap.nr, irq_mask); irq_mask = (I2C_IRQ_SRC_ALL & irq_mask); +init_completion(&priv->xfer_complete); writel(readl(I2C_IMSCR(priv->regs)) | irq_mask, I2C_IMSCR(priv->regs)); - init_completion(&priv->xfer_complete); + timeout = wait_for_completion_interruptible_timeout( &priv->xfer_complete, I2C_TIMEOUT); if (timeout == 0) { @@ -654,9 +655,10 @@ static inline int write_i2c_master_mode(struct i2c_driver_data *priv) irq_mask = create_irq_mask(priv->adap.nr, irq_mask); irq_mask = (I2C_IRQ_SRC_ALL & irq_mask); +init_completion(&priv->xfer_complete); writel(readl(I2C_IMSCR(priv->regs)) | irq_mask, I2C_IMSCR(priv->regs)); - init_completion(&priv->xfer_complete); + timeout = wait_for_completion_interruptible_timeout( &priv->xfer_complete, I2C_TIMEOUT); if (timeout == 0) @@ -778,8 +780,7 @@ static int stm_i2c_xfer(struct i2c_adapter *i2c_adap, priv->cli_data.operation = I2C_READ; status = read_i2c(priv); } else { - if ((i == 0) && (num_msgs > 1) - && (msgs[1].flags & I2C_M_RD)) + if ((i == 0) && (num_msgs > 1) && (msgs[1].flags & I2C_M_RD)) read_index_from_i2c_msg(priv, &msgs[0]); priv->cli_data.operation = I2C_WRITE; status = write_i2c(priv); @@ -1019,13 +1020,6 @@ static int stm_i2c_probe(struct platform_device *pdev) goto clk_disable; } - retval = i2c_add_numbered_adapter(p_adap); - if (retval) { - stm_error("STM I2C[%d] Error: failed to add adapter\n", - pdev->id); - goto altfuncdisable; - } - #ifndef CONFIG_STM_I2C_POLLINGMODE retval = request_irq(drv_data->irq, stm_i2c_irq_handler, 0, p_adap->name, drv_data); @@ -1041,6 +1035,13 @@ static int stm_i2c_probe(struct platform_device *pdev) platform_set_drvdata(pdev, drv_data); + retval = i2c_add_numbered_adapter(p_adap); + if (retval) { + stm_error("STM I2C[%d] Error: failed to add adapter\n", + pdev->id); + goto altfuncdisable; + } + printk(KERN_INFO "I2C master cntlr [%s] intialized with irq %d, GPIO pin %d\n", pdata->name, drv_data->irq, pdata->gpio_alt_func); |