Perfect, it finally works!" to "Still doesn't work" or "Sound doesn't work". I thought about a better solution, so I made another few adjustments to the HDMI driver.
In short, the default HDMI settings in my latest kernel are: HDMI enabled for image AND sound (took a while to get that fixed!), Autoconfig disabled, predefined resolution 1920x1080p at 60Hz. Hopefully these settings work for most of you. My guess is they will.
To give you more control over the HDMI driver you need to get access to the device. Use adb shell
to do this from your PC. This is probably the only option you have when you have the 'No signal' problem (duh!). Then you need to find out what the best configuration for your display is. This is done using sysfs. Try experimenting with different settings. After that you can create an init.d
boot script to make the settings permanent. On bootup of the device, the init.d
script will configure the driver according to your preferred settings.
1. HDMI output
Use this setting to enable or disable HDMI output. Reason for disabling could be that you're using your device headless and you want to save as much power as possible. On default HDMI output is enabled.
Enable (default):echo "1">/sys/devices/virtual/display/display0.HDMI/enable
Disable: echo "0">/sys/devices/virtual/display/display0.HDMI/enable
2. Automatic configuration
The effect of enabling automatic configuration is twofold. First the "Hotplug" feature reacts on connecting and deconnecting a display and second the HDMI driver tries to read configuration information from your display using EDID and configure HDMI image and sound in the highest possible mode. This is the way the original stock kernel worked. In this kernel I disabled automatic configuration on default, but you can re-enable it if you want.
Enable: echo "1">/sys/devices/virtual/display/display0.HDMI/autoconfig
Disable (default): echo "0">/sys/devices/virtual/display/display0.HDMI/autoconfig
By disabling automatic configuration the "Hotplug" feature is disabled as well. The driver then acts as if a HDMI display is always connected. Sound output is set to HDMI as well. Apart from that, the driver no longer tries to read the configuration from your display using EDID. Only a predefined set of display modes can be used. The default resolution is set to 1920x1080p, 60Hz. Be aware that the stock Android image resets the resolution to a lower 1280x720p, at least on the one I use. Currently following predefined resolutions are being supported when automatic configuration is disabled.
- 2880x480i-60
- 2880x480p-60
- 2880x480p-60
- 2880x480p-50
- 2880x480p-50
- 1920x1080p-60
- 1920x1080p-50
- 1920x1080p-50
|
- 1440x480p-60
- 1440x240i-50
- 1440x240p-60
- 1280x720p-60
- 1280x720p-50
- 720x576p-50
- 720x480p-60
- 720x480p-50
|
To change the resolution use the exact format from the list above. For example, to set 1280x720p-60 use:echo "1280x720p-60">/sys/devices/virtual/display/display0.HDMI/mode
Kernel download
The kernel can be downloaded here. Flash it in the usual way. Although a lot of the kernel is updated to version 3.0.50 already, I still kept the 3.0.8+ version number intact, so the stock Android image can still load it's kernel modules and keeps working as normal.
Please report any of your findings here! I'm very curious to know whether or not this once and for all solves these annoying 'No signal' display problems.]]>