summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSiarhei Siamashka <siarhei.siamashka@gmail.com>2011-05-16 03:16:55 +0300
committerSiarhei Siamashka <siarhei.siamashka@gmail.com>2011-05-16 03:21:36 +0300
commit0dbb1efd0d9bebe6963ddd4044b3e93f6334c129 (patch)
tree846d74968369a1fc57bdb82b3ca4124e69589c91
parent04110b388a02002c1d37f8300327b04e6ee4bd9b (diff)
Applied fixes for GMA3150 support (and a lot of other chips)HEADmaster
Taken from http://www.murga-linux.com/puppy/viewtopic.php?t=32462 Tested on Intel Atom N450
-rw-r--r--915resolution.c84
1 files changed, 79 insertions, 5 deletions
diff --git a/915resolution.c b/915resolution.c
index bdce4f0..e932d63 100644
--- a/915resolution.c
+++ b/915resolution.c
@@ -14,6 +14,10 @@
*
* This source code is into the public domain.
*/
+/* This source has been patched by tempestuous in 2008, from 0.5.3.
+I BK added 500GMA and 945GME support (adapted from an arch patch), dec 2009.
+tempestuous adds device 2a408086 "GM45" Dec 12 2009.
+*/
#include <stdio.h>
#include <stdlib.h>
@@ -55,13 +59,13 @@ typedef unsigned char boolean;
typedef unsigned int cardinal;
typedef enum {
- CT_UNKWN, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM,
- CT_946GZ, CT_G965, CT_Q965
+ CT_UNKWN, CT_500GMA, CT_830, CT_845G, CT_855GM, CT_865G, CT_915G, CT_915GM, CT_945G, CT_945GM,
+ CT_945GME, CT_946GZ, CT_G965, CT_Q965, CT_GM965, CT_G33, CT_GM45, CT_GMA3150
} chipset_type;
char * chipset_type_names[] = {
- "UNKNOWN", "830", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM",
- "946GZ", "G965", "Q965"
+ "UNKNOWN", "500GMA", "830", "845G", "855GM", "865G", "915G", "915GM", "945G", "945GM",
+ "945GME", "946GZ", "G965", "Q965", "GM965", "G33", "GM45", "GMA3150"
};
typedef enum {
@@ -181,6 +185,10 @@ chipset_type get_chipset(cardinal id) {
chipset_type type;
switch (id) {
+ case 0x81008086:
+ type = CT_500GMA;
+ break;
+
case 0x35758086:
type = CT_830;
break;
@@ -213,6 +221,10 @@ chipset_type get_chipset(cardinal id) {
type = CT_945GM;
break;
+ case 0x27ac8086:
+ type = CT_945GME;
+ break;
+
case 0x29708086:
type = CT_946GZ;
break;
@@ -225,6 +237,38 @@ chipset_type get_chipset(cardinal id) {
type = CT_Q965;
break;
+ case 0x2a008086:
+ type = CT_GM965;
+ break;
+
+ case 0x2a018086:
+ type = CT_GM965;
+ break;
+
+ case 0x2a028086:
+ type = CT_GM965;
+ break;
+
+ case 0x29b08086:
+ type = CT_G33;
+ break;
+
+ case 0x29c08086:
+ type = CT_G33;
+ break;
+
+ case 0x2a408086:
+ type = CT_GM45;
+ break;
+
+ case 0xa0008086:
+ type = CT_GMA3150;
+ break;
+
+ case 0xa0108086:
+ type = CT_GMA3150;
+ break;
+
default:
type = CT_UNKWN;
break;
@@ -502,15 +546,21 @@ void unlock_vbios(vbios_map * map) {
outl(0x8000005a, 0xcf8);
outb(0x33, 0xcfe);
break;
+ case CT_500GMA:
case CT_845G:
case CT_865G:
case CT_915G:
case CT_915GM:
case CT_945G:
case CT_945GM:
+ case CT_945GME:
case CT_946GZ:
case CT_G965:
case CT_Q965:
+ case CT_GM965:
+ case CT_G33:
+ case CT_GM45:
+ case CT_GMA3150:
outl(0x80000090, 0xcf8);
map->b1 = inb(0xcfd);
map->b2 = inb(0xcfe);
@@ -542,15 +592,21 @@ void relock_vbios(vbios_map * map) {
outl(0x8000005a, 0xcf8);
outb(map->b1, 0xcfe);
break;
+ case CT_500GMA:
case CT_845G:
case CT_865G:
case CT_915G:
case CT_915GM:
case CT_945G:
case CT_945GM:
+ case CT_945GME:
case CT_946GZ:
case CT_G965:
case CT_Q965:
+ case CT_GM965:
+ case CT_G33:
+ case CT_GM45:
+ case CT_GMA3150:
outl(0x80000090, 0xcf8);
outb(map->b1, 0xcfd);
outb(map->b2, 0xcfe);
@@ -782,7 +838,10 @@ int parse_args(int argc, char *argv[], char ** filename, chipset_type *forced_ch
return 0;
}
- if (!strcmp(argv[index], "845")) {
+ else if (!strcmp(argv[index], "500GMA")) {
+ *forced_chipset = CT_500GMA;
+ }
+ else if (!strcmp(argv[index], "845")) {
*forced_chipset = CT_845G;
}
else if (!strcmp(argv[index], "855")) {
@@ -803,6 +862,9 @@ int parse_args(int argc, char *argv[], char ** filename, chipset_type *forced_ch
else if (!strcmp(argv[index], "945GM")) {
*forced_chipset = CT_945GM;
}
+ else if (!strcmp(argv[index], "945GME")) {
+ *forced_chipset = CT_945GME;
+ }
else if (!strcmp(argv[index], "946GZ")) {
*forced_chipset = CT_946GZ;
}
@@ -812,6 +874,18 @@ int parse_args(int argc, char *argv[], char ** filename, chipset_type *forced_ch
else if (!strcmp(argv[index], "Q965")) {
*forced_chipset = CT_Q965;
}
+ else if (!strcmp(argv[index], "GM965")) {
+ *forced_chipset = CT_GM965;
+ }
+ else if (!strcmp(argv[index], "G33")) {
+ *forced_chipset = CT_G33;
+ }
+ else if (!strcmp(argv[index], "GM45")) {
+ *forced_chipset = CT_GM45;
+ }
+ else if (!strcmp(argv[index], "GMA3150")) {
+ *forced_chipset = CT_GMA3150;
+ }
else {
*forced_chipset = CT_UNKWN;
}