Description of problem: Upgraded from kernel 2.6.38.8-35 to kernel 2.6.40-4 and the dpms support of my monitors changed, the system would no longer power down the displays. Rebooting into the older kernel made the problem go away. Version-Release number of selected component (if applicable): kernel-2.6.40-4.fc15.x86_64 xorg-x11-drv-ati-6.14.1-2.20110525gitfe5c42f51.fc15.x86_64 How reproducible: 100% Steps to Reproduce: 1.sleep 1; xset dpms force off 2. 3. Actual results: monitors go black and then come back Expected results: monitors should go black and then a second or so later should power off Additional info: radeon 3650 video card KMS is enabled and being used dual displays Screen 0: minimum 320 x 200, current 3600 x 1200, maximum 8192 x 8192 DVI-0 connected 1920x1200+0+0 (normal left inverted right x axis y axis) 518mm x 324mm 1920x1200 60.0*+ 1920x1080 60.0 1600x1200 60.0 1680x1050 60.0 1280x1024 60.0 1440x900 59.9 1280x960 60.0 1024x768 60.0 800x600 60.3 640x480 60.0 DIN disconnected (normal left inverted right x axis y axis) DVI-1 connected 1680x1050+1920+0 (normal left inverted right x axis y axis) 450mm x 280mm 1680x1050 60.0*+ 1280x1024 75.0 60.0 1024x768 75.1 70.1 60.0 832x624 74.6 800x600 72.2 75.0 60.3 56.2 640x480 72.8 75.0 66.7 60.0 720x400 70.1
Problem also exists in kernel-2.6.40.1-0.fc15.x86_64
01:00.0 VGA compatible controller: ATI Technologies Inc Mobility Radeon HD 3600 Series (prog-if 00 [VGA controller]) Subsystem: ASUSTeK Computer Inc. Device 01da Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0, Cache Line Size: 32 bytes Interrupt: pin A routed to IRQ 45 Region 0: Memory at d0000000 (64-bit, prefetchable) [size=256M] Region 2: Memory at fe9e0000 (64-bit, non-prefetchable) [size=64K] Region 4: I/O ports at d000 [size=256] [virtual] Expansion ROM at fe900000 [disabled] [size=128K] Capabilities: <access denied> Kernel driver in use: radeon Kernel modules: radeon
I performed a git bisect on this issue and the result of that was the following. 1e85e1d07b9255bd52c557f1a77fb72ccfacaf1c is the first bad commit commit 1e85e1d07b9255bd52c557f1a77fb72ccfacaf1c Author: Alex Deucher <alexdeucher> Date: Fri May 20 04:34:29 2011 -0400 drm/radeon/kms: simplify hotplug handler logic In the hotplug handler, just use the drm dpms functions. If the monitor is plugged in, turn it on, if it's not, turn it off. This also reduces power usage by turning off the encoder and crtc when the monitor is unplugged. Signed-off-by: Alex Deucher <alexdeucher> Signed-off-by: Dave Airlie <airlied> :040000 040000 8838a7f0f02513ef188c7741738f6a044c9e1e39 40499f2c695e56b34e15557ff49d96c3266748b3 M drivers
The following patch by agd5f fixes the problem... diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon index 9792d4f..b8ccdd7 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c @@ -60,6 +60,10 @@ void radeon_connector_hotplug(struct drm_connector *connector radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); + /* if the connector is already off, don't turn it back on */ + if (connector->dpms != DRM_MODE_DPMS_ON) + return; + /* powering up/down the eDP panel generates hpd events which * can interfere with modesetting. */
(In reply to comment #4) > The following patch by agd5f fixes the problem... That has been submitted upstream and marked for stable.
This should be fixed in the latest 2.6.40.6 update. The stable commit went into 3.0.3 as cdc0fbfac92e20e64737ec0648f38be.