Question regarding HDMI Audio support on i.MX6 with vanilla kernel

Russell King - ARM Linux linux at armlinux.org.uk
Tue Nov 7 10:53:26 UTC 2017


On Tue, Nov 07, 2017 at 10:15:02AM +0000, Russell King - ARM Linux wrote:
> On Tue, Nov 07, 2017 at 10:00:48AM +0000, Luís Mendes wrote:
> > Hi Russell,
> > 
> > Sorry for sending all these emails, but to me dw_hdmi device driver is
> > broken regarding HDMI detection and audio support. I don't want to waste
> > your time, but I would like to have your opinion since you're so involved
> > in the ARM support for the Linux kernel.
> 
> If it is so broken, how come it works for me and others?

btw, if you do this without your edid firmware loaded:

hexdump -C /sys/class/drm/card0-HDMI-A-1/edid

do you get any EDID?  If so, then connector->edid_blob_ptr is populated
with the connector's EDID (see drivers/gpu/drm/drm_sysfs.c, edid_show()).

The only place that sets that is drm_mode_connector_update_edid_property().
That is called when loading a firmware edid for the connector, or by
dw-hdmi inside dw_hdmi_connector_get_modes().

So, if you have no firmware edid, and you get EDID from the above file,
then that can only have come from dw-hdmi successfully reading the EDID
from the connected device.

Here's an example, with a Samsung S24C750 monitor attached:

root at hbi2ex:~/xf86-video-armada-0.0.0# uname -a
Linux hbi2ex 4.14.0-rc1+ #2214 SMP Wed Oct 25 10:51:58 BST 2017 armv7l armv7l armv7l GNU/Linux
root at hbi2ex:~/xf86-video-armada-0.0.0# hexdump -C /sys/class/drm/card0-HDMI-A-1/edid
00000000  00 ff ff ff ff ff ff 00  4c 2d 5d 0a 41 5a 58 5a  |........L-].AZXZ|
00000010  1e 17 01 03 80 35 1e 78  2a f7 11 a3 56 4f 9e 28  |.....5.x*...VO.(|
00000020  0f 50 54 bf ef 80 71 4f  81 c0 81 00 81 80 95 00  |.PT...qO........|
00000030  a9 c0 b3 00 01 01 02 3a  80 18 71 38 2d 40 58 2c  |.......:..q8- at X,|
00000040  45 00 13 2b 21 00 00 1e  01 1d 00 72 51 d0 1e 20  |E..+!......rQ.. |
00000050  6e 28 55 00 13 2b 21 00  00 1e 00 00 00 fd 00 32  |n(U..+!........2|
00000060  4b 1e 51 11 00 0a 20 20  20 20 20 20 00 00 00 fc  |K.Q...      ....|
00000070  00 53 32 34 43 37 35 30  0a 20 20 20 20 20 01 74  |.S24C750.     .t|
00000080  02 03 1a f1 46 90 04 1f  13 03 12 23 09 07 07 83  |....F......#....|
00000090  01 00 00 66 03 0c 00 20  00 80 01 1d 00 bc 52 d0  |...f... ......R.|
000000a0  1e 20 b8 28 55 40 13 2b  21 00 00 1e 8c 0a d0 90  |. .(U at .+!.......|
000000b0  20 40 31 20 0c 40 55 00  13 2b 21 00 00 18 8c 0a  | @1 . at U..+!.....|
000000c0  d0 8a 20 e0 2d 10 10 3e  96 00 13 2b 21 00 00 18  |.. .-..>...+!...|
000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 89  |................|
00000100

I can assure you that this has been the case for every 4.x kernel
version - I've booted them all on several imx6 platforms.  One
imx6 platform is permanently connected to AV2 on my TV, and it
always finds the EDID for the TV.

So, I think there is something going on which is interfering with
the ability for the i2c driver to get the EDID from your TV - it
fails a number of times, but I think eventually it does succeed.
Maybe it gets the first page (128 bytes) of EDID which contains
the basic information, but fails to get the second page which
contains the HDMI vendor block along with all the audio information.

That basically means there's something wrong with the I2C/DDC bus.
Maybe the clock rate is too fast (DDC is 100kHz, not 400kHz).
Maybe the pull-ups are wrong.  Maybe the board has wrong pull-ups.
Could be many things.

-- 
RMK's Patch system: http://www.armlinux.org.uk/developer/patches/
FTTC broadband for 0.8mile line in suburbia: sync at 8.8Mbps down 630kbps up
According to speedtest.net: 8.21Mbps down 510kbps up


More information about the etnaviv mailing list