aboutsummaryrefslogtreecommitdiff
path: root/drivers/i2c/busses
diff options
context:
space:
mode:
authorOla Lilja <ola.o.lilja@stericsson.com>2010-01-20 11:37:28 +0100
committerJohn Rigby <john.rigby@linaro.org>2010-09-02 22:43:43 -0600
commit9dcf1ca851c3a18c8fe4e586ea848b85a8ba9d45 (patch)
tree327e01af4d0dc8123657712ae967956b2dae777b /drivers/i2c/busses
parente0c67890aa1b309162559414514f4b090fbbb57e (diff)
New ASoC driver for Fairbanks.
Diffstat (limited to 'drivers/i2c/busses')
-rw-r--r--drivers/i2c/busses/i2c-stm.c23
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);