[EVO 4G Android Development] sheffield:
Also, here is code to dump the panel's self reported capabilities...

static int dump_panel_caps(struct mddi_client_caps *ccaps) {
printk("### BEGIN NOVATEK CAPABILITIES DUMP ###\n");
printk("NOVATEK client_id: 0x%.8x (%10ud)\n",ccaps->client_id,ccaps->client_id);
printk("NOVATEK Protocol_Version: 0x%.8x (%10ud)\n",ccaps->Protocol_Version,ccaps->Protocol_Version);
printk("NOVATEK Minimum_Protocol_Version: 0x%.8x (%10ud)\n",ccaps->Minimum_Protocol_Version,ccaps->Minimum_Protocol_Version);
printk("NOVATEK Data_Rate_Capability: 0x%.8x (%10ud)\n",ccaps->Data_Rate_Capability,ccaps->Data_Rate_Capability);
printk("NOVATEK Interface_Type_Capability: 0x%.8x (%10ud)\n",ccaps->Interface_Type_Capability,ccaps->Interface_Type_Capability);
printk("NOVATEK Number_of_Alt_Displays: 0x%.8x (%10ud)\n",ccaps->Number_of_Alt_Displays,ccaps->Number_of_Alt_Displays);
printk("NOVATEK PostCal_Data_Rate: 0x%.8x (%10ud)\n",ccaps->PostCal_Data_Rate,ccaps->PostCal_Data_Rate);
printk("NOVATEK Bitmap_Width: 0x%.8x (%10ud)\n",ccaps->Bitmap_Width,ccaps->Bitmap_Width);
printk("NOVATEK Bitmap_Height: 0x%.8x (%10ud)\n",ccaps->Bitmap_Height,ccaps->Bitmap_Height);
printk("NOVATEK Display_Window_Width: 0x%.8x (%10ud)\n",ccaps->Display_Window_Width,ccaps->Display_Window_Width);
printk("NOVATEK Display_Window_Height: 0x%.8x (%10ud)\n",ccaps->Display_Window_Height,ccaps->Display_Window_Height);
printk("NOVATEK Color_Map_Size: 0x%.8x (%10ud)\n",ccaps->Color_Map_Size,ccaps->Color_Map_Size);
printk("NOVATEK Color_Map_RGB_Width: 0x%.8x (%10ud)\n",ccaps->Color_Map_RGB_Width,ccaps->Color_Map_RGB_Width);
printk("NOVATEK RGB_Capability: 0x%.8x (%10ud)\n",ccaps->RGB_Capability,ccaps->RGB_Capability);
printk("NOVATEK Monochrome_Capability: 0x%.8x (%10ud)\n",ccaps->Monochrome_Capability,ccaps->Monochrome_Capability);
printk("NOVATEK Reserved_1: 0x%.8x (%10ud)\n",ccaps->Reserved_1,ccaps->Reserved_1);
printk("NOVATEK Y_Cb_Cr_Capability: 0x%.8x (%10ud)\n",ccaps->Y_Cb_Cr_Capability,ccaps->Y_Cb_Cr_Capability);
printk("NOVATEK Bayer_Capability: 0x%.8x (%10ud)\n",ccaps->Bayer_Capability,ccaps->Bayer_Capability);
printk("NOVATEK Alpha_Cursor_Image_Planes: 0x%.8x (%10ud)\n",ccaps->Alpha_Cursor_Image_Planes,ccaps->Alpha_Cursor_Image_Planes);
printk("NOVATEK Client_Feature_Capability_Indicators: 0x%.8x (%10ud)\n",ccaps->Client_Feature_Capability_Indicators,ccaps->Client_Feature_Capability_Indicators);
printk("NOVATEK Maximum_Video_Frame_Rate_Capability: 0x%.8x (%10ud)\n",ccaps->Maximum_Video_Frame_Rate_Capability,ccaps->Maximum_Video_Frame_Rate_Capability);
printk("NOVATEK Minimum_Video_Frame_Rate_Capability: 0x%.8x (%10ud)\n",ccaps->Minimum_Video_Frame_Rate_Capability,ccaps->Minimum_Video_Frame_Rate_Capability);
printk("NOVATEK Minimum_Sub_frame_Rate: 0x%.8x (%10ud)\n",ccaps->Minimum_Sub_frame_Rate,ccaps->Minimum_Sub_frame_Rate);
//printk("NOVATEK Audio_Buffer_Depth: 0x%.8x (%10ud)\n",ccaps->Audio_Buffer_Depth,ccaps->Audio_Buffer_Depth);
//printk("NOVATEK Audio_Channel_Capability: 0x%.8x (%10ud)\n",ccaps->Audio_Channel_Capability,ccaps->Audio_Channel_Capability);
//printk("NOVATEK Audio_Sample_Rate_Capability: 0x%.8x (%10ud)\n",ccaps->Audio_Sample_Rate_Capability,ccaps->Audio_Sample_Rate_Capability);
//printk("NOVATEK Audio_Sample_Resolution: 0x%.8x (%10ud)\n",ccaps->Audio_Sample_Resolution,ccaps->Audio_Sample_Resolution);
//printk("NOVATEK Mic_Audio_Sample_Resolution: 0x%.8x (%10ud)\n",ccaps->Mic_Audio_Sample_Resolution,ccaps->Mic_Audio_Sample_Resolution);
//printk("NOVATEK Mic_Sample_Rate_Capability: 0x%.8x (%10ud)\n",ccaps->Mic_Sample_Rate_Capability,ccaps->Mic_Sample_Rate_Capability);
printk("NOVATEK Keyboard_Data_Format: 0x%.8x (%10ud)\n",ccaps->Keyboard_Data_Format,ccaps->Keyboard_Data_Format);
printk("NOVATEK pointing_device_data_format: 0x%.8x (%10ud)\n",ccaps->pointing_device_data_format,ccaps->pointing_device_data_format);
printk("NOVATEK content_protection_type: 0x%.8x (%10ud)\n",ccaps->content_protection_type,ccaps->content_protection_type);
printk("NOVATEK Mfr_Name: 0x%.8x (%10ud)\n",ccaps->Mfr_Name,ccaps->Mfr_Name);
printk("NOVATEK Product_Code: 0x%.8x (%10ud)\n",ccaps->Product_Code,ccaps->Product_Code);
printk("NOVATEK Reserved_3: 0x%.8x (%10ud)\n",ccaps->Reserved_3,ccaps->Reserved_3);
printk("NOVATEK Serial_Number: 0x%.8x (%10ud)\n",ccaps->Serial_Number,ccaps->Serial_Number);
printk("NOVATEK Week_of_Manufacture: 0x%.8x (%10ud)\n",ccaps->Week_of_Manufacture,ccaps->Week_of_Manufacture);
printk("NOVATEK Year_of_Manufacture: 0x%.8x (%10ud)\n",ccaps->Year_of_Manufacture,ccaps->Year_of_Manufacture);
printk("### END NOVATEK CAPABILITIES DUMP ###\n");
return 0;
}

Put that code near the top of mddi.c.

Add a call in mddi_handle_rev_data...

static void mddi_handle_rev_data(struct mddi_info *mddi, union mddi_rev *rev)
{
int i;
struct reg_read_info *ri;

if ((rev->hdr.length <= MDDI_REV_BUFFER_SIZE - 2) &&
(rev->hdr.length >= sizeof(struct mddi_rev_packet) - 2)) {
/* printk(KERN_INFO "rev: len=%04x type=%04x\n",
* rev->hdr.length, rev->hdr.type); */

switch (rev->hdr.type) {
case TYPE_CLIENT_CAPS:
memcpy(&mddi->caps, &rev->caps,
sizeof(struct mddi_client_caps));
[COLOR="Red"]dump_panel_caps(&mddi->caps);[/COLOR]
mddi->flags |= FLAG_HAVE_CAPS;
wake_up(&mddi->int_wait);
break;
//
//...
//

Again, dmesg | grep NOVATEK to see everything laid out.