Jump to content
alex.daoud

[Guide] 10.10 Yosemite on the Dell Venue 11 Pro [Core iX]

227 posts in this topic

Recommended Posts

Disclaimer: This guide is still a work in progress, not everything works on the device and this topic is mainly to document my progress, once we get more hardware working, I will rewrite this guide to flesh out the details.

 

This guide is for the Core iX versions and does not apply to the Atom ones.

 

Prerequisites

 

 

Preparing the boot drive

 

First you'll need to add the GenericUSBXHCI.kext in your USB installer's bootloader's kext injection directory. For Chameleon, this is /Extra/Extensions.

 

You will also need to add the Clover installer, Clover Configurator and the OSXaptiodrv file to the installer drive.

 

You will then need to patch the kernel to boot on the Haswell CPU. A very good guide for this can be found here. Keep a copy of this patched kernel in an easy to access folder on the USB HD for later.

 

Preparing the BIOS

 

Boot into the device's BIOS (hold down the volume-down button while starting up).

 

Under General > Boot sequence, change the boot option to Legacy and make sure the boot sequence is set to the USB first.

 

Under System Configuration > USB Configuration, disable "Enable USB 3.0 Controller"

 

Under Performance, disable the following (some of this will probably work but I haven't gotten around to seeing which ones do, it's best to just leave them disabled for now) :

  • Intel SpeedStep
  • C-states control
  • Intel Turboboost
  • Hyperthread control

 

Installation

 

Restart the device and boot from the USB installer. Select the installer, press spacebar and issue the following bootflags: "-v -no-zf" then press enter.

 

After a while you should boot into the installer. Open up Disk Utility and format the disk as HFS+ with GPT like usual (if you want to dual boot windows, format two partitions as HFS+ then in the Windows installer, format the second partition and proceed with Windows installation as usual).

 

Proceed with the install.

 

Installing Clover

 

Once installed, boot the system on the USB installer again this time selecting the newly installed Yosemite again issuing the bootflags "-v -no-zf". Go through the post-installation procedure.

 

Once presented with the desktop, launch the Clover installer that you placed on the USB installer and select the following configuration:

 

clover-settings-boot-uefi.jpg?w=300

 

Once Clover is installed, open Clover Configurator. It will ask you to mount the EFI partition. Accept and in the bottom right corner of the presented screen, press "Mount EFI partition". Open up the config.plist file in Clover Configurator and save it to /EFI/CLOVER. Next you will need to copy the OSXaptiodrv file to /EFI/CLOVER/drivers and overwrite the existing one.

 

Next, copy the kernel you patched earlier to /System/Library/Kernels, overwriting the existing one. (or alternatively, set the KernelPM flag in Clover).

 

You will also need to copy FakeSMC.kext from the USB Installer to your install. Either put it in /System/Library/Extensions or in Clover's extensions directory, up to you.

 

Once that is all done, reboot the system without the USB drive and you should now be presented with Clover and you should be able to boot into your Yosemite partition.

 

Power Management

 

Download the probook installer from here and install only the "SSDT Generator", that should get power management working (verify in the IOReg to see if X86PlatformPlugin is listed under the CPU)

 

Where we currently stand

 

  • The following things work:
    • ​Graphics card with full QE/CI (some artefacts may occur)
    • Power management
    • Volume keys (with VoodooPS2Controller)
    • Audio (with VoodooHDA)
    • Microphone
    • Both cameras
    • Battery level with ACPIBatteryManager.kext (no DSDT edits required it seems)
    • Keyboard on the external battery keyboard unit.
    • BCM94352Z
      • wifi works out of the box but better to install FakePCIID_BCM94352Z_as_BCM94360CS2.kext
      • bluetooth requires BTFirmwareUploader.kext
    • SD card reader
  • ​What doesn't work/what hasn't been tested
    • Sleep
    • Default wifi card (will never work)
    • Touchscreen (touchscreen and i2c drivers currently being ported from linux)
    • Brightness changing
    • touchpad on the external battery keyboard unit
    • Many other things that don't come to mind right now

Technical details

 

Graphics card

 

To get the graphics card to work, install FakePCIID.kext and FakePCIID_HD4600_HD4400.kext. Inject a FakeID of 0x0a168086 in Clover. This gives us working QE/CI on the internal display and garbled HDMI output.

 

To get only HDMI output, inject an ig-platform-id of 0x0a260006 and disable injection of EDID. We are still trying to figure out how to get both HDMI and the internal display working at the same time (probably will require a framebuffer patch).

Share this post


Link to post
Share on other sites
Advertisement

One more thing. The touch screen is samsung (according to Dell's driver info) maybe this will help? 

http://www.samsung.com/uk/consumer/pc-peripherals/monitors/design/LS24C770TS/EN

 

I haven't started testing yet. waiting for my WiFi card and SSD to start.

The monitor is indeed Samsung made but the touchscreen digitiser is a Synaptics Clearpad 7500. The issue is that this device is sitting on the I2C bus (and not USB like other digitisers) and I'm not sure what the status of I2C drivers are for osx86.

Share this post


Link to post
Share on other sites

alex,

 

Thanks for the guide and i did get my Venue 11 pro installed.

 

I did take a slightly different path. I had a yosemite USB available that used for a surface pro, i tweaked it to make it work for Venue 11 pro.

I did not want to disable USB 3.0, Speedstep stuff in the bios since i will be using them for Windows 8 boot.

 

So, i took the graphics injection parameters from your config and merged into mine.

Also used the KernelPm flag in clover instead of kernel patch.

All in all this boots with one flag (Kext-dev-mode=1) and the two kext you mentioned in the first post.

 

Attaching my config file.

 

I really need HDMI to work, but seems like that will take some more effort. I have created a binary patch before for HD4000. I need to read up on FrameBufferAzul

 

 

 

 

 

 

config.plist.zip

Share this post


Link to post
Share on other sites

Good to hear its working for you. Nice idea with the kernel flag in clover, completely forgot you could do that.

 

HDMI is possible but you need to enable a port for it on the framebuffer. Its very fiddly though and I've only managed to get it to work (without QE) a handful of times. The internal display refuses to come back on when you remove the HDMI cable on top of that so a lot of work still needs to be done.

 

Update on the touchscreen: I've learned up on the RMI4 spec for the synaptics sensor. I've also figured out how we can communicate with the I2C bus on OS X (we can use xf86i2c and the fakesmc GPU sensors code as a base). I just need to get around to actually writing it out so we can start reading the registers now.

Share this post


Link to post
Share on other sites

Alex,

 

That is awesome. Even touch keyboard functionality like on Surface Pro would be great.

 

I will mess around with the framebuffer more to see how we can get LVDS and the HDMI working properly. Assuming LVDS is what the Venue is using to drive the LCD.

Share this post


Link to post
Share on other sites

Alex,

 

That is awesome. Even touch keyboard functionality like on Surface Pro would be great.

 

I will mess around with the framebuffer more to see how we can get LVDS and the HDMI working properly. Assuming LVDS is what the Venue is using to drive the LCD.

 

The internal display is driven by an eDP according to the EDID info extracted from Windows. I don't think LVDS will work. (displayport/eDP both should work).

Share this post


Link to post
Share on other sites

Made some progress on the HDMI stuff 

 

Internal display works with 0x0D220003

Only HDMI works with 0x0a160000

 

So we need a patch that combines the ports from these two layouts.

 

Will see if i can patch it today/tomorrow.

Share this post


Link to post
Share on other sites

Nice work.

 

Do you mind providing me with a copy of the DSDT from your Venue if it's the i3 model. Most applications are crashing for some reason on mine so I'm unable to extract it fresh from maciasl.

Share this post


Link to post
Share on other sites

Thanks for posting. Since its i5 I wont be able to use it on mine but it was useful. Looking at the DSDT I extracted from before the system went haywire and yours it looks like a lot of OS checks are being done. The majority of them check if Windows Vista/7 or higher is being used and if not, the system disables multiple features. These are what I've discovered so far.

  • Both buses of the I2C, SPI, UART devices
    • By extension, this means the touchscreen (and any other devices sitting on these buses) are disabled.
  • Something to do with the SATA bus, not entirely sure what but it looks like some functionality is disabled
  • Intel sound device - also not sure what this means but it might explain why we're not getting audio (although the soundcard is definitely a realtek device and i recall reading somewhere that it is necessary to modify the AppleHDA.kext to get this device to work)
  • Wake from sleep seems to be disabled (or at least, something to do with wake and the graphics card)
  • capacitive buttons - probably the windows button.
  • memory card reader
  • hardware buttons (volume keys) -these have worked for me in Chameleon though so not sure why exactly is being 'disabled'

 

The Linux guys get around all this because the Linux kernel is masked as Windows 7.

To fix all this, we'll need to do a check for Darwin and mask the system as Windows 7/8. Then we should get access to many more devices (we'll still need drivers for most of them but it will be interesting to see how OS X reacts to all the unlocked buses).

 

Unfortunately I have been unable to produce a working DSDT (before my applications started crashing). I fix all the errors but the system always reboots. I'll try again once I've reinstalled Yosemite.

 

 

I've also noticed that AppleIntelHD5000.kext doesnt seem to be loading which might be affecting the QE. I'll have a look to see if the Clover patch for that kext is correct.

Share this post


Link to post
Share on other sites

Alex,

 

Great info.

 

Found why Appleintelhd5000 kext was not loading. The ID in the config does not match our device id.Once I changed the patch to apply id 0A1E it started loading. Not sure if QE is working though even with it loading.

 

I need to confirm.

Share this post


Link to post
Share on other sites

Alex,

 

Great info.

 

Found why Appleintelhd5000 kext was not loading. The ID in the config does not match our device id.Once I changed the patch to apply id 0A1E it started loading. Not sure if QE is working though even with it loading.

 

I need to confirm.

 

Oh right, I had typed a mistake in the patches and I forgot to upload the newer version of the config.plist. Thanks for reminding me.

 

 

Got the DSDT properly patched now and have gotten all disabled devices enumerated. The touchscreen even appears in IOREG which is a good start for writing the drivers.

Share this post


Link to post
Share on other sites

Can you post your DSDT if possible? I know it is an i3 DSDT. But I will try to fix the errors in mine copying what you have done.

 

I tied various things including a patched Framebuffer but no QE/CI

Share this post


Link to post
Share on other sites

Can you post your DSDT if possible? I know it is an i3 DSDT. But I will try to fix the errors in mine copying what you have done.

 

I tied various things including a patched Framebuffer but no QE/CI

I've attached the DSDT to this post. 

 

Most of the errors should be pretty trivial to fix (ask me if you have any issues) but you'll need the following patch to fix the { } brackets syntax error (fixing it manually corrupted the whole DSDT for me):

into_all method code_regex If\s\(CondRefOf\s\(\\_SB\.PCI0\..*.PS\dX\)\)[^\}]*\} remove_matched;
into method label ADBG replace_content begin // nothing end;

I'll probably start a repo later on to host all the patches needed for the DSDT once we've figured out what else needs fixing.

 

Also, the DSDT I've attached contains the fix to enable all devices if you want to include that too.

 

 

Edit:

 

Not much help yet since sound doesn't work but you can install VoodooPS2Controller.kext to get the volume keys working.

 

Edit2:

 

Sound works OOTB with VoodooHDA.kext. Install that then select the speakers as the default output device in Preferences>Audio

DSDT.zip

Share this post


Link to post
Share on other sites

Alex,

 

Great info.

 

Found why Appleintelhd5000 kext was not loading. The ID in the config does not match our device id.Once I changed the patch to apply id 0A1E it started loading. Not sure if QE is working though even with it loading.

 

I need to confirm.

Just looking back at this, which ID are you referring to? Everything in the config.plist I originally posted seems correct.

Share this post


Link to post
Share on other sites

It's in the kext patching section.

The config was putting I'd 0412 I think instead of 0a1e

 

Config has base64 encoded value. You will have to use clover configurator or unencode the value manually.

 

 

Just looking back at this, which ID are you referring to? Everything in the config.plist I originally posted seems correct.

Share this post


Link to post
Share on other sites

Took a lot of research and turned out in the end the BIOS wasn't powering the I2C device on and I had to do it manually. I now have a preliminary kext that just reads a single register value from the I2C device and outputs it.
 
Can you follow these instructions so I can make sure it's working for you too:

 

First you need to modify the DSDT to allow OS X to enumerate devices disabled by the OEM on OS's that don't match Windows 7/8. Follow the post I wrote in the Surface Pro 3 thread here.
 
Download the attached zip and unzip it to the desktop or somewhere convenient.
 
Open up the Console app and have it ready to copy-paste some readings.
 
Then run the following commands in Terminal:
 

sudo chown -R root:wheel /path/to/kext/VoodooI2C.kext

sudo kextutil -v /path/to/kext/VoodooI2C.kext

 
Switch to console and look for some output that looks like the following:
 

VoodooI2C::Found I2C device XXXXXXX
ACPI Configuration: xxx: xxx
ACPI Configuration: xxx: xxx
ACPI Configuration: xxx: xxx
DW_IC_COMP_TYPE: xxxxxxxx

You should get that output twice for two different I2C devices (the values should all be the same though). Please post the results you get here.
 
Also just to confirm something, go onto IOReg explorer and find the two I2C devices in the IOService list. VoodooI2C should be listed under both devices.
 
To unload the kext, you just have to type the following:
 

sudo kextunload /path/to/kext/VoodooI2C.kext

VoodooI2C.kext.zip

Share this post


Link to post
Share on other sites

alex,

 

I will give it a shot in the next hour or so.

 

I have not create a DSDT for my system yet. But will try to do that first and then give this a shot.

Share this post


Link to post
Share on other sites

Sorry for the long wait. Here is what i captured from the console log

 

12/9/14 1:50:55.000 PM kernel[0]: VoodooI2C::Found I2C device INT33C2

12/9/14 1:50:55.000 PM kernel[0]: VoodooI2C::Found I2C device INT33C3

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1b0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1fb

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1b0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1fb

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x48

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0xa0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: DW_IC_COMP_TYPE: 0x44570140

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x48

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0xa0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: DW_IC_COMP_TYPE: 0x44570140

Share this post


Link to post
Share on other sites

Sorry for the long wait. Here is what i captured from the console log

 

12/9/14 1:50:55.000 PM kernel[0]: VoodooI2C::Found I2C device INT33C2

12/9/14 1:50:55.000 PM kernel[0]: VoodooI2C::Found I2C device INT33C3

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1b0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1fb

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1b0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x1fb

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: SSCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x48

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0xa0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: DW_IC_COMP_TYPE: 0x44570140

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x48

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0xa0

12/9/14 1:50:55.000 PM kernel[0]: ACPI Configuration: FMCN: 0x09

12/9/14 1:50:55.000 PM kernel[0]: DW_IC_COMP_TYPE: 0x44570140

Cheers, that's exactly what I needed. It's working for you as I expected so I'll have basic touch screen support working soon hopefully.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×