aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/nouveau/nouveau_bios.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_bios.c')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_bios.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_bios.c b/drivers/gpu/drm/nouveau/nouveau_bios.c
index c608b0b29a3..e86f46cf883 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bios.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bios.c
@@ -5982,7 +5982,13 @@ parse_dcb20_entry(struct drm_device *dev, struct dcb_table *dcb,
5982 } 5982 }
5983 break; 5983 break;
5984 case OUTPUT_TMDS: 5984 case OUTPUT_TMDS:
5985 entry->tmdsconf.sor.link = (conf & 0x00000030) >> 4; 5985 if (dcb->version >= 0x22)
5986 entry->tmdsconf.slave_addr = (conf & 0x00000070) >> 4;
5987 else if (dcb->version >= 0x30)
5988 entry->tmdsconf.slave_addr = (conf & 0x00000700) >> 8;
5989 else if (dcb->version >= 0x40)
5990 entry->tmdsconf.sor.link = (conf & 0x00000030) >> 4;
5991
5986 break; 5992 break;
5987 case 0xe: 5993 case 0xe:
5988 /* weird g80 mobile type that "nv" treats as a terminator */ 5994 /* weird g80 mobile type that "nv" treats as a terminator */
@@ -6272,6 +6278,19 @@ parse_dcb_table(struct drm_device *dev, struct nvbios *bios, bool twoHeads)
6272 dcb->i2c_table = &bios->data[i2ctabptr]; 6278 dcb->i2c_table = &bios->data[i2ctabptr];
6273 if (dcb->version >= 0x30) 6279 if (dcb->version >= 0x30)
6274 dcb->i2c_default_indices = dcb->i2c_table[4]; 6280 dcb->i2c_default_indices = dcb->i2c_table[4];
6281
6282 /*
6283 * Parse the "management" I2C bus, used for hardware
6284 * monitoring and some external TMDS transmitters.
6285 */
6286 if (dcb->version >= 0x22) {
6287 int idx = (dcb->version >= 0x40 ?
6288 dcb->i2c_default_indices & 0xf :
6289 2);
6290
6291 read_dcb_i2c_entry(dev, dcb->version, dcb->i2c_table,
6292 idx, &dcb->i2c[idx]);
6293 }
6275 } 6294 }
6276 6295
6277 if (entries > DCB_MAX_NUM_ENTRIES) 6296 if (entries > DCB_MAX_NUM_ENTRIES)