Merge branch 'i2c/for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
[firefly-linux-kernel-4.4.55.git] / drivers / i2c / busses / i2c-rcar.c
index d8b5a8fee1e6c85588dd569b80894306b1c76b1a..b0ae560b38c308335229f0f9b2317f0361b6b8a3 100644 (file)
@@ -27,7 +27,6 @@
 #include <linux/interrupt.h>
 #include <linux/io.h>
 #include <linux/i2c.h>
-#include <linux/i2c/i2c-rcar.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/of_device.h>
 enum rcar_i2c_type {
        I2C_RCAR_GEN1,
        I2C_RCAR_GEN2,
+       I2C_RCAR_GEN3,
 };
 
 struct rcar_i2c_priv {
@@ -178,6 +178,7 @@ static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
                cdf_width = 2;
                break;
        case I2C_RCAR_GEN2:
+       case I2C_RCAR_GEN3:
                cdf_width = 3;
                break;
        default:
@@ -625,13 +626,13 @@ static const struct of_device_id rcar_i2c_dt_ids[] = {
        { .compatible = "renesas,i2c-r8a7792", .data = (void *)I2C_RCAR_GEN2 },
        { .compatible = "renesas,i2c-r8a7793", .data = (void *)I2C_RCAR_GEN2 },
        { .compatible = "renesas,i2c-r8a7794", .data = (void *)I2C_RCAR_GEN2 },
+       { .compatible = "renesas,i2c-r8a7795", .data = (void *)I2C_RCAR_GEN3 },
        {},
 };
 MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids);
 
 static int rcar_i2c_probe(struct platform_device *pdev)
 {
-       struct i2c_rcar_platform_data *pdata = dev_get_platdata(&pdev->dev);
        struct rcar_i2c_priv *priv;
        struct i2c_adapter *adap;
        struct resource *res;
@@ -650,15 +651,9 @@ static int rcar_i2c_probe(struct platform_device *pdev)
        }
 
        bus_speed = 100000; /* default 100 kHz */
-       ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed);
-       if (ret < 0 && pdata && pdata->bus_speed)
-               bus_speed = pdata->bus_speed;
+       of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed);
 
-       if (pdev->dev.of_node)
-               priv->devtype = (long)of_match_device(rcar_i2c_dt_ids,
-                                                     dev)->data;
-       else
-               priv->devtype = platform_get_device_id(pdev)->driver_data;
+       priv->devtype = (enum rcar_i2c_type)of_match_device(rcar_i2c_dt_ids, dev)->data;
 
        ret = rcar_i2c_clock_calculate(priv, bus_speed, dev);
        if (ret < 0)
@@ -716,14 +711,6 @@ static int rcar_i2c_remove(struct platform_device *pdev)
        return 0;
 }
 
-static const struct platform_device_id rcar_i2c_id_table[] = {
-       { "i2c-rcar",           I2C_RCAR_GEN1 },
-       { "i2c-rcar_gen1",      I2C_RCAR_GEN1 },
-       { "i2c-rcar_gen2",      I2C_RCAR_GEN2 },
-       {},
-};
-MODULE_DEVICE_TABLE(platform, rcar_i2c_id_table);
-
 static struct platform_driver rcar_i2c_driver = {
        .driver = {
                .name   = "i2c-rcar",
@@ -731,7 +718,6 @@ static struct platform_driver rcar_i2c_driver = {
        },
        .probe          = rcar_i2c_probe,
        .remove         = rcar_i2c_remove,
-       .id_table       = rcar_i2c_id_table,
 };
 
 module_platform_driver(rcar_i2c_driver);