浏览代码

drm/nouveau/vbios: parse more gpio tag bits from connector table

Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
Ben Skeggs 14 年之前
父节点
当前提交
a589e87fe7
共有 1 个文件被更改,包括 8 次插入17 次删除
  1. 8 17
      drivers/gpu/drm/nouveau/nouveau_bios.c

+ 8 - 17
drivers/gpu/drm/nouveau/nouveau_bios.c

@@ -5950,6 +5950,11 @@ apply_dcb_connector_quirks(struct nvbios *bios, int idx)
 	}
 	}
 }
 }
 
 
+static const u8 hpd_gpio[16] = {
+	0xff, 0x07, 0x08, 0xff, 0xff, 0x51, 0x52, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0x5e, 0x5f, 0x60,
+};
+
 static void
 static void
 parse_dcb_connector_table(struct nvbios *bios)
 parse_dcb_connector_table(struct nvbios *bios)
 {
 {
@@ -5986,23 +5991,9 @@ parse_dcb_connector_table(struct nvbios *bios)
 
 
 		cte->type  = (cte->entry & 0x000000ff) >> 0;
 		cte->type  = (cte->entry & 0x000000ff) >> 0;
 		cte->index2 = (cte->entry & 0x00000f00) >> 8;
 		cte->index2 = (cte->entry & 0x00000f00) >> 8;
-		switch (cte->entry & 0x00033000) {
-		case 0x00001000:
-			cte->gpio_tag = 0x07;
-			break;
-		case 0x00002000:
-			cte->gpio_tag = 0x08;
-			break;
-		case 0x00010000:
-			cte->gpio_tag = 0x51;
-			break;
-		case 0x00020000:
-			cte->gpio_tag = 0x52;
-			break;
-		default:
-			cte->gpio_tag = 0xff;
-			break;
-		}
+
+		cte->gpio_tag = ffs((cte->entry & 0x07033000) >> 12);
+		cte->gpio_tag = hpd_gpio[cte->gpio_tag];
 
 
 		if (cte->type == 0xff)
 		if (cte->type == 0xff)
 			continue;
 			continue;