Loading Documentation/devicetree/bindings/i2c/i2c-rcar.txt 0 → 100644 +23 −0 Original line number Original line Diff line number Diff line I2C for R-Car platforms Required properties: - compatible: Must be one of "renesas,i2c-rcar" "renesas,i2c-r8a7778" "renesas,i2c-r8a7779" "renesas,i2c-r8a7790" - reg: physical base address of the controller and length of memory mapped region. - interrupts: interrupt specifier. Optional properties: - clock-frequency: desired I2C bus clock frequency in Hz. The absence of this propoerty indicates the default frequency 100 kHz. Examples : i2c0: i2c@e6500000 { compatible = "renesas,i2c-rcar-h2"; reg = <0 0xe6500000 0 0x428>; interrupts = <0 174 0x4>; }; drivers/i2c/busses/i2c-rcar.c +19 −2 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <linux/i2c/i2c-rcar.h> #include <linux/i2c/i2c-rcar.h> #include <linux/kernel.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/module.h> #include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/pm_runtime.h> #include <linux/slab.h> #include <linux/slab.h> Loading Loading @@ -638,6 +639,15 @@ static const struct i2c_algorithm rcar_i2c_algo = { .functionality = rcar_i2c_func, .functionality = rcar_i2c_func, }; }; static const struct of_device_id rcar_i2c_dt_ids[] = { { .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_H1 }, { .compatible = "renesas,i2c-r8a7778", .data = (void *)I2C_RCAR_H1 }, { .compatible = "renesas,i2c-r8a7779", .data = (void *)I2C_RCAR_H1 }, { .compatible = "renesas,i2c-r8a7790", .data = (void *)I2C_RCAR_H2 }, {}, }; MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids); static int rcar_i2c_probe(struct platform_device *pdev) static int rcar_i2c_probe(struct platform_device *pdev) { { struct i2c_rcar_platform_data *pdata = dev_get_platdata(&pdev->dev); struct i2c_rcar_platform_data *pdata = dev_get_platdata(&pdev->dev); Loading @@ -655,9 +665,14 @@ static int rcar_i2c_probe(struct platform_device *pdev) } } bus_speed = 100000; /* default 100 kHz */ bus_speed = 100000; /* default 100 kHz */ if (pdata && pdata->bus_speed) ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed); if (ret < 0 && pdata && pdata->bus_speed) bus_speed = pdata->bus_speed; bus_speed = pdata->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 = platform_get_device_id(pdev)->driver_data; ret = rcar_i2c_clock_calculate(priv, bus_speed, dev); ret = rcar_i2c_clock_calculate(priv, bus_speed, dev); Loading @@ -679,6 +694,7 @@ static int rcar_i2c_probe(struct platform_device *pdev) adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; adap->retries = 3; adap->retries = 3; adap->dev.parent = dev; adap->dev.parent = dev; adap->dev.of_node = dev->of_node; i2c_set_adapdata(adap, priv); i2c_set_adapdata(adap, priv); strlcpy(adap->name, pdev->name, sizeof(adap->name)); strlcpy(adap->name, pdev->name, sizeof(adap->name)); Loading Loading @@ -726,6 +742,7 @@ static struct platform_driver rcar_i2c_driver = { .driver = { .driver = { .name = "i2c-rcar", .name = "i2c-rcar", .owner = THIS_MODULE, .owner = THIS_MODULE, .of_match_table = rcar_i2c_dt_ids, }, }, .probe = rcar_i2c_probe, .probe = rcar_i2c_probe, .remove = rcar_i2c_remove, .remove = rcar_i2c_remove, Loading Loading
Documentation/devicetree/bindings/i2c/i2c-rcar.txt 0 → 100644 +23 −0 Original line number Original line Diff line number Diff line I2C for R-Car platforms Required properties: - compatible: Must be one of "renesas,i2c-rcar" "renesas,i2c-r8a7778" "renesas,i2c-r8a7779" "renesas,i2c-r8a7790" - reg: physical base address of the controller and length of memory mapped region. - interrupts: interrupt specifier. Optional properties: - clock-frequency: desired I2C bus clock frequency in Hz. The absence of this propoerty indicates the default frequency 100 kHz. Examples : i2c0: i2c@e6500000 { compatible = "renesas,i2c-rcar-h2"; reg = <0 0xe6500000 0 0x428>; interrupts = <0 174 0x4>; };
drivers/i2c/busses/i2c-rcar.c +19 −2 Original line number Original line Diff line number Diff line Loading @@ -33,6 +33,7 @@ #include <linux/i2c/i2c-rcar.h> #include <linux/i2c/i2c-rcar.h> #include <linux/kernel.h> #include <linux/kernel.h> #include <linux/module.h> #include <linux/module.h> #include <linux/of_device.h> #include <linux/platform_device.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/pm_runtime.h> #include <linux/slab.h> #include <linux/slab.h> Loading Loading @@ -638,6 +639,15 @@ static const struct i2c_algorithm rcar_i2c_algo = { .functionality = rcar_i2c_func, .functionality = rcar_i2c_func, }; }; static const struct of_device_id rcar_i2c_dt_ids[] = { { .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_H1 }, { .compatible = "renesas,i2c-r8a7778", .data = (void *)I2C_RCAR_H1 }, { .compatible = "renesas,i2c-r8a7779", .data = (void *)I2C_RCAR_H1 }, { .compatible = "renesas,i2c-r8a7790", .data = (void *)I2C_RCAR_H2 }, {}, }; MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids); static int rcar_i2c_probe(struct platform_device *pdev) static int rcar_i2c_probe(struct platform_device *pdev) { { struct i2c_rcar_platform_data *pdata = dev_get_platdata(&pdev->dev); struct i2c_rcar_platform_data *pdata = dev_get_platdata(&pdev->dev); Loading @@ -655,9 +665,14 @@ static int rcar_i2c_probe(struct platform_device *pdev) } } bus_speed = 100000; /* default 100 kHz */ bus_speed = 100000; /* default 100 kHz */ if (pdata && pdata->bus_speed) ret = of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed); if (ret < 0 && pdata && pdata->bus_speed) bus_speed = pdata->bus_speed; bus_speed = pdata->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 = platform_get_device_id(pdev)->driver_data; ret = rcar_i2c_clock_calculate(priv, bus_speed, dev); ret = rcar_i2c_clock_calculate(priv, bus_speed, dev); Loading @@ -679,6 +694,7 @@ static int rcar_i2c_probe(struct platform_device *pdev) adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD; adap->retries = 3; adap->retries = 3; adap->dev.parent = dev; adap->dev.parent = dev; adap->dev.of_node = dev->of_node; i2c_set_adapdata(adap, priv); i2c_set_adapdata(adap, priv); strlcpy(adap->name, pdev->name, sizeof(adap->name)); strlcpy(adap->name, pdev->name, sizeof(adap->name)); Loading Loading @@ -726,6 +742,7 @@ static struct platform_driver rcar_i2c_driver = { .driver = { .driver = { .name = "i2c-rcar", .name = "i2c-rcar", .owner = THIS_MODULE, .owner = THIS_MODULE, .of_match_table = rcar_i2c_dt_ids, }, }, .probe = rcar_i2c_probe, .probe = rcar_i2c_probe, .remove = rcar_i2c_remove, .remove = rcar_i2c_remove, Loading