#! /bin/sh /usr/share/dpatch/dpatch-run
## 01-add-chipsets.dpatch
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Add support for some chipsets to 915resolution

@DPATCH@
diff -urN 915resolution-0.5.2.old/915resolution.c 915resolution-0.5.2/915resolution.c
--- 915resolution-0.5.2.old/915resolution.c	2006-09-28 13:08:29.000000000 +0200
+++ 915resolution-0.5.2/915resolution.c	2006-09-28 13:16:49.000000000 +0200
@@ -55,10 +55,14 @@
 typedef unsigned int cardinal;
 
 typedef enum {
-    CT_UNKWN, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM 
+    CT_UNKWN, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM,
+    CT_946GZ, CT_965Q, CT_965G
 } chipset_type;
 
-char * chipset_type_names[] = {"UNKNOWN", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM"};
+char * chipset_type_names[] = {
+    "UNKNOWN", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM",
+    "946GZ", "965Q", "965G"
+};
 
 typedef enum {
     BT_UNKWN, BT_1, BT_2, BT_3
@@ -205,6 +209,18 @@
         type = CT_945GM;
         break;
 
+    case 0x29708086:
+        type = CT_946GZ;
+        break;
+
+    case 0x29908086:
+        type = CT_965Q;
+        break;
+
+    case 0x29a08086:
+        type = CT_965G;
+        break;
+    
     default:
         type = CT_UNKWN;
         break;
@@ -488,6 +504,9 @@
         case CT_915GM:
         case CT_945G:
         case CT_945GM:
+        case CT_946GZ:
+        case CT_965Q:
+        case CT_965G:
             outl(0x80000090, 0xcf8);
             map->b1 = inb(0xcfd);
             map->b2 = inb(0xcfe);
@@ -535,6 +554,9 @@
         case CT_915GM:
         case CT_945G:
         case CT_945GM:
+        case CT_946GZ:
+        case CT_965Q:
+        case CT_965G:
             outl(0x80000090, 0xcf8);
             outb(map->b1, 0xcfd);
             outb(map->b2, 0xcfe);
@@ -773,6 +795,15 @@
         else if (!strcmp(argv[index], "945GM")) {
             *forced_chipset = CT_945GM;
         }
+        else if (!strcmp(argv[index], "946GZ")) {
+            *forced_chipset = CT_946GZ;
+        }
+        else if (!strcmp(argv[index], "965Q")) {
+            *forced_chipset = CT_965Q;
+        }
+        else if (!strcmp(argv[index], "965G")) {
+            *forced_chipset = CT_965G;
+        }
         else {
             *forced_chipset = CT_UNKWN;
         }
