ARM: dts: exynos: Use i2c-gpio for HDMI-DDC on Arndale
authorAndrzej Hajda <a.hajda@samsung.com>
Thu, 26 Jul 2018 13:22:09 +0000 (15:22 +0200)
committerKrzysztof Kozlowski <krzk@kernel.org>
Wed, 29 Aug 2018 18:57:02 +0000 (20:57 +0200)
HDMI-DDC for unknown reasons doesn't work with Exynos I2C controllers.
Fortunately i2c-gpio comes to the rescue.

Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
arch/arm/boot/dts/exynos5250-arndale.dts
arch/arm/boot/dts/exynos5250-pinctrl.dtsi

index 816d89d4cefd6ada9945ce884451106c37a1acfd..e7a9b9aa85f1c39838dc0a7e5948faf24da10768 100644 (file)
 
 &hdmi {
        status = "okay";
-       ddc = <&i2c_2>;
+       ddc = <&i2c_ddc>;
        hpd-gpios = <&gpx3 7 GPIO_ACTIVE_LOW>;
        vdd_osc-supply = <&ldo10_reg>;
        vdd_pll-supply = <&ldo8_reg>;
        };
 };
 
-&i2c_2 {
-       status = "okay";
-       /* used by HDMI DDC */
-       samsung,i2c-sda-delay = <100>;
-       samsung,i2c-max-bus-freq = <66000>;
-};
-
 &i2c_3 {
        status = "okay";
 
        status = "okay";
        samsung,exynos-sataphy-i2c-phandle = <&sata_phy_i2c>;
 };
+
+&soc {
+       /*
+        * For unknown reasons HDMI-DDC does not work with Exynos I2C
+        * controllers. Lets use software I2C over GPIO pins as a workaround.
+        */
+       i2c_ddc: i2c-gpio {
+               pinctrl-names = "default";
+               pinctrl-0 = <&i2c2_gpio_bus>;
+               status = "okay";
+               compatible = "i2c-gpio";
+               gpios = <&gpa0 6 0 /* sda */
+                        &gpa0 7 0 /* scl */
+                       >;
+               i2c-gpio,delay-us = <2>;
+               #address-cells = <1>;
+               #size-cells = <0>;
+       };
+};
index 6ff6dea29d4490f13bdf457b1ee7ecfb96929cfa..b25d520393b8b076713919278933518d22100313 100644 (file)
                samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
        };
 
+       i2c2_gpio_bus: i2c2-gpio-bus {
+               samsung,pins = "gpa0-6", "gpa0-7";
+               samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+               samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
+       };
+
        uart2_data: uart2-data {
                samsung,pins = "gpa1-0", "gpa1-1";
                samsung,pin-function = <EXYNOS_PIN_FUNC_2>;