Re: [PATCH] drm/radeon/kms: add initial connector properties

2009-09-13 Thread Michel Dänzer
On Wed, 2009-09-09 at 17:40 +1000, Dave Airlie wrote: 
 From: Dave Airlie airl...@redhat.com
 
 This adds:
 coherent mode: TMDS coherent mode for atom cards.
 scaling mode: LVDS scaler mode
 load detect: DAC load detection, DVI-I, VGA, TV
 tmds pll: legacy TMDS pll selection
 tv standard: TV standard selection.
 
 TODO: other TV ones? dvi subconnector selection using std prop

I haven't tried the patch nor looked at it in detail, but I stumbled
over two places where ATOM vs. COM BIOS calls seem reversed:


 + if (property == rdev-mode_info.tmds_pll_property) {
 + struct radeon_encoder_int_tmds *tmds = NULL;
 + bool ret = false;
 + /* need to find digital encoder on connector */
 + encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
 + if (!encoder)
 + return 0;
 +
 + radeon_encoder = to_radeon_encoder(encoder);
 +
 + tmds = radeon_encoder-enc_priv;
 + if (!tmds)
 + return 0;
 +
 + if (val == 0) {
 + if (rdev-is_atom_bios) 
 + ret = 
 radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
 + else
 + ret = 
 radeon_atombios_get_tmds_info(radeon_encoder, tmds);
 + }
 + if (val == 1 || ret == false) {
 + radeon_legacy_get_tmds_info_from_table(radeon_encoder, 
 tmds);
 + }
 + radeon_property_change_mode(radeon_encoder-base);
 + }
 +
   return 0;
  }
  

[...]

 +static struct radeon_encoder_int_tmds *radeon_legacy_get_tmds_info(struct 
 radeon_encoder *encoder)
 +{
 + struct drm_device *dev = encoder-base.dev;
 + struct radeon_device *rdev = dev-dev_private;
 + struct radeon_encoder_int_tmds *tmds = NULL;
 + bool ret;
 +
 + tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
 +
 + if (!tmds)
 + return NULL;
 +
 + if (rdev-is_atom_bios) 
 + ret = radeon_legacy_get_tmds_info_from_combios(encoder, tmds);
 + else
 + ret = radeon_atombios_get_tmds_info(encoder, tmds);
 +
 + if (ret == false)
 + radeon_legacy_get_tmds_info_from_table(encoder, tmds);
 +
 + return tmds;
 +}

-- 
Earthling Michel Dänzer   |http://www.vmware.com
Libre software enthusiast |  Debian, X and DRI developer

--
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
--
___
Dri-devel mailing list
Dri-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dri-devel


[PATCH] drm/radeon/kms: add initial connector properties

2009-09-09 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

This adds:
coherent mode: TMDS coherent mode for atom cards.
scaling mode: LVDS scaler mode
load detect: DAC load detection, DVI-I, VGA, TV
tmds pll: legacy TMDS pll selection
tv standard: TV standard selection.

TODO: other TV ones? dvi subconnector selection using std prop

Signed-off-by: Dave Airlie airl...@redhat.com
---
 drivers/gpu/drm/radeon/radeon_atombios.c|   15 +-
 drivers/gpu/drm/radeon/radeon_combios.c |   48 +++--
 drivers/gpu/drm/radeon/radeon_connectors.c  |  241 ---
 drivers/gpu/drm/radeon/radeon_display.c |   81 
 drivers/gpu/drm/radeon/radeon_encoders.c|   10 +-
 drivers/gpu/drm/radeon/radeon_legacy_encoders.c |   29 +++-
 drivers/gpu/drm/radeon/radeon_mode.h|   20 ++-
 7 files changed, 379 insertions(+), 65 deletions(-)

diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c 
b/drivers/gpu/drm/radeon/radeon_atombios.c
index a8fb392..aeebae1 100644
--- a/drivers/gpu/drm/radeon/radeon_atombios.c
+++ b/drivers/gpu/drm/radeon/radeon_atombios.c
@@ -702,9 +702,8 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
return false;
 }
 
-struct radeon_encoder_int_tmds *radeon_atombios_get_tmds_info(struct
- radeon_encoder
- *encoder)
+bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder,
+  struct radeon_encoder_int_tmds *tmds)
 {
struct drm_device *dev = encoder-base.dev;
struct radeon_device *rdev = dev-dev_private;
@@ -715,7 +714,6 @@ struct radeon_encoder_int_tmds 
*radeon_atombios_get_tmds_info(struct
uint8_t frev, crev;
uint16_t maxfreq;
int i;
-   struct radeon_encoder_int_tmds *tmds = NULL;
 
atom_parse_data_header(mode_info-atom_context, index, NULL, frev,
   crev, data_offset);
@@ -725,12 +723,6 @@ struct radeon_encoder_int_tmds 
*radeon_atombios_get_tmds_info(struct
   data_offset);
 
if (tmds_info) {
-   tmds =
-   kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
-
-   if (!tmds)
-   return NULL;
-
maxfreq = le16_to_cpu(tmds_info-usMaxFrequency);
for (i = 0; i  4; i++) {
tmds-tmds_pll[i].freq =
@@ -756,8 +748,9 @@ struct radeon_encoder_int_tmds 
*radeon_atombios_get_tmds_info(struct
break;
}
}
+   return true;
}
-   return tmds;
+   return false;
 }
 
 union lvds_info {
diff --git a/drivers/gpu/drm/radeon/radeon_combios.c 
b/drivers/gpu/drm/radeon/radeon_combios.c
index 2a027e0..e2ad8f7 100644
--- a/drivers/gpu/drm/radeon/radeon_combios.c
+++ b/drivers/gpu/drm/radeon/radeon_combios.c
@@ -994,48 +994,37 @@ static const struct radeon_tmds_pll 
default_tmds_pll[CHIP_LAST][4] = {
{{15000, 0xb0155}, {0x, 0xb01cb}, {0, 0}, {0, 0}},  /* 
CHIP_RS480 */
 };
 
-static struct radeon_encoder_int_tmds
-*radeon_legacy_get_tmds_info_from_table(struct radeon_device *rdev)
+bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder,
+   struct radeon_encoder_int_tmds 
*tmds)
 {
+   struct drm_device *dev = encoder-base.dev;
+   struct radeon_device *rdev = dev-dev_private;
int i;
-   struct radeon_encoder_int_tmds *tmds = NULL;
-
-   tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
-
-   if (!tmds)
-   return NULL;
 
for (i = 0; i  4; i++) {
tmds-tmds_pll[i].value =
-   default_tmds_pll[rdev-family][i].value;
+   default_tmds_pll[rdev-family][i].value;
tmds-tmds_pll[i].freq = default_tmds_pll[rdev-family][i].freq;
}
 
-   return tmds;
+   return true;
 }
 
-struct radeon_encoder_int_tmds *radeon_combios_get_tmds_info(struct
-radeon_encoder
-*encoder)
+bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder,
+ struct radeon_encoder_int_tmds 
*tmds)
 {
struct drm_device *dev = encoder-base.dev;
struct radeon_device *rdev = dev-dev_private;
uint16_t tmds_info;
int i, n;
uint8_t ver;
-   struct radeon_encoder_int_tmds *tmds = NULL;
 
if (rdev-bios == NULL)
-   return radeon_legacy_get_tmds_info_from_table(rdev);
-
+   return false;
+   
tmds_info = combios_get_table_offset(dev, COMBIOS_DFP_INFO_TABLE);
 
if (tmds_info) {
-   tmds =
-