Re: [PATCH] drm/radeon/kms: Expose backlight class device for legacy LVDS encoder.
On Die, 2009-12-08 at 12:24 +0100, Rafał Miłecki wrote: W dniu 8 grudnia 2009 12:03 użytkownik Michel Dänzer mic...@daenzer.net napisał: On Tue, 2009-12-08 at 11:32 +0100, Rafał Miłecki wrote: 2009/12/8 Michel Dänzer mic...@daenzer.net: From: Michel Dänzer daen...@vmware.com Allows e.g. power management daemons to control the backlight level. Inspired by the corresponding code in radeonfb. Signed-off-by: Michel Dänzer daen...@vmware.com I posted something similar but AFAIR got response we don't want this until fixing backlight class design. Unfortunately I'm not aware of any other available method to control the backlight on Apple PowerPC laptops. I'm open for suggestions though how this code could be disabled when another method is available. It's not that we don't want solution you wrote. It's absolutely wanted. But we need to improve backlight class because we start register many devices that control same display which drivers us to inconsistency. Please, check http://marc.info/?t=12593682454r=1w=2 Hopefully I'll find some time to do that before .33 and we will able to include our patches then. Any news on this? Per demand from IRC, I'm posting the patch rebased against a newer kernel tree. commit f380d3bc243ade263c4dc034ce0873fbe9d96f75 Author: Michel Dänzer daen...@vmware.com Date: Thu Feb 25 16:47:00 2010 +0100 drm/radeon/kms: Expose backlight class device for legacy LVDS encoder. Allows e.g. power management daemons to control the backlight level. Inspired by the corresponding code in radeonfb. Signed-off-by: Michel Dänzer daen...@vmware.com diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig index 1c02d23..9746fee 100644 --- a/drivers/gpu/drm/radeon/Kconfig +++ b/drivers/gpu/drm/radeon/Kconfig @@ -1,6 +1,7 @@ config DRM_RADEON_KMS bool Enable modesetting on radeon by default - NEW DRIVER depends on DRM_RADEON + select BACKLIGHT_CLASS_DEVICE help Choose this option if you want kernel modesetting enabled by default. diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c index cf389ce..fbc2df3 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c @@ -29,6 +29,10 @@ #include radeon.h #include atom.h +#ifdef CONFIG_PMAC_BACKLIGHT +#include asm/backlight.h +#endif + static void radeon_legacy_encoder_disable(struct drm_encoder *encoder) { struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); @@ -39,7 +43,7 @@ static void radeon_legacy_encoder_disable(struct drm_encoder *encoder) radeon_encoder-active_device = 0; } -static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) +static void radeon_legacy_lvds_update(struct drm_encoder *encoder, int mode) { struct drm_device *dev = encoder-dev; struct radeon_device *rdev = dev-dev_private; @@ -47,15 +51,23 @@ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) uint32_t lvds_gen_cntl, lvds_pll_cntl, pixclks_cntl, disp_pwr_man; int panel_pwr_delay = 2000; bool is_mac = false; + uint8_t backlight_level; DRM_DEBUG(\n); + lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); + backlight_level = (lvds_gen_cntl RADEON_LVDS_BL_MOD_LEVEL_SHIFT) 0xff; + if (radeon_encoder-enc_priv) { if (rdev-is_atom_bios) { struct radeon_encoder_atom_dig *lvds = radeon_encoder-enc_priv; panel_pwr_delay = lvds-panel_pwr_delay; + if (lvds-bl_dev) + backlight_level = lvds-backlight_level; } else { struct radeon_encoder_lvds *lvds = radeon_encoder-enc_priv; panel_pwr_delay = lvds-panel_pwr_delay; + if (lvds-bl_dev) + backlight_level = lvds-backlight_level; } } @@ -82,11 +94,13 @@ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) lvds_pll_cntl = ~RADEON_LVDS_PLL_RESET; WREG32(RADEON_LVDS_PLL_CNTL, lvds_pll_cntl); - lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); - lvds_gen_cntl |= (RADEON_LVDS_ON | RADEON_LVDS_EN | RADEON_LVDS_DIGON | RADEON_LVDS_BLON); + lvds_gen_cntl = ~(RADEON_LVDS_DISPLAY_DIS | + RADEON_LVDS_BL_MOD_LEVEL_MASK); + lvds_gen_cntl |= (RADEON_LVDS_ON | RADEON_LVDS_EN | + RADEON_LVDS_DIGON | RADEON_LVDS_BLON | + (backlight_level RADEON_LVDS_BL_MOD_LEVEL_SHIFT)); if (is_mac) lvds_gen_cntl |= RADEON_LVDS_BL_MOD_EN; - lvds_gen_cntl =
[PATCH] drm/radeon/kms: Expose backlight class device for legacy LVDS encoder.
From: Michel Dänzer daen...@vmware.com Allows e.g. power management daemons to control the backlight level. Inspired by the corresponding code in radeonfb. Signed-off-by: Michel Dänzer daen...@vmware.com --- Does anyone have an idea if this will interact well with x86 laptop hotkeys / ACPI / whatever? drivers/gpu/drm/radeon/Kconfig |1 + drivers/gpu/drm/radeon/radeon_legacy_encoders.c | 256 ++- drivers/gpu/drm/radeon/radeon_mode.h| 10 + 3 files changed, 261 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig index 5982321..f3254c7 100644 --- a/drivers/gpu/drm/radeon/Kconfig +++ b/drivers/gpu/drm/radeon/Kconfig @@ -1,6 +1,7 @@ config DRM_RADEON_KMS bool Enable modesetting on radeon by default depends on DRM_RADEON + select BACKLIGHT_CLASS_DEVICE help Choose this option if you want kernel modesetting enabled by default, and you have a new enough userspace to support this. Running old diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c index df00515..357c2af 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c @@ -29,6 +29,10 @@ #include radeon.h #include atom.h +#ifdef CONFIG_PMAC_BACKLIGHT +#include asm/backlight.h +#endif + static void radeon_legacy_encoder_disable(struct drm_encoder *encoder) { struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); @@ -39,22 +43,30 @@ static void radeon_legacy_encoder_disable(struct drm_encoder *encoder) radeon_encoder-active_device = 0; } -static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) +static void radeon_legacy_lvds_update(struct drm_encoder *encoder, int mode) { struct drm_device *dev = encoder-dev; struct radeon_device *rdev = dev-dev_private; struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); uint32_t lvds_gen_cntl, lvds_pll_cntl, pixclks_cntl, disp_pwr_man; int panel_pwr_delay = 2000; + uint8_t backlight_level; DRM_DEBUG(\n); + lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); + backlight_level = (lvds_gen_cntl RADEON_LVDS_BL_MOD_LEVEL_SHIFT) 0xff; + if (radeon_encoder-enc_priv) { if (rdev-is_atom_bios) { struct radeon_encoder_atom_dig *lvds = radeon_encoder-enc_priv; panel_pwr_delay = lvds-panel_pwr_delay; + if (lvds-bl_dev) + backlight_level = lvds-backlight_level; } else { struct radeon_encoder_lvds *lvds = radeon_encoder-enc_priv; panel_pwr_delay = lvds-panel_pwr_delay; + if (lvds-bl_dev) + backlight_level = lvds-backlight_level; } } @@ -72,9 +84,11 @@ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) lvds_pll_cntl = ~RADEON_LVDS_PLL_RESET; WREG32(RADEON_LVDS_PLL_CNTL, lvds_pll_cntl); - lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); - lvds_gen_cntl |= (RADEON_LVDS_ON | RADEON_LVDS_EN | RADEON_LVDS_DIGON | RADEON_LVDS_BLON); - lvds_gen_cntl = ~(RADEON_LVDS_DISPLAY_DIS); + lvds_gen_cntl = ~(RADEON_LVDS_DISPLAY_DIS | + RADEON_LVDS_BL_MOD_LEVEL_MASK); + lvds_gen_cntl |= (RADEON_LVDS_ON | RADEON_LVDS_EN | + RADEON_LVDS_DIGON | RADEON_LVDS_BLON | + (backlight_level RADEON_LVDS_BL_MOD_LEVEL_SHIFT)); udelay(panel_pwr_delay * 1000); WREG32(RADEON_LVDS_GEN_CNTL, lvds_gen_cntl); break; @@ -83,7 +97,6 @@ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) case DRM_MODE_DPMS_OFF: pixclks_cntl = RREG32_PLL(RADEON_PIXCLKS_CNTL); WREG32_PLL_P(RADEON_PIXCLKS_CNTL, 0, ~RADEON_PIXCLK_LVDS_ALWAYS_ONb); - lvds_gen_cntl = RREG32(RADEON_LVDS_GEN_CNTL); lvds_gen_cntl |= RADEON_LVDS_DISPLAY_DIS; lvds_gen_cntl = ~(RADEON_LVDS_ON | RADEON_LVDS_BLON | RADEON_LVDS_EN | RADEON_LVDS_DIGON); udelay(panel_pwr_delay * 1000); @@ -98,6 +111,25 @@ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) radeon_combios_encoder_dpms_scratch_regs(encoder, (mode == DRM_MODE_DPMS_ON) ? true : false); } +static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode) +{ + struct radeon_device *rdev = encoder-dev-dev_private; + struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); + DRM_DEBUG(\n); + + if
Re: [PATCH] drm/radeon/kms: Expose backlight class device for legacy LVDS encoder.
2009/12/8 Michel Dänzer mic...@daenzer.net: From: Michel Dänzer daen...@vmware.com Allows e.g. power management daemons to control the backlight level. Inspired by the corresponding code in radeonfb. Signed-off-by: Michel Dänzer daen...@vmware.com I posted something similar but AFAIR got response we don't want this until fixing backlight class design. -- Rafał -- Return on Information: Google Enterprise Search pays you back Get the facts. http://p.sf.net/sfu/google-dev2dev -- ___ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel
Re: [PATCH] drm/radeon/kms: Expose backlight class device for legacy LVDS encoder.
On Tue, 2009-12-08 at 11:32 +0100, Rafał Miłecki wrote: 2009/12/8 Michel Dänzer mic...@daenzer.net: From: Michel Dänzer daen...@vmware.com Allows e.g. power management daemons to control the backlight level. Inspired by the corresponding code in radeonfb. Signed-off-by: Michel Dänzer daen...@vmware.com I posted something similar but AFAIR got response we don't want this until fixing backlight class design. Unfortunately I'm not aware of any other available method to control the backlight on Apple PowerPC laptops. I'm open for suggestions though how this code could be disabled when another method is available. -- Earthling Michel Dänzer |http://www.vmware.com Libre software enthusiast | Debian, X and DRI developer -- Return on Information: Google Enterprise Search pays you back Get the facts. http://p.sf.net/sfu/google-dev2dev -- ___ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel
Re: [PATCH] drm/radeon/kms: Expose backlight class device for legacy LVDS encoder.
W dniu 8 grudnia 2009 12:03 użytkownik Michel Dänzer mic...@daenzer.net napisał: On Tue, 2009-12-08 at 11:32 +0100, Rafał Miłecki wrote: 2009/12/8 Michel Dänzer mic...@daenzer.net: From: Michel Dänzer daen...@vmware.com Allows e.g. power management daemons to control the backlight level. Inspired by the corresponding code in radeonfb. Signed-off-by: Michel Dänzer daen...@vmware.com I posted something similar but AFAIR got response we don't want this until fixing backlight class design. Unfortunately I'm not aware of any other available method to control the backlight on Apple PowerPC laptops. I'm open for suggestions though how this code could be disabled when another method is available. It's not that we don't want solution you wrote. It's absolutely wanted. But we need to improve backlight class because we start register many devices that control same display which drivers us to inconsistency. Please, check http://marc.info/?t=12593682454r=1w=2 Hopefully I'll find some time to do that before .33 and we will able to include our patches then. -- Rafał -- Return on Information: Google Enterprise Search pays you back Get the facts. http://p.sf.net/sfu/google-dev2dev -- ___ Dri-devel mailing list Dri-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/dri-devel