summaryrefslogtreecommitdiff
path: root/sys/src/cmd/aux/vga/db.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-02-02 02:58:59 +0100
committercinap_lenrek <cinap_lenrek@felloff.net>2015-02-02 02:58:59 +0100
commit8067368e10330a67550f9e3ee353da858266a6eb (patch)
treeda29460c6810b48ee67b2d330c04a22a3ab35379 /sys/src/cmd/aux/vga/db.c
parente34fa15921cd76d78e7adc28e471204de036d66a (diff)
aux/vga: use optional edid information to determine mode when vgadb fails
igfx and vesa can determine monitor timing information from ddc and store the edid info for connected monitors in vga->edid[]. when monitor type cannot be found in vgadb, we consult the edid information and make a mode based on the edid info. this avoids having to maintain a vgadb entry for each monitor. monitor can be set to "[width]x[height]@[freq]Hz" for a specific edid setting. when not found, a mode is searched based on the size. so the following should work: aux/vga -m 1366x768@60Hz -l 1366x768x32 aux/vga -m auto -l 1366x768x32
Diffstat (limited to 'sys/src/cmd/aux/vga/db.c')
-rw-r--r--sys/src/cmd/aux/vga/db.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/sys/src/cmd/aux/vga/db.c b/sys/src/cmd/aux/vga/db.c
index e8227443e..2602001bf 100644
--- a/sys/src/cmd/aux/vga/db.c
+++ b/sys/src/cmd/aux/vga/db.c
@@ -16,20 +16,35 @@ dbopen(char* dbname)
return db;
}
+Attr*
+mkattr(Attr *tail, char *attr, char *fmt, ...)
+{
+ char val[1024];
+ va_list list;
+ Attr *a;
+
+ va_start(list, fmt);
+ snprint(val, sizeof(val), fmt, list);
+ va_end(list);
+
+ a = alloc(sizeof(Attr));
+ a->attr = alloc(strlen(attr)+1);
+ strcpy(a->attr, attr);
+ a->val = alloc(strlen(val)+1);
+ strcpy(a->val, val);
+ a->next = tail;
+
+ return a;
+}
+
static void
addattr(Attr** app, Ndbtuple* t)
{
- Attr *attr, *l;
-
- attr = alloc(sizeof(Attr));
- attr->attr = alloc(strlen(t->attr)+1);
- strcpy(attr->attr, t->attr);
- attr->val = alloc(strlen(t->val)+1);
- strcpy(attr->val, t->val);
+ Attr *l;
for(l = *app; l; l = l->next)
app = &l->next;
- *app = attr;
+ *app = mkattr(nil, t->attr, "%s", t->val);
}
char*
@@ -40,7 +55,6 @@ dbattr(Attr* ap, char* attr)
return ap->val;
ap = ap->next;
}
-
return 0;
}