d2ede0b
From 4c5301abbf81f4351416cec1e8a02647d96e6fd1 Mon Sep 17 00:00:00 2001
d2ede0b
From: Mika Westerberg <mika.westerberg@linux.intel.com>
d2ede0b
Date: Mon, 30 Nov 2015 17:11:44 +0200
d2ede0b
Subject: [PATCH 16/16] i2c: designware: Convert to use unified device property
d2ede0b
 API
d2ede0b
d2ede0b
With ACPI _DSD (introduced in ACPI v5.1) it is now possible to pass device
d2ede0b
configuration information from ACPI in addition to DT. In order to support
d2ede0b
this, convert the driver to use the unified device property accessors
d2ede0b
instead of DT specific.
d2ede0b
d2ede0b
Change to ordering a bit so that we first try platform data and if that's
d2ede0b
not available look from device properties. ACPI *CNT methods are then used
d2ede0b
as last resort to override everything else.
d2ede0b
d2ede0b
Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
d2ede0b
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
d2ede0b
Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
d2ede0b
Acked-by: Wolfram Sang <wsa@the-dreams.de>
d2ede0b
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
d2ede0b
---
d2ede0b
 drivers/i2c/busses/i2c-designware-platdrv.c | 50 +++++++++++++----------------
d2ede0b
 1 file changed, 23 insertions(+), 27 deletions(-)
d2ede0b
d2ede0b
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c
d2ede0b
index 809579e..06061b5 100644
d2ede0b
--- a/drivers/i2c/busses/i2c-designware-platdrv.c
d2ede0b
+++ b/drivers/i2c/busses/i2c-designware-platdrv.c
d2ede0b
@@ -36,6 +36,7 @@
d2ede0b
 #include <linux/platform_device.h>
d2ede0b
 #include <linux/pm.h>
d2ede0b
 #include <linux/pm_runtime.h>
d2ede0b
+#include <linux/property.h>
d2ede0b
 #include <linux/io.h>
d2ede0b
 #include <linux/slab.h>
d2ede0b
 #include <linux/acpi.h>
d2ede0b
@@ -129,10 +130,10 @@ static inline int dw_i2c_acpi_configure(struct platform_device *pdev)
d2ede0b
 
d2ede0b
 static int dw_i2c_plat_probe(struct platform_device *pdev)
d2ede0b
 {
d2ede0b
+	struct dw_i2c_platform_data *pdata = dev_get_platdata(&pdev->dev);
d2ede0b
 	struct dw_i2c_dev *dev;
d2ede0b
 	struct i2c_adapter *adap;
d2ede0b
 	struct resource *mem;
d2ede0b
-	struct dw_i2c_platform_data *pdata;
d2ede0b
 	int irq, r;
d2ede0b
 	u32 clk_freq, ht = 0;
d2ede0b
 
d2ede0b
@@ -156,33 +157,28 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)
d2ede0b
 	/* fast mode by default because of legacy reasons */
d2ede0b
 	clk_freq = 400000;
d2ede0b
 
d2ede0b
-	if (has_acpi_companion(&pdev->dev)) {
d2ede0b
-		dw_i2c_acpi_configure(pdev);
d2ede0b
-	} else if (pdev->dev.of_node) {
d2ede0b
-		of_property_read_u32(pdev->dev.of_node,
d2ede0b
-					"i2c-sda-hold-time-ns", &ht;;
d2ede0b
-
d2ede0b
-		of_property_read_u32(pdev->dev.of_node,
d2ede0b
-				     "i2c-sda-falling-time-ns",
d2ede0b
-				     &dev->sda_falling_time);
d2ede0b
-		of_property_read_u32(pdev->dev.of_node,
d2ede0b
-				     "i2c-scl-falling-time-ns",
d2ede0b
-				     &dev->scl_falling_time);
d2ede0b
-
d2ede0b
-		of_property_read_u32(pdev->dev.of_node, "clock-frequency",
d2ede0b
-				     &clk_freq);
d2ede0b
-
d2ede0b
-		/* Only standard mode at 100kHz and fast mode at 400kHz
d2ede0b
-		 * are supported.
d2ede0b
-		 */
d2ede0b
-		if (clk_freq != 100000 && clk_freq != 400000) {
d2ede0b
-			dev_err(&pdev->dev, "Only 100kHz and 400kHz supported");
d2ede0b
-			return -EINVAL;
d2ede0b
-		}
d2ede0b
+	if (pdata) {
d2ede0b
+		clk_freq = pdata->i2c_scl_freq;
d2ede0b
 	} else {
d2ede0b
-		pdata = dev_get_platdata(&pdev->dev);
d2ede0b
-		if (pdata)
d2ede0b
-			clk_freq = pdata->i2c_scl_freq;
d2ede0b
+		device_property_read_u32(&pdev->dev, "i2c-sda-hold-time-ns",
d2ede0b
+					 &ht;;
d2ede0b
+		device_property_read_u32(&pdev->dev, "i2c-sda-falling-time-ns",
d2ede0b
+					 &dev->sda_falling_time);
d2ede0b
+		device_property_read_u32(&pdev->dev, "i2c-scl-falling-time-ns",
d2ede0b
+					 &dev->scl_falling_time);
d2ede0b
+		device_property_read_u32(&pdev->dev, "clock-frequency",
d2ede0b
+					 &clk_freq);
d2ede0b
+	}
d2ede0b
+
d2ede0b
+	if (has_acpi_companion(&pdev->dev))
d2ede0b
+		dw_i2c_acpi_configure(pdev);
d2ede0b
+
d2ede0b
+	/*
d2ede0b
+	 * Only standard mode at 100kHz and fast mode at 400kHz are supported.
d2ede0b
+	 */
d2ede0b
+	if (clk_freq != 100000 && clk_freq != 400000) {
d2ede0b
+		dev_err(&pdev->dev, "Only 100kHz and 400kHz supported");
d2ede0b
+		return -EINVAL;
d2ede0b
 	}
d2ede0b
 
d2ede0b
 	r = i2c_dw_eval_lock_support(dev);
d2ede0b
-- 
d2ede0b
2.5.0
d2ede0b