I.MX6 HDMI support in v4.2
Krzysztof Hałasa
khalasa at piap.pl
Mon Sep 7 07:04:30 PDT 2015
Russell King - ARM Linux <linux at arm.linux.org.uk> writes:
>> Now if I enable LVDS (CONFIG_DRM_IMX_LDB - I don't have any LVDS
>> hardware connected), the HDMI device is created (as well as LVDS).
>
> Are you telling the kernel in your device tree file that LDB is required?
> DRM doesn't support hot-plugging outputs, all specified output modules
> must be present before DRM can bring up the display subsystem.
It seems to be the case, I'll test with the LDB portion removed. Though
I don't mind LVDS if it doesn't break HDMI.
>> This used to detect the monitor as "unknown" but now it's "connected"
>> most of the time - not sure what have changed. EDID is empty and I get
>> the following entries in /sys/devices/soc0/display-subsystem/drm/card0:
>
> "used to" - when was this?
Well... before I made unspecified changes to something :-)
I mean, I don't think I made any related changes, but something must
have changed since it always prints "connected" now. Most of the time.
I mean, from time to time :-)
Seems low level.
> I don't think dw_hdmi has ever reported
> a connected status of "unknown", always explicitly stating connected
> or disconnected.
The "unknown" must be an uninitialized variable (neither connected = 1
or disconnected = 2):
--- dmesg-unknown
+++ dmesg-connected
-imx-ipuv3 2400000.ipu: IPUv3H probed
@@
-XXX dw_hdmi_imx_probe[261]
+imx-ipuv3 2400000.ipu: IPUv3H probed
imx-ipuv3 2800000.ipu: IPUv3H probed
+XXX dw_hdmi_imx_probe[261]
[drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[drm] No driver support for vblank timestamp query.
imx-drm display-subsystem: bound imx-ipuv3-crtc.0 (ops ipu_crtc_ops [imx_ipuv3_crtc])
@@ -323,8 +323,9 @@
XXX dw_hdmi_hardirq[1479]
XXX dw_hdmi_irq[1493]
imx-drm display-subsystem: bound 2000000.aips-bus:ldb at 020e0008 (ops imx_ldb_driver_exit [imx_ldb])
[drm] Initialized imx-drm 1.0.0 20120507 on minor 0
+XXX dw_hdmi_connector_detect[1389]: CONNECTED
In the "unknown" case, the dw_hdmi_connector_detect() wasn't called.
Maybe the problem happens when dw_hdmi_imx_probe() is called before
"imx-ipuv3 2400000.ipu: IPUv3H probed" is done. Probably an interrupt
isn't generated or something like this, maybe it should poll it once.
I'll check this later.
> Looks fine apart from the lack of EDID. Are you sure you have the
> pinctrl setup correct for this? (We don't use the DDC I2C built
> into the HDMI interface.)
How do I check it? I'm simply using the (v4.2) imx6q-gw54xx.dts file.
>> Now, somehow the X.org server sets the resolution to 1024x768, though
>> nothing is displayed on the monitor (it's in stand-by). Files in
>> /sys/.../card0-HDMI-A/ now have the actual EDID, mode list etc.
>
> By default, 1024x768 is selected when there's nothing else available.
How do I select e.g. 1920x1080? The EDID supports this mode, but
# xrandr --output HDMI1 --auto
X Error: BadMatch
Request Major code 139 (RANDR)
Request Minor code 7 ()
Error Serial #34
Current Serial #35
imx-drm display-subsystem: failed to allocate buffer with size 8294400
imx-drm display-subsystem: failed to allocate buffer with size 8294400
imx-ipuv3 2400000.ipu: DC stop timeout after 50 ms
I assume I have to reserve the (big linear region of) memory at boot
time, but don't know how.
> The DPMS "on" and enabled above tends to suggest you should be seeing
> output though.
I've applied the PLL5 patch and it now started to work. At least I have
output. I'm still seeing "DC stop timeout after 50 ms" but apparently
only when the X server is being closed, from time to time.
> I should point out that virtually every -rc kernel gets tested here on
> iMX6 with HDMI output - onto my Panasonic TV, and I've seen no evidence
> of any regressions. For me, it Just Works(tm).
Ok. I'll try to reach the same state :-)
Now, having the HDMI output on the screen, I'm trying to get XVideo
working. It seems all XV attributes are set to their minimum values and
I can't change that. Is it normal? For this or other reason, I can see
a black video window only (I'm trying to use I420 overlay). Could be
unrelated problem, though.
# xvattr
Found Xv 2.2
Adaptor: 0
Name: Marvell Armada Overlay Video
Port: 85
Name: XV_ENCODING
Flags: XvGettable XvSettable
Min value: 0
Max value: 0
Current value: 0
Name: XV_SATURATION
Flags: XvGettable XvSettable
Min value: -16384
Max value: 16383
Current value: -16384
Name: XV_BRIGHTNESS
Flags: XvGettable XvSettable
Min value: -256
Max value: 255
Current value: -256
Name: XV_CONTRAST
Flags: XvGettable XvSettable
Min value: -16384
Max value: 16383
Current value: -16384
Name: XV_AUTOPAINT_COLORKEY
Flags: XvGettable XvSettable
Min value: 0
Max value: 1
Current value: 1
Name: XV_COLORKEY
Flags: XvGettable XvSettable
Min value: 0
Max value: 16777215
Current value: 0
Name: XV_PIPE
Flags: XvGettable XvSettable
Min value: -1
Max value: 3
Current value: -1
# xvattr -a XV_BRIGHTNESS -v 0 -p 85
Found Xv 2.2
XV_BRIGHTNESS set to -256
I'll continue with this stuff tomorrow.
Thanks for the help,
--
Krzysztof Halasa
Industrial Research Institute for Automation and Measurements PIAP
Al. Jerozolimskie 202, 02-486 Warsaw, Poland
More information about the linux-arm-kernel
mailing list