| From f071d45fa24d96f9782bcd7478da43ed9c767078 Mon Sep 17 00:00:00 2001 |
| From: Simon Horman <horms+renesas@verge.net.au> |
| Date: Tue, 6 Dec 2016 17:01:28 +0100 |
| Subject: [PATCH 019/299] i2c: rcar: Add per-Generation fallback bindings |
| |
| In the case of Renesas R-Car hardware we know that there are generations of |
| SoCs, e.g. Gen 2 and Gen 3. But beyond that it's not clear what the |
| relationship between IP blocks might be. For example, I believe that |
| r8a7790 is older than r8a7791 but that doesn't imply that the latter is a |
| descendant of the former or vice versa. |
| |
| We can, however, by examining the documentation and behaviour of the |
| hardware at run-time observe that the current driver implementation appears |
| to be compatible with the IP blocks on SoCs within a given generation. |
| |
| For the above reasons and convenience when enabling new SoCs a |
| per-generation fallback compatibility string scheme is being adopted for |
| drivers for Renesas SoCs. |
| |
| Also: |
| * Deprecate renesas,i2c-rcar. It seems poorly named as it is only |
| compatible with R-Car Gen 1. It also appears unused in mainline. |
| * Add some text to describe per-SoC bindings |
| |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Wolfram Sang <wsa@the-dreams.de> |
| (cherry picked from commit ad4a8dc3fec6485b18654d1090ef8012fcfc37b8) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| Documentation/devicetree/bindings/i2c/i2c-rcar.txt | 32 +++++++++++++-------- |
| drivers/i2c/busses/i2c-rcar.c | 5 ++- |
| 2 files changed, 24 insertions(+), 13 deletions(-) |
| |
| --- a/Documentation/devicetree/bindings/i2c/i2c-rcar.txt |
| +++ b/Documentation/devicetree/bindings/i2c/i2c-rcar.txt |
| @@ -1,17 +1,25 @@ |
| I2C for R-Car platforms |
| |
| Required properties: |
| -- compatible: Must be one of |
| - "renesas,i2c-rcar" |
| - "renesas,i2c-r8a7778" |
| - "renesas,i2c-r8a7779" |
| - "renesas,i2c-r8a7790" |
| - "renesas,i2c-r8a7791" |
| - "renesas,i2c-r8a7792" |
| - "renesas,i2c-r8a7793" |
| - "renesas,i2c-r8a7794" |
| - "renesas,i2c-r8a7795" |
| - "renesas,i2c-r8a7796" |
| +- compatible: |
| + "renesas,i2c-r8a7778" if the device is a part of a R8A7778 SoC. |
| + "renesas,i2c-r8a7779" if the device is a part of a R8A7779 SoC. |
| + "renesas,i2c-r8a7790" if the device is a part of a R8A7790 SoC. |
| + "renesas,i2c-r8a7791" if the device is a part of a R8A7791 SoC. |
| + "renesas,i2c-r8a7792" if the device is a part of a R8A7792 SoC. |
| + "renesas,i2c-r8a7793" if the device is a part of a R8A7793 SoC. |
| + "renesas,i2c-r8a7794" if the device is a part of a R8A7794 SoC. |
| + "renesas,i2c-r8a7795" if the device is a part of a R8A7795 SoC. |
| + "renesas,i2c-r8a7796" if the device is a part of a R8A7796 SoC. |
| + "renesas,rcar-gen1-i2c" for a generic R-Car Gen1 compatible device. |
| + "renesas,rcar-gen2-i2c" for a generic R-Car Gen2 compatible device. |
| + "renesas,rcar-gen3-i2c" for a generic R-Car Gen3 compatible device. |
| + "renesas,i2c-rcar" (deprecated) |
| + |
| + When compatible with the generic version, nodes must list the |
| + SoC-specific version corresponding to the platform first followed |
| + by the generic version. |
| + |
| - reg: physical base address of the controller and length of memory mapped |
| region. |
| - interrupts: interrupt specifier. |
| @@ -33,7 +41,7 @@ Examples : |
| i2c0: i2c@e6508000 { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| - compatible = "renesas,i2c-r8a7791"; |
| + compatible = "renesas,i2c-r8a7791", "renesas,rcar-gen2-i2c"; |
| reg = <0 0xe6508000 0 0x40>; |
| interrupts = <0 287 IRQ_TYPE_LEVEL_HIGH>; |
| clocks = <&mstp9_clks R8A7791_CLK_I2C0>; |
| --- a/drivers/i2c/busses/i2c-rcar.c |
| +++ b/drivers/i2c/busses/i2c-rcar.c |
| @@ -795,7 +795,6 @@ static const struct i2c_algorithm rcar_i |
| }; |
| |
| static const struct of_device_id rcar_i2c_dt_ids[] = { |
| - { .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_GEN1 }, |
| { .compatible = "renesas,i2c-r8a7778", .data = (void *)I2C_RCAR_GEN1 }, |
| { .compatible = "renesas,i2c-r8a7779", .data = (void *)I2C_RCAR_GEN1 }, |
| { .compatible = "renesas,i2c-r8a7790", .data = (void *)I2C_RCAR_GEN2 }, |
| @@ -805,6 +804,10 @@ static const struct of_device_id rcar_i2 |
| { .compatible = "renesas,i2c-r8a7794", .data = (void *)I2C_RCAR_GEN2 }, |
| { .compatible = "renesas,i2c-r8a7795", .data = (void *)I2C_RCAR_GEN3 }, |
| { .compatible = "renesas,i2c-r8a7796", .data = (void *)I2C_RCAR_GEN3 }, |
| + { .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_GEN1 }, /* Deprecated */ |
| + { .compatible = "renesas,rcar-gen1-i2c", .data = (void *)I2C_RCAR_GEN1 }, |
| + { .compatible = "renesas,rcar-gen2-i2c", .data = (void *)I2C_RCAR_GEN2 }, |
| + { .compatible = "renesas,rcar-gen3-i2c", .data = (void *)I2C_RCAR_GEN3 }, |
| {}, |
| }; |
| MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids); |