Hello, I'm trying to get the HDMI port working on a Exynos4412 based board. Attached is a snippet of a dts. This config was supposed to "work" in the past. However with 3.15-rc1 some things changed. samsung,exynos4210-hdmiddc and samsung,exynos4212-hdmiphy have no function anymore, the code that previously handled these compatible strings is gone. So, it looks like that without some patching, HDMI support is atm broken. I have applied these: http://www.spinics.net/lists/linux-samsung-soc/msg28161.html http://www.spinics.net/lists/linux-samsung-soc/msg28259.html With the first one I can drop a clock from the hdmi node. But then trouble starts. So, first of all I'm unsure what the 'hdmiddc' node should be converted to. Documentation (exynos_hdmi.txt) doesn't help here, since it just says "phandle to the hdmi ddc node". What kind of 'hdmi ddc node'? From the code it looks like that it should point to an i2c adapter now. So should it point to 'i2c_2' now? The second thing is 'phy', which should be a "phandle to the hdmi ddc node". Again, no idea what that node should be. Apparantly such nodes can't be created with current kernel code anyway, primary reason to apply the simply-phy patches. OK, so I have to put a simple-phys node in my dts now. Or, wait, do I just replace the hdmiphy node with a simple-phys node? Would look something like this: hdmiphy: simple-phys@38 { compatible = "samsung,exynos4412-simple-phy"; reg = <0x38 0x10000>; #phy-cells = <1>; }; Somehow this doesn't look right. And indeed: https://patchwork.kernel.org/patch/4021121/ At least for exynos5250 this node is not a child on an i2c adapter. And yes, I would still have to add 'phys' and 'phy-names' to the hdmi node. This looks wrong again. Why do I have to specify 'phys' when I already have 'phy' there? Isn't that redundant? Well, you see, lots of confusion here. I would appreciate any kind of help on how to proceed here. With best wishes, Tobias
hdmi { compatible = "samsung,exynos4212-hdmi"; reg = <0x12D00000 0x100000>; interrupts = <0 92 0>; hpd-gpio = <&gpx3 7 0>; clocks = <&clock 271>, <&clock 136>, <&clock 139>, <&clock 178>, <&clock 396>; clock-names = "hdmi", "sclk_hdmi", "sclk_pixel", "sclk_hdmiphy", "mout_hdmi"; pinctrl-names = "default"; pinctrl-0 = <&hdmi_hpd_irq>; samsung,power-domain = <&pd_tv>; vdd_osc-supply = <&ldo10_reg>; vdd_pll-supply = <&ldo8_reg>; vdd-supply = <&ldo8_reg>; hdmi-en-supply = <®_sysvdd>; #address-cells = <1>; #size-cells = <1>; phy-power-control { reg = <0x10020700 0x04>; }; }; i2c_2: i2c@13880000 { status = "okay"; pinctrl-0 = <&i2c2_bus>; pinctrl-names = "default"; samsung,i2c-slave-addr = <0x10>; samsung,i2c-sda-delay = <100>; samsung,i2c-max-bus-freq = <400000>; hdmiddc@50 { compatible = "samsung,exynos4210-hdmiddc"; reg = <0x50>; }; }; i2c_8: i2c@138e0000 { status = "okay"; samsung,i2c-slave-addr = <0x10>; samsung,i2c-sda-delay = <100>; samsung,i2c-max-bus-freq = <400000>; compatible = "samsung,s3c2440-hdmiphy-i2c"; reg = <0x138E0000 0x1000>; interrupts = <0 93 0>; #address-cells = <1>; #size-cells = <0>; clocks = <&clock 325>; clock-names = "i2c"; hdmiphy@38 { compatible = "samsung,exynos4212-hdmiphy"; reg = <0x38>; }; };