瀏覽代碼

Merge branch 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

* 'i2c-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  i2c-algo-bit: Call pre/post_xfer for bit_test
  i2c: Improve deprecation warnings
Linus Torvalds 14 年之前
父節點
當前提交
a1b49cb7e2
共有 2 個文件被更改,包括 23 次插入5 次删除
  1. 19 3
      drivers/i2c/algos/i2c-algo-bit.c
  2. 4 2
      drivers/i2c/i2c-core.c

+ 19 - 3
drivers/i2c/algos/i2c-algo-bit.c

@@ -232,9 +232,17 @@ static int i2c_inb(struct i2c_adapter *i2c_adap)
  * Sanity check for the adapter hardware - check the reaction of
  * Sanity check for the adapter hardware - check the reaction of
  * the bus lines only if it seems to be idle.
  * the bus lines only if it seems to be idle.
  */
  */
-static int test_bus(struct i2c_algo_bit_data *adap, char *name)
+static int test_bus(struct i2c_adapter *i2c_adap)
 {
 {
-	int scl, sda;
+	struct i2c_algo_bit_data *adap = i2c_adap->algo_data;
+	const char *name = i2c_adap->name;
+	int scl, sda, ret;
+
+	if (adap->pre_xfer) {
+		ret = adap->pre_xfer(i2c_adap);
+		if (ret < 0)
+			return -ENODEV;
+	}
 
 
 	if (adap->getscl == NULL)
 	if (adap->getscl == NULL)
 		pr_info("%s: Testing SDA only, SCL is not readable\n", name);
 		pr_info("%s: Testing SDA only, SCL is not readable\n", name);
@@ -297,11 +305,19 @@ static int test_bus(struct i2c_algo_bit_data *adap, char *name)
 		       "while pulling SCL high!\n", name);
 		       "while pulling SCL high!\n", name);
 		goto bailout;
 		goto bailout;
 	}
 	}
+
+	if (adap->post_xfer)
+		adap->post_xfer(i2c_adap);
+
 	pr_info("%s: Test OK\n", name);
 	pr_info("%s: Test OK\n", name);
 	return 0;
 	return 0;
 bailout:
 bailout:
 	sdahi(adap);
 	sdahi(adap);
 	sclhi(adap);
 	sclhi(adap);
+
+	if (adap->post_xfer)
+		adap->post_xfer(i2c_adap);
+
 	return -ENODEV;
 	return -ENODEV;
 }
 }
 
 
@@ -607,7 +623,7 @@ static int __i2c_bit_add_bus(struct i2c_adapter *adap,
 	int ret;
 	int ret;
 
 
 	if (bit_test) {
 	if (bit_test) {
-		ret = test_bus(bit_adap, adap->name);
+		ret = test_bus(adap);
 		if (ret < 0)
 		if (ret < 0)
 			return -ENODEV;
 			return -ENODEV;
 	}
 	}

+ 4 - 2
drivers/i2c/i2c-core.c

@@ -797,7 +797,8 @@ static int i2c_do_add_adapter(struct i2c_driver *driver,
 
 
 	/* Let legacy drivers scan this bus for matching devices */
 	/* Let legacy drivers scan this bus for matching devices */
 	if (driver->attach_adapter) {
 	if (driver->attach_adapter) {
-		dev_warn(&adap->dev, "attach_adapter method is deprecated\n");
+		dev_warn(&adap->dev, "%s: attach_adapter method is deprecated\n",
+			 driver->driver.name);
 		dev_warn(&adap->dev, "Please use another way to instantiate "
 		dev_warn(&adap->dev, "Please use another way to instantiate "
 			 "your i2c_client\n");
 			 "your i2c_client\n");
 		/* We ignore the return code; if it fails, too bad */
 		/* We ignore the return code; if it fails, too bad */
@@ -984,7 +985,8 @@ static int i2c_do_del_adapter(struct i2c_driver *driver,
 
 
 	if (!driver->detach_adapter)
 	if (!driver->detach_adapter)
 		return 0;
 		return 0;
-	dev_warn(&adapter->dev, "detach_adapter method is deprecated\n");
+	dev_warn(&adapter->dev, "%s: detach_adapter method is deprecated\n",
+		 driver->driver.name);
 	res = driver->detach_adapter(adapter);
 	res = driver->detach_adapter(adapter);
 	if (res)
 	if (res)
 		dev_err(&adapter->dev, "detach_adapter failed (%d) "
 		dev_err(&adapter->dev, "detach_adapter failed (%d) "