Bug 40252

Summary: No udev event for disconnecting VGA/HDMI cable
Product: DRI Reporter: Dirk Montgomery <qjn>
Component: DRM/RadeonAssignee: Default DRI bug account <dri-devel>
Status: RESOLVED DUPLICATE QA Contact:
Severity: normal    
Priority: medium CC: fabian.deutsch
Version: XOrg git   
Hardware: x86-64 (AMD64)   
OS: Linux (All)   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
Xorg.0.log
none
dmesg none

Description Dirk Montgomery 2011-08-20 08:24:07 UTC
Created attachment 50402 [details]
Xorg.0.log

Hi,

I have an AMD Radeon HD 6310 with free radeon drivers running. Xorg version is 7.6, xserver is 1.10.3.

I tried to define a udev rule to change my monitor settings automatically when I connect a VGA or an HDMI cable. Connecting works fine but disconnecting is not recognized.

udevadm monitor shows:

udevadm monitor

monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[100.176249] change   /devices/pci0000:00/0000:00:01.0/drm/card0 (drm)
UDEV  [100.869104] change   /devices/pci0000:00/0000:00:01.0/drm/card0 (drm)

for connecting. For disconnecting nothing happens. 

I hope this is the right place to file this as a bug.

Every help is appreciated!

Regards

Dirk
Comment 1 Dirk Montgomery 2011-08-20 08:25:06 UTC
Created attachment 50403 [details]
dmesg
Comment 2 Fabian Deutsch 2011-09-22 13:07:41 UTC
I've got a similar problem with a Mobility Radeon HD 4300 Series card, there is no change recognized on connect and disconnect.

Any hint where to look?
Comment 3 Alex Deucher 2011-09-22 13:17:45 UTC
(In reply to comment #2)
> I've got a similar problem with a Mobility Radeon HD 4300 Series card, there is
> no change recognized on connect and disconnect.
> 
> Any hint where to look?

Hotplug interrupts only work for digital displays (TMDS/DP).  Analog displays require polling.

Check your dmesg output and make sure there is an HPD pin assigned to the digital display connector you are trying to use.  It's also possible your OEM did not wire up the pin properly.
Comment 4 Fabian Deutsch 2011-09-22 13:22:42 UTC
Mh okay, I my observations were related to HDMI (not VGA).
Is there a way to find out if a "HPD pin [is] assigned to the
digital display connector"?
Comment 5 Alex Deucher 2011-09-22 13:54:02 UTC
(In reply to comment #4)
> Mh okay, I my observations were related to HDMI (not VGA).
> Is there a way to find out if a "HPD pin [is] assigned to the
> digital display connector"?

Make sure your have the rlc firmware loaded as it's required for the interrupt controller to work.

Check your dmesg.  It should show something like:
[drm] Connector 1:
[drm]   HDMI-A
[drm]   HPD2
[drm]   DDC: 0x6440 0x6440 0x6444 0x6444 0x6448 0x6448 0x644c 0x644c
[drm]   Encoders:
[drm]     DFP1: INTERNAL_UNIPHY

In this case HPD2 has been (in theory) wired to the hdmi port.  Plug/unplug in your hdmi port and check if bit 1 of any of the DC_HPDx_INT_STATUS regs changes when you connect/disconnect the monitor.

#define DC_HPD1_INT_STATUS                                0x7d00
#define DC_HPD2_INT_STATUS                                0x7d0c
#define DC_HPD3_INT_STATUS                                0x7d18
#define DC_HPD4_INT_STATUS                                0x7d24
#define DC_HPD5_INT_STATUS                                0x7dc0
#define DC_HPD6_INT_STATUS                                0x7df4

You can use radeonreg:
http://cgit.freedesktop.org/~airlied/radeontool/
to dump registers.  E.g. (as root),
./radeonreg regmatch 0x7d00
Comment 6 Alex Deucher 2011-10-07 11:14:49 UTC

*** This bug has been marked as a duplicate of bug 41561 ***

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.