Re: [PATCH] drm/radeon/kms: Expose backlight class device for legacy LVDS encoder.

2010-05-03 Thread Michel Dänzer
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.

2009-12-08 Thread Michel Dänzer
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-08 Thread Rafał Miłecki
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.

2009-12-08 Thread Michel Dänzer
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.

2009-12-08 Thread Rafał Miłecki
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