aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/i2c
diff options
context:
space:
mode:
authorLinus Walleij <linus.walleij@linaro.org>2013-06-15 16:38:14 -0400
committerWolfram Sang <wsa@the-dreams.de>2013-06-15 17:16:37 -0400
commitd15b85755b25e1b0201e24bc0c29f31eb4e856c4 (patch)
tree84b7cc6d18a83d316df08e9599296d6585c6c5a9 /drivers/i2c
parent3a205be5e8746aac70d4f5083cef4b3becfbab91 (diff)
i2c: nomadik: allocate adapter number dynamically
The Nomadik I2C was using a local atomic counter to number the I2C adapters. This does not work on configurations where you also add, say a GPIO bit-banged adapter to the system. They will start to conflict about being adapter 0. There is no reason to use the numbered adapter function, and the semantic effect on systems with only Nomadik I2C blocks will be none - instead of increasing the number atomically in the driver itself, it is done in the I2C core. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/busses/i2c-nomadik.c9
1 files changed, 2 insertions, 7 deletions
diff --git a/drivers/i2c/busses/i2c-nomadik.c b/drivers/i2c/busses/i2c-nomadik.c
index 9f1423ac7b3b..063e726dde11 100644
--- a/drivers/i2c/busses/i2c-nomadik.c
+++ b/drivers/i2c/busses/i2c-nomadik.c
@@ -15,7 +15,6 @@
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/module.h> 16#include <linux/module.h>
17#include <linux/amba/bus.h> 17#include <linux/amba/bus.h>
18#include <linux/atomic.h>
19#include <linux/slab.h> 18#include <linux/slab.h>
20#include <linux/interrupt.h> 19#include <linux/interrupt.h>
21#include <linux/i2c.h> 20#include <linux/i2c.h>
@@ -981,8 +980,6 @@ static void nmk_i2c_of_probe(struct device_node *np,
981 pdata->sm = I2C_FREQ_MODE_FAST; 980 pdata->sm = I2C_FREQ_MODE_FAST;
982} 981}
983 982
984static atomic_t adapter_id = ATOMIC_INIT(0);
985
986static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id) 983static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
987{ 984{
988 int ret = 0; 985 int ret = 0;
@@ -1095,10 +1092,8 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
1095 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; 1092 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
1096 adap->algo = &nmk_i2c_algo; 1093 adap->algo = &nmk_i2c_algo;
1097 adap->timeout = msecs_to_jiffies(pdata->timeout); 1094 adap->timeout = msecs_to_jiffies(pdata->timeout);
1098 adap->nr = atomic_read(&adapter_id);
1099 snprintf(adap->name, sizeof(adap->name), 1095 snprintf(adap->name, sizeof(adap->name),
1100 "Nomadik I2C%d at %pR", adap->nr, &adev->res); 1096 "Nomadik I2C at %pR", &adev->res);
1101 atomic_inc(&adapter_id);
1102 1097
1103 /* fetch the controller configuration from machine */ 1098 /* fetch the controller configuration from machine */
1104 dev->cfg.clk_freq = pdata->clk_freq; 1099 dev->cfg.clk_freq = pdata->clk_freq;
@@ -1113,7 +1108,7 @@ static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
1113 "initialize %s on virtual base %p\n", 1108 "initialize %s on virtual base %p\n",
1114 adap->name, dev->virtbase); 1109 adap->name, dev->virtbase);
1115 1110
1116 ret = i2c_add_numbered_adapter(adap); 1111 ret = i2c_add_adapter(adap);
1117 if (ret) { 1112 if (ret) {
1118 dev_err(&adev->dev, "failed to add adapter\n"); 1113 dev_err(&adev->dev, "failed to add adapter\n");
1119 goto err_add_adap; 1114 goto err_add_adap;