FredWst Posted October 25, 2010 Share Posted October 25, 2010 Huh? I'm confused. You mean your Intel HD Graphics (GMA5700) already works, except for QE/CI? Hello, It works with Chameleon RC5 and Graphics Mode = 1920x1080. AppleIntelHDGraphicsFB is removed. if i put it, i only have display with sharing display. I can't upload file Asap it will be possible for me Upload failed. You are not permitted to upload this type of file i'll post my Dsdt Fred Update dsdt.zip Link to comment Share on other sites More sharing options...
fmac Posted October 25, 2010 Share Posted October 25, 2010 Hello, It works with Chameleon RC5 and Graphics Mode = 1920x1080. AppleIntelHDGraphicsFB is removed. if i put it, i only have display with sharing display. I can't upload file Asap it will be possible for me Upload failed. You are not permitted to upload this type of file i'll post my Dsdt Fred make a zip of your dsdt.aml this will work Link to comment Share on other sites More sharing options...
Hwold Posted October 25, 2010 Share Posted October 25, 2010 What did you modified in your dsdt.aml ? Link to comment Share on other sites More sharing options...
FredWst Posted October 25, 2010 Share Posted October 25, 2010 Hello, SBUS HPET FRWR LID GMUX IGPU + inject Maybe i forgot something. Everything is note with /* Hack */ Fred Link to comment Share on other sites More sharing options...
Time2Retire Posted October 26, 2010 Share Posted October 26, 2010 Hello, It works with Chameleon RC5 and Graphics Mode = 1920x1080. AppleIntelHDGraphicsFB is removed. if i put it, i only have display with sharing display.... Fred Oh yeah. Loading the framebuffer is killing us. It does something we (read our LCD panel) don't want. At least I do see something on my LCD panel And I haven't really checked your DSDT (not yet) but you may need to add the "AAPL, os-info" property to get output since that helped me to get my LCD panel work (activated) though I still don't get it. I mean what is it? I have no idea (: I do know that changing one single values (0x01) to zero (0x00) disables my LCD panel again. I think to have also seen different icons in Finder (under SHARED). I now have a notebook icon BTW, but I have seen at least the iMac icon a few times. Maybe one of these values – presumably the first one – tells the OS what kind of machine it is? The 0x10 may be the GPU sensor ID but hey... I haven't even checked it myself since AppleHWSensor.kext isn't loading here. Also. Can people here please add their model identifier in replies / signature, because it is important as to whether or not the LCD panel will receive a signal or not. Thank you. Time for my breakfast now... Update: Remember me finding the following info in AppleIntelHDGraphicsFB.kext: 30 49 01 11 01 10 08 00 00 01 00 00 00 00 00 00 FF FF FF FF 30 49 00 14 14 14 08 04 00 00 00 00 00 00 00 00 FF FF FF FF 30 49 01 01 01 00 08 00 00 00 00 00 00 00 00 00 FF FF FF FF Well. It turns out that this is used to switch displays!!! And it actually works, though the screen view is still mangled. Line-1: Internal LCD Line-2: External Monitor Line-3: HDMI (on the NVIDIA/ATI GPU) Link to comment Share on other sites More sharing options...
FredWst Posted October 26, 2010 Share Posted October 26, 2010 Oh yeah. Loading the framebuffer is killing us. It does something we (read our LCD panel) don't want. At least I do see something on my LCD panel And I haven't really checked your DSDT (not yet) but you may need to add the "AAPL, os-info" property to get output since that helped me to get my LCD panel work (activated) though I still don't get it. I mean what is it? I have no idea (: I do know that changing one single values (0x01) to zero (0x00) disables my LCD panel again. I think to have also seen different icons in Finder (under SHARED). I now have a notebook icon BTW, but I have seen at least the iMac icon a few times. Maybe one of these values – presumably the first one – tells the OS what kind of machine it is? The 0x10 may be the GPU sensor ID but hey... I haven't even checked it myself since AppleHWSensor.kext isn't loading here. Also. Can people here please add their model identifier in replies / signature, because it is important as to whether or not the LCD panel will receive a signal or not. Thank you. Time for my breakfast now... Update: Remember me finding the following info in AppleIntelHDGraphicsFB.kext: 30 49 01 11 01 10 08 00 00 01 00 00 00 00 00 00 FF FF FF FF 30 49 00 14 14 14 08 04 00 00 00 00 00 00 00 00 FF FF FF FF 30 49 01 01 01 00 08 00 00 00 00 00 00 00 00 00 FF FF FF FF Well. It turns out that this is used to switch displays!!! And it actually works, though the screen view is still mangled. Line-1: Internal LCD Line-2: External Monitor Line-3: HDMI (on the NVIDIA/ATI GPU) Hello I'm working on Dsdt E6510, i've post one but gave me some trouble on reboot. One thing, on seven with intel drv you can make new resolution. I get 800x600 1024x768 1280x1024 1920x1080 out of the box And with intel software you can add for exemple 1600x900. Dynamic system to create the resoltion you want. maybe can help to understand I saw in kext whitch do the selection between nvidia and intel that you can change the default card and the order. In Dsdt there is Gmux whitch write in GPIO to select the good hardware. Fred Fred Link to comment Share on other sites More sharing options...
Time2Retire Posted October 26, 2010 Share Posted October 26, 2010 Good work but not on my core i5 the output of fbdump is "-bash: ./fbdump: Bad CPU type in executable" on my other Hackmac it is working whats wrong Sorry to be this late with my reply, but there's so much new stuff to learn. Anyway. I think that this is an arch mismatch. Please compile with: cc -g -o /tmp/fbdump fbdump.c -framework ApplicationServices -framework IOKit -Wall -arch i386 That should cure it. Link to comment Share on other sites More sharing options...
Time2Retire Posted October 28, 2010 Share Posted October 28, 2010 Time to fix things. Time to add a new Legacy kexts. Enter LegacyIOGraphicsFamily.kext with only Info.plist in it. Time for you people to step in. This is what we need under AppleBacklightDisplay: <key>IODisplayParameters</key> <dict> <key>brightness</key> <dict> <key>max</key> <integer>255</integer> <key>min</key> <integer>10</integer> <key>value</key> <integer>25</integer> </dict> <key>commit</key> <dict> <key>reg</key> <integer>0</integer> </dict> </dict> I'll explain the next step when this work is done. And no this alone won't magically fix your Intel HD GMA 5700 yet you want it. Ok. I'll add another step now. We need a perl coder to write us a simple little script to check/fix the checksum of the EDID table data. I'll even add the C++ variant for you, to make it easy: SInt32 EDIDSum( const UInt8 * bytes, IOByteCount len ) { int i, j; UInt8 sum; for (j = 0; j < len; j += 128) { sum = 0; for (i=0; i < 128; i++) sum += bytes[j+i]; if (sum) { printf("sum: %d\n", sum); return (j/128); } } printf ("sum: %d\n", sum); return (-1); } Why? Because some of us will have to change their EDID data, and the checksum needs to be repaired afterwards. Easy huh? So come on folks. Let's make this a (more) collaborate effort. Don't wait on me to fix it for you!!! Link to comment Share on other sites More sharing options...
fmac Posted October 28, 2010 Share Posted October 28, 2010 Will give it a try after work sounds good kepp up that good work Link to comment Share on other sites More sharing options...
FredWst Posted October 28, 2010 Share Posted October 28, 2010 Hello, i'm not a perl programmer, but the code should be a thing like this #!/usr/bin/perl @bytes=( 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0xE4,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x13,0x01,0x04,0x95,0x22,0x13,0x78,0x02,0x15,0xD5,0x9E,0x59,0x50,0x98,0x26, 0x0E,0x50,0x54,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0xCA,0x35,0x80,0x92,0x70,0x38,0x1F,0x40,0x30,0x20, 0x35,0x00,0x58,0xC2,0x10,0x00,0x00,0x18,0x22,0x24,0x80,0xA0,0x70,0x38,0x1F,0x40, 0x30,0x20,0x35,0x00,0x58,0xC2,0x10,0x00,0x00,0x18,0x00,0x00,0x00,0xFE,0x00,0x44, 0x48,0x30,0x39,0x31,0x80,0x31,0x35,0x36,0x57,0x46,0x31,0x0A,0x00,0x00,0x00,0x00, 0x00,0x00,0x41,0x31,0x1E,0x00,0x00,0x00,0x00,0x09,0x01,0x0A,0x20,0x20,0x00,0xD6 ); sub EDIDSum() { my($len,@data) = @_; for ($j = 0; $j < $len; $j+=128) { $sum = 0; for ($i = 0; $i < 128; $i++) { $sum += $data[$j+$i]; $sum = ( $sum % 256 ); } if ($sum) { printf("sum: %d\n", $sum); return ($j/128); } } printf ("sum: %d\n", $sum); return (-1); } &EDIDSum(0x80,@bytes); EDIDcrc.zip Fred Link to comment Share on other sites More sharing options...
fmac Posted October 28, 2010 Share Posted October 28, 2010 Hello, i'm not a perl programmer, but the code should be a thing like this #!/usr/bin/perl @bytes=( 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x30,0xE4,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x13,0x01,0x04,0x95,0x22,0x13,0x78,0x02,0x15,0xD5,0x9E,0x59,0x50,0x98,0x26, 0x0E,0x50,0x54,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0xCA,0x35,0x80,0x92,0x70,0x38,0x1F,0x40,0x30,0x20, 0x35,0x00,0x58,0xC2,0x10,0x00,0x00,0x18,0x22,0x24,0x80,0xA0,0x70,0x38,0x1F,0x40, 0x30,0x20,0x35,0x00,0x58,0xC2,0x10,0x00,0x00,0x18,0x00,0x00,0x00,0xFE,0x00,0x44, 0x48,0x30,0x39,0x31,0x80,0x31,0x35,0x36,0x57,0x46,0x31,0x0A,0x00,0x00,0x00,0x00, 0x00,0x00,0x41,0x31,0x1E,0x00,0x00,0x00,0x00,0x09,0x01,0x0A,0x20,0x20,0x00,0xD6 ); sub EDIDSum() { my($len,@data) = @_; for ($j = 0; $j < $len; $j+=128) { $sum = 0; for ($i = 0; $i < 128; $i++) { $sum += $data[$j+$i]; $sum = ( $sum % 256 ); } if ($sum) { printf("sum: %d\n", $sum); return ($j/128); } } printf ("sum: %d\n", $sum); return (-1); } &EDIDSum(0x80,@bytes); EDIDcrc.zip Fred Sorry for the stupid question but " how to run it " Link to comment Share on other sites More sharing options...
FredWst Posted October 28, 2010 Share Posted October 28, 2010 Sorry for the stupid questionbut " how to run it " Hello, There is no stupid question. Unzip attach file, open a terminal, change to the folder where you unzip file, and query : ./EDIDcrc Remember it do nothing except to calculate a checksum. Fred Link to comment Share on other sites More sharing options...
Time2Retire Posted October 28, 2010 Share Posted October 28, 2010 Thanks, but don't we want it to read a file instead? Presumably the EDID data saved by SwitchResX. Won't that be easier for people? What do you think? @FredWst: What about fixing the checksum automatically? Link to comment Share on other sites More sharing options...
FredWst Posted October 28, 2010 Share Posted October 28, 2010 Thanks, but don't we want it to read a file instead? Presumably the EDID data saved by SwitchResX. Won't that be easier for people? What do you think? @FredWst: What about fixing the checksum automatically? Hi, I've just make c to perl. would you like this ? ./EDIDcrc file.bin Fred Link to comment Share on other sites More sharing options...
fmac Posted October 28, 2010 Share Posted October 28, 2010 I did it with the EDID from FredWst and my EDID but sum is always "0" Sorry Link to comment Share on other sites More sharing options...
FredWst Posted October 28, 2010 Share Posted October 28, 2010 Thanks, but don't we want it to read a file instead? Presumably the EDID data saved by SwitchResX. Won't that be easier for people? What do you think? @FredWst: What about fixing the checksum automatically? 4.8 Extension Flag and Checksum: 2 bytes – offset 7Eh-7Fh 4.8.1 Extensionflag ␣ Any non-zero value of the extension flag indicates that the display has additional EDID data beyond the first 128-bytes. The extension flag indicates the number of 128-byte extensions present. The method to access this additional data is defined in the E-DDC standard. ␣ This byte is programmed such that a one-byte checksum of the entire 128-byte EDID equals 00h. If the recorded checksum does not equal the calculated checksum then the checksum is invalid. Here's information about how is made EDID http://www.stellae.fr/wiki/_media/efika_da..._guide_vesa.pdf Here a test soft. ./EDIDcrc your edid file or ./EDIDcrc without param take buffer test in file It will tell you if checksum is Ok, if not it will patch in memory. EDIDcrc_1.zip dutchhockeypro can you explain to me what you want, i'll do it. Fred Link to comment Share on other sites More sharing options...
Time2Retire Posted October 29, 2010 Share Posted October 29, 2010 Hi Fred, First of all. Thank you for the link to the VESA EDID specifications. I personally had to use Wikipedia due to lack of having it. And there are quite a few things I have learned from your Perl script. 1) I didn't know that you could use it without the .pl file extension. 2) That we can execute Perl script by setting the execute bit, and run it without using: perl my_perls_script.pl 3) I only used my $filesize = -s $ARGV[0]; recently, so your code snippet was another eye opener: use File::stat; my $filesize = stat("$ARGV[0]")->size; print "File : $ARGV[0] -> Size: $filesize\n"; 4) I didn't knew how to call / define sub routines. Thanks for that. But what I do know is this: 1) You should add checks to trap human errors (when people forget arguments and the file is too short). 2) Use clear self descriptive var names. Not vars like $c because that tells people nothing. This way you can also eliminate (most of) the need of in source comments. 3) Don't do extra work when it's not required. - I get "Checksum is OK" three times. Should use the file length to set $len (tables are 128 bytes long after all). 4) Use predefined variables when possible: Example: $c = $data[$j+$i-1] Do this instead of recalculating stuff like $data[$j+$i-1]=($data[$j+$i-1] 5) When using returns, use 0 on success a -1 on error. Not reversed. - The given example was taken from Apple's i2cexample.c 6) Use spacing to make your code readable. And we should at least give people the option to fix their EDID's checksum. Either by showing a perl command line, or to patch their table. Other neat options could be: 1) Dump/save a copy that can be used in the DSDT 2) Dump/save the EDID in base64 encoding. Also. Why not keep it simple and use something like: while (($num = read(FILE, $data, 1)) != 0) and do the checksum calculation at once (while keeping track of $sum) and do the modulo on each last byte with: $crc = ($byte + (0x100 - $sum)) % 256; All in all a good start, and a big 'thank you very much' for taking some of the load off my shoulders! Link to comment Share on other sites More sharing options...
FredWst Posted October 29, 2010 Share Posted October 29, 2010 Hi Fred, First of all. Thank you for the link to the VESA EDID specifications. I personally had to use Wikipedia due to lack of having it. And there are quite a few things I have learned from your Perl script. 1) I didn't know that you could use it without the .pl file extension. 2) That we can execute Perl script by setting the execute bit, and run it without using: perl my_perls_script.pl 3) I only used my $filesize = -s $ARGV[0]; recently, so your code snippet was another eye opener: use File::stat; my $filesize = stat("$ARGV[0]")->size; print "File : $ARGV[0] -> Size: $filesize\n"; 4) I didn't knew how to call / define sub routines. Thanks for that. But what I do know is this: 1) You should add checks to trap human errors (when people forget arguments and the file is too short). 2) Use clear self descriptive var names. Not vars like $c because that tells people nothing. This way you can also eliminate (most of) the need of in source comments. 3) Don't do extra work when it's not required. - I get "Checksum is OK" three times. Should use the file length to set $len (tables are 128 bytes long after all). 4) Use predefined variables when possible: Example: $c = $data[$j+$i-1] Do this instead of recalculating stuff like $data[$j+$i-1]=($data[$j+$i-1] 5) When using returns, use 0 on success a -1 on error. Not reversed. - The given example was taken from Apple's i2cexample.c 6) Use spacing to make your code readable. And we should at least give people the option to fix their EDID's checksum. Either by showing a perl command line, or to patch their table. Other neat options could be: 1) Dump/save a copy that can be used in the DSDT 2) Dump/save the EDID in base64 encoding. Also. Why not keep it simple and use something like: while (($num = read(FILE, $data, 1)) != 0) and do the checksum calculation at once (while keeping track of $sum) and do the modulo on each last byte with: $crc = ($byte + (0x100 - $sum)) % 256; All in all a good start, and a big 'thank you very much' for taking some of the load off my shoulders! Hi, Don't worry it's just a fast simple code that i wrote. But i need to know what do you need exactly and to do what ? is it only to patch bad sum of edid and save result on disk ? is it only to return the good sum and use it on the fly ? so, what do you want as input ? a file or stream ? what do you want as ouput ? a file or stream ? Regards Fred Link to comment Share on other sites More sharing options...
Time2Retire Posted October 29, 2010 Share Posted October 29, 2010 Hi, Don't worry it's just a fast simple code that i wrote. But i need to know what do you need exactly and to do what ? is it only to patch bad sum of edid and save result on disk ? is it only to return the good sum and use it on the fly ? so, what do you want as input ? a file or stream ? what do you want as ouput ? a file or stream ? Regards Fred Hi Fred, Well. I think that patching it on the fly is the best solution. Thank you. p.s. Any takers for the legacy kext we need? Attached is a LED Cinema Display's EDID with two tables in it (can be used for testing). EDID_LED_Cinema_Display.hex.zip Link to comment Share on other sites More sharing options...
FredWst Posted October 29, 2010 Share Posted October 29, 2010 Hi Fred, Well. I think that patching it on the fly is the best solution. Thank you. p.s. Any takers for the legacy kext we need? LegacyIOGraphicsFamily.kext.zip is what you are searching for ? iMac_de_fred.zip Fred Link to comment Share on other sites More sharing options...
Time2Retire Posted October 29, 2010 Share Posted October 29, 2010 LegacyIOGraphicsFamily.kext.zip is what you are searching for ? iMac_de_fred.zip Fred Yes. A legacy kexts is what we need to set brightness control et all. just look at the following source code: IOService * IOBacklightDisplay::probe( IOService * provider, SInt32 * score ) { IOFramebuffer * framebuffer; IOService * ret = 0; UInt32 displayType; uintptr_t connectFlags; do { if (!gIOFBHaveBacklight) // Check in IOFramebuffer.cpp continue; if (!super::probe(provider, score)) continue; framebuffer = (IOFramebuffer *) getConnection()->getFramebuffer(); for (IOItemCount idx = 0; idx < framebuffer->getConnectionCount(); idx++) { if (kIOReturnSuccess != framebuffer->getAttributeForConnection(idx, kConnectionFlags, &connectFlags)) /* flgs */ continue; if (0 == (kIOConnectionBuiltIn /* 00 08 00 */ & connectFlags)) continue; if (kIOReturnSuccess != framebuffer->getAppleSense(idx, NULL, NULL, NULL, &displayType)) /* asns */ continue; if ((kPanelTFTConnect /* 2 */ != displayType) && (kGenericLCD /* 20 */ != displayType) && (kPanelFSTNConnect /* 14 */ != displayType)) continue; ret = this; // yes, we will control the panel break; } } while (false); return (ret); } Seems like we can make it work. LOL I just woke up (fell in sleep on our couch while watching some movie) @2:20AM A great time for a Saturday morning to do some hacking... Update: In case anyone is wondering about the used properties under IOGraphicsIgnoreParameters in LegacyIOGraphicsFamily.kext: kUpstreamProtocolConfig = 'aupc' kUpstreamProtocolHDCPStatus = 'auph' kUpstreamProtocolHDCPConfigStatus = 'aupp' kUpstreamProtocolMsgStatus = 'aums' Note: bpc is still unknown to me. And for IOGraphicsPrefsParameters: kConnectionColorMode = 'cyuv' Possible values: kIODisplayColorModeReserved = 0x00000000, kIODisplayColorModeRGB = 0x00000001, kIODisplayColorModeYCbCr422 = 0x00000010, kIODisplayColorModeYCbCr444 = 0x00000100, kIODisplayColorModeRGBLimited = 0x00001000, kIODisplayColorModeAuto = 0x10000000 (used in the legacy kext) kConnectionOverscan = 'oscn' kConnectionVideoBest = 'vbst' Note: I don't know what: pscn (positive scan?), tbri (true brightness?), thue (hue) and tsat (saturation?) are used for. Well not exactly that is, but they are related to color stuff. Update-2: LegacyIOGraphicsFamily.kext doesn't seem to work for me. Does it work for you Fred? Anyone else maybe? Link to comment Share on other sites More sharing options...
FredWst Posted October 31, 2010 Share Posted October 31, 2010 Hi, I follow Wiki to do this one injection workings for me. Look in second file i join,you will see EDID under display0 Fred Link to comment Share on other sites More sharing options...
yurick Posted October 31, 2010 Share Posted October 31, 2010 Hi! Please tell me where to find the startup method IntelHD processor P6100. The methods do not work there nVidia optimus. Notetbook Asus K42JC .The system is installed only through a complete removal IntelHD kexts Thanks in advance Link to comment Share on other sites More sharing options...
Time2Retire Posted October 31, 2010 Share Posted October 31, 2010 Hi, I follow Wiki to do this one injection workings for me. Look in second file i join,you will see EDID under display0 Fred I also have a EDID property under AppleDisplay (I'm testing my external monitor now) but that's the one injected by IOGraphicsFamily.kext and not the one from the legacy kext. Try to inject a random property, say 'IOTestProperty' with the text "Hello World". That simply doesn't work here. I just think that it isn't matching anything currently. Need some work. Link to comment Share on other sites More sharing options...
FredWst Posted October 31, 2010 Share Posted October 31, 2010 I also have a EDID property under AppleDisplay (I'm testing my external monitor now) but that's the one injected by IOGraphicsFamily.kext and not the one from the legacy kext. Try to inject a random property, say 'IOTestProperty' with the text "Hello World". That simply doesn't work here. I just think that it isn't matching anything currently. Need some work. Hello, May be i put bad kext on upload, so this one works. LegacyIOGraphicsFamily.kext.zip Search AppleDisplay -> IOTest = fred test iMac_de_fred.zip Fred Link to comment Share on other sites More sharing options...
Recommended Posts