drm/nv50: fix duallink_possible calculation for DCB 4.0 cards

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
This commit is contained in:
Ben Skeggs 2010-05-28 09:39:11 +10:00
parent 73db4bedc5
commit 23484874e6
1 changed files with 10 additions and 6 deletions

View File

@ -5536,12 +5536,6 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb,
entry->bus = (conn >> 16) & 0xf; entry->bus = (conn >> 16) & 0xf;
entry->location = (conn >> 20) & 0x3; entry->location = (conn >> 20) & 0x3;
entry->or = (conn >> 24) & 0xf; entry->or = (conn >> 24) & 0xf;
/*
* Normal entries consist of a single bit, but dual link has the
* next most significant bit set too
*/
entry->duallink_possible =
((1 << (ffs(entry->or) - 1)) * 3 == entry->or);
switch (entry->type) { switch (entry->type) {
case OUTPUT_ANALOG: case OUTPUT_ANALOG:
@ -5625,6 +5619,16 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb,
break; break;
} }
if (dcb->version < 0x40) {
/* Normal entries consist of a single bit, but dual link has
* the next most significant bit set too
*/
entry->duallink_possible =
((1 << (ffs(entry->or) - 1)) * 3 == entry->or);
} else {
entry->duallink_possible = (entry->sorconf.link == 3);
}
/* unsure what DCB version introduces this, 3.0? */ /* unsure what DCB version introduces this, 3.0? */
if (conf & 0x100000) if (conf & 0x100000)
entry->i2c_upper_default = true; entry->i2c_upper_default = true;