On Thu, 2005-05-19 at 10:22 +0200, Nicolas Huillard wrote:
What I would like to do is retrofit the 720x576Noscale into the tables found inside the viafb kernel module. For this, I have to :
- find the differences between the 720x576scaled and 720x576Noscale
modes in the new table structure 2) and find where those differences should go in the old table structure (where the 720x576Noscale didn't exist) 3) modify and test the kernel frame-buffer driver
Anything that could help would be very useful, since :
- the kernel module cannot be unloaded, so each test mean a reboot
- the tables are inside the code, so each modification mean a
recompilation (thus moprobe, thus reboot)
Nasty!
So if you have any tool, diff, advice, etc. I'm interested.
Have a look at the vt1622.c tool at http://cvs.sourceforge.net/viewcvs.py/unichrome/utils/
This lets you alter register values of the vt1622 o r1622a on-the-fly. This is what I used to get the Noscale table for the vt1622a. It lets you change syncs, scaling, etc., and see how it affects the picture. It can then be used to output a table entry in the format below. I got my vt1622a Noscale table entry by changing about 2 of the registers (I think) from an entry suggested by Terry. When I wrote out the table, it had a lot more than just those two values changed but it did work.
Here are the relevant table entries I have in my unichrome driver (may have changed in current CVS but hopefully you can work out which bits are which: N.B. the table entries are anonymous due to Via's NDA about what information can be released) from xc/programs/Xserver/hw/xfree86/drivers/via/via_vt1622x.h:
/* * * VT1622 modetables * */ static DisplayModeRec VT1622Modes[] = { { MODEPREFIX("720x576"), 28500, 720, 728, 744, 760, 0, 576, 635 , 643, 750, 0, V_NHSYNC | V_PVSYNC, MODESUFFIXPAL }, { MODEPREFIX("720x576Over"), 30000, 720, 728, 864, 1000, 0, 576, 576 , 579, 600, 0, V_NHSYNC | V_PVSYNC, MODESUFFIXPAL }, { MODEPREFIX("720x576Noscale"), 28000, 720, 728, 864, 896, 0, 576, 576 , 579, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIXPAL },
static struct VT162XTableRec VT1622Table[] = { { "720x576", 720, 576, TVTYPE_PAL, 0, 0, { 0x04, 0, 0, 0xA2, 0, 0, 0x10, 0x1E, 0xAC, 0x38, 0x67, 0, 0x57, 0x49, 0x0F, 0, 0, 0, 0xF0, 0x0F, 0xD1, 0x38, 0, 0, 0, 0, 0xF2, 0, 0x02, 0, 0, 0x84, 0x13, 0x0C, 0x04, 0x7B, 0x48, 0x64, 0x30, 0x93, 0x49, 0x5F, 0x15, 0xA5, 0x23, 0x8B, 0xBD, 0 }, { 0xE7, 0x45, 0x04, 0, 0, 0x45, 0xF7, 0xD1, 0x22, 0xED, 0x02, 0x1D, 0x29, 0x75, 0x23, 0x88, 0xC6, 0xF0, 0xFA, 0x0F, 0xCC, 0x30, 0x14, 0, 0, 0x8F, 0x03 }, { 0xB5, 0xB1, 0xB1, 0, 0, 0 }, { 0x59, 0x4D, 0x4A }, 0x2D839832, 0, }, { "720x576Over", 720, 576, TVTYPE_PAL, 0, 0, { 0x04, 0, 0, 0xA6, 0, 0, 0x10, 0x10, 0x7D, 0x32, 0x60, 0, 0x57, 0x46, 0x0F, 0, 0, 0, 0xEC, 0x15, 0xDC, 0x28, 0, 0, 0, 0, 0xEE, 0, 0x0A, 0, 0, 0x84, 0x13, 0x0C, 0x04, 0x7B, 0x48, 0x64, 0x30, 0x93, 0x49, 0x5F, 0x15, 0xA5, 0x23, 0x77, 0xFF, 0 }, { 0xE7, 0x45, 0x04, 0, 0, 0x45, 0xE7, 0xCF, 0x23, 0x57, 0x02, 0x1F, 0x80, 0x75, 0x23, 0x89, 0xC7, 0xF1, 0xFF, 0x05, 0xD7, 0x80, 0x03, 0, 0, 0xBF, 0x03 }, { 0xBA, 0xB8, 0xB8, 0x90, 0x99, 0 }, { 0x58, 0x48, 0x49 }, 0x2D66772D, 0, }, { "720x576Noscale", 720, 576, TVTYPE_PAL, 0, 0, { 0x04, 0, 0, 0xA4, 0, 0, 0x10, 0x75, 0xA5, 0x3A, 0x5A, 0, 0x49, 0x46, 0, 0x89, 0, 0, 0xE9, 0x19, 0xDC, 0x24, 0, 0, 0, 0, 0xEE, 0, 0x0A, 0, 0, 0x04, 0x13, 0x0C, 0x04, 0x7B, 0x48, 0x64, 0x30, 0x93, 0x49, 0x5F, 0x15, 0xA5, 0x23, 0x77, 0xFF, 0 }, { 0xE7, 0x45, 0x04, 0, 0, 0x45, 0x7F, 0xD0, 0x23, 0x70, 0x02, 0x7F, 0xD0, 0x93, 0x23, 0x89, 0xC7, 0xF1, 0xBD, 0x06, 0, 0, 0, 0, 0, 0x7F, 0x03 }, { 0xBA, 0xB8, 0xB8, 0x90, 0x99, 0 }, /* added later - untested */ { 0x58, 0x48, 0x49 }, /* added later - untested */ 0x288933E3, 0, },
/* * * VT1622A/VT1623 modetables * */ static DisplayModeRec VT1623Modes[] = { { MODEPREFIX("720x576"), 28500, 720, 728, 744, 760, 0, 576, 635, 643, 750, 0, V_NHSYNC | V_PVSYNC, MODESUFFIXPAL }, { MODEPREFIX("720x576Over"), 27000, 720, 768, 800, 864, 0, 576, 577, 579, 625, 0, V_NHSYNC | V_PVSYNC, MODESUFFIXPAL }, { MODEPREFIX("720x576Noscale"), 28000, 720, 728, 864, 896, 0, 576, 576 , 579, 625, 0, V_NHSYNC | V_NVSYNC, MODESUFFIXPAL },
static struct VT162XTableRec VT1623Table[] = { { "720x576", 720, 576, TVTYPE_PAL, 0, 0, { 0x04, 0, 0, 0x06, 0, 0, 0x20, 0x0F, 0xAF, 0x35, 0x5D, 0, 0x4F, 0x41, 0x0F, 0, 0, 0, 0xF8, 0x3C, 0x73, 0x56, 0, 0, 0, 0, 0xED, 0, 0x02, 0, 0, 0x99, 0x18, 0x0C, 0x76, 0x7A, 0x44, 0x62, 0x30, 0x8E, 0x49, 0x5B, 0x15, 0xA0, 0x22, 0x5C, 0xBD, 0 }, { 0, 0, 0, 0, 0, 0x43, 0xF7, 0xCF, 0x22, 0xED, 0x02, 0x1D, 0x29, 0x75, 0x63, 0x88, 0xC6, 0xF0, 0xFA, 0x0F, 0xCC, 0x30, 0x94, 0, 0, 0x8F, 0x03 }, { 0x6A, 0x62, 0x65, 0, 0, 0 }, { 0x59, 0x4D, 0x4A }, 0x2D839832, 0, }, { "720x576Over", 720, 576, TVTYPE_PAL, 0, 0, { 0x04, 0, 0, 0, 0, 0, 0x20, 0x3F, 0x89, 0x35, 0x50, 0, 0x43, 0x2E, 0x0F, 0, 0, 0, 0xE8, 0x23, 0x84, 0x20, 0, 0, 0, 0, 0xFF, 0, 0x02, 0, 0, 0x99, 0x17, 0x0C, 0x6F, 0x79, 0x48, 0x62, 0x34, 0x8E, 0x4F, 0x5B, 0x15, 0xA0, 0x22, 0x67, 0xFF, 0 }, { 0, 0, 0, 0, 0, 0x3A, 0x5F, 0xCF, 0x23, 0x70, 0x02, 0x5F, 0xBF, 0x7E, 0x23, 0x94, 0xD0, 0x27, 0x8F, 0x16, 0, 0, 0x04, 0, 0, 0x5F, 0x03 }, { 0x6A, 0x62, 0x65, 0x90, 0x99, 0 }, { 0x58, 0x48, 0x49 }, 0x2A098ACB, 0, }, { "720x576Noscale", 720, 576, TVTYPE_PAL, 0, 0, { 0x04, 0, 0, 0x00, 0, 0, 0x20, 0x75, 0xA5, 0x3A, 0x5A, 0, 0x49, 0x46, 0, 0x89, 0, 0, 0xE9, 0x19, 0x6E, 0x24, 0, 0, 0, 0, 0xEE, 0, 0x0A, 0, 0, 0x00, 0x13, 0x0C, 0x04, 0x7B, 0x48, 0x64, 0x30, 0x93, 0x49, 0x5F, 0x15, 0xA5, 0x23, 0x77, 0xFF, 0 }, { 0x00, 0x00, 0x04, 0, 0, 0x45, 0x7F, 0x4B, 0x33, 0x70, 0x02, 0x7F, 0xD0, 0x93, 0x23, 0x89, 0xC7, 0xF1, 0xBD, 0x06, 0, 0, 0, 0, 0, 0x7F, 0x03 }, { 0xBA, 0xB8, 0xB8, 0x90, 0x99, 0 }, /* added later - untested */ { 0x58, 0x48, 0x49 }, /* added later - untested */ 0x288933E3, 0, },
Yummy!
;)
I hope that is of some use to you. Let me know if you want the whole file sending!
I'll give it a go... Debian currently doesn't have DFB++ packages, or not that I've found.
I have one, which is not very useful outside softdevice. I'll provide the necessary packages for the Debian official repository.
Cool.
Cheers,
Laz