diff options
author | root <root@ppcg5.localdomain> | 2007-12-02 13:59:46 +1100 |
---|---|---|
committer | root <root@ppcg5.localdomain> | 2007-12-02 13:59:46 +1100 |
commit | 0b00e3512440c1e56af756267c3e3cefb62c469c (patch) | |
tree | f486326a9b87abab072855a71a825c2e19b320ca | |
parent | 747711ab3442fc7ed65137cba391af6a244d899f (diff) |
add ability to set crtc regsnvidia
-rw-r--r-- | radeontool.c | 28 |
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; |