summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@ppcg5.localdomain>2007-12-02 13:59:46 +1100
committerroot <root@ppcg5.localdomain>2007-12-02 13:59:46 +1100
commit0b00e3512440c1e56af756267c3e3cefb62c469c (patch)
treef486326a9b87abab072855a71a825c2e19b320ca
parent747711ab3442fc7ed65137cba391af6a244d899f (diff)
add ability to set crtc regs
-rw-r--r--radeontool.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/radeontool.c b/radeontool.c
index d0b10d3..0d16fb4 100644
--- a/radeontool.c
+++ b/radeontool.c
@@ -185,6 +185,18 @@ uint8_t get_vga_crtc_reg(int crtc, int reg)
return retval;
}
+void set_vga_crtc_reg(int crtc, int reg, uint8_t val)
+{
+ int offset;
+ if (crtc==0)
+ offset = NV_PCIO0_OFFSET;
+ else
+ offset = NV_PCIO0_OFFSET + 0x2000;
+
+ radeon_set8(offset+CRTC_INDEX, "CRTC", reg);
+ radeon_set8(offset+CRTC_DATA, "CRTC", val);
+}
+
uint32_t get_tmds_index_reg(int index, int reg)
{
uint32_t idx_reg;
@@ -348,6 +360,7 @@ void radeon_reg_match(const char *pattern)
int i;
unsigned long address;
unsigned int value;
+
if (pattern[0] == '0' && pattern[1] == 'x') {
address = strtol(&(pattern[2]), NULL, 16);
value = radeon_get32(address, pattern);
@@ -355,6 +368,13 @@ void radeon_reg_match(const char *pattern)
return;
}
+ if (pattern[0] == 'C' && pattern[2] == ':') {
+ uint8_t crtc = (pattern[1] == '0') ? 0 : 1;
+ address = strtol(&(pattern[3]), NULL, 16);
+ value = get_vga_crtc_reg(crtc, address);
+ printf("%s\tCRTC%d: 0x%02x (%d)\n", pattern, crtc, value, value);
+ return;
+ }
for (i=0;i<sizeof(reg_list)/sizeof(reg_list[0]);i++) {
if (fnmatch(pattern, reg_list[i].name, 0) == 0) {
printf("%s (%04x)\t0x%08x\n",
@@ -376,6 +396,14 @@ void radeon_reg_set(const char *name, unsigned value)
printf("NEW: %s (%04x)\t0x%08x\n", name, address, radeon_get32(address, name));
return;
}
+ if (name[0] == 'C' && name[2] == ':') {
+ uint8_t crtc = (name[1] == '0') ? 0 : 1;
+ address = strtol(&(name[3]), NULL, 16);
+ printf("OLD: %s (%04x)\t0x%02x\n", name, address, get_vga_crtc_reg(crtc, address));
+ set_vga_crtc_reg(crtc, address, value);
+ printf("NEW: %s (%04x)\t0x%02x\n", name, address, get_vga_crtc_reg(crtc, address));
+ return;
+ }
for (i=0;i<sizeof(reg_list)/sizeof(reg_list[0]);i++) {
if (fnmatch(name, reg_list[i].name, 0) == 0) {
const char *name = reg_list[i].name;