diff options
| author | Stefan Huehner <stefan@huehner.org> | 2015-02-22 09:46:36 -0500 |
|---|---|---|
| committer | Ben Skeggs <bskeggs@redhat.com> | 2015-03-16 19:44:23 -0400 |
| commit | 5a6f690ca565f536ab0fc05e267b08d5a7c36b46 (patch) | |
| tree | 5e0cdb9e9d1812fe39ce6792804371ccd5e88857 /drivers/gpu | |
| parent | 7e547adcea7b9d927009717e1f3303879d5f2687 (diff) | |
drm/nouveau/bios: fix i2c table parsing for dcb 4.1
Code before looked only at bit 31 to decide if a port is unused.
However dcb 4.1 spec says 0x1F in bits 31-27 and 26-22 means unused.
This fixed hdmi monitor detection on GM206.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Diffstat (limited to 'drivers/gpu')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.c index d1a89b2bd5c1..c4e1f085ee10 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/i2c.c | |||
| @@ -74,7 +74,11 @@ dcb_i2c_parse(struct nvkm_bios *bios, u8 idx, struct dcb_i2c_entry *info) | |||
| 74 | u16 ent = dcb_i2c_entry(bios, idx, &ver, &len); | 74 | u16 ent = dcb_i2c_entry(bios, idx, &ver, &len); |
| 75 | if (ent) { | 75 | if (ent) { |
| 76 | if (ver >= 0x41) { | 76 | if (ver >= 0x41) { |
| 77 | if (!(nv_ro32(bios, ent) & 0x80000000)) | 77 | u32 ent_value = nv_ro32(bios, ent); |
| 78 | u8 i2c_port = (ent_value >> 27) & 0x1f; | ||
| 79 | u8 dpaux_port = (ent_value >> 22) & 0x1f; | ||
| 80 | /* value 0x1f means unused according to DCB 4.x spec */ | ||
| 81 | if (i2c_port == 0x1f && dpaux_port == 0x1f) | ||
| 78 | info->type = DCB_I2C_UNUSED; | 82 | info->type = DCB_I2C_UNUSED; |
| 79 | else | 83 | else |
| 80 | info->type = DCB_I2C_PMGR; | 84 | info->type = DCB_I2C_PMGR; |
