You are hereMacbook Pro Cirrus Logic CS4206A XP Driver

Macbook Pro Cirrus Logic CS4206A XP Driver


Modified Driver for Windows XP

This driver also works in 32-bit versions of Windows Vista and Windows 7, however there is a newer driver set where the Vista driver seems to be fixed. Windows XP driver 1.0.0.32 is not fixed, while 1.0.0.38 appears to fix audio playback but not recording. New drivers are available from Cirrus Logic.

There are two variants of the driver included:

  • Cirrus Logic High Definition Audio [MacBook]
  • Cirrus Logic High Definition Audio [MacBook, No S/PDIF Out]

Both versions enable the midrange speaker and corrects the volume. The "No S/PDIF" version also turns off the S/PDIF optical output.

Installation of the modified driver follows standard procedure: In Device Manager, Update Driver for the Cirrus Logic High Definition Audio device. Don't let Windows search for or do anything automatically. Manually choose to the driver from a list, and use the "Have Disk..." button.

Summary of Changes

This driver is a modification of clhdaud.sys version 1.0.0.13:

  • Enables the third (midrange) speaker in the MacBook Pro.
  • Removes the -16dB volume limit on the speakers, and applies it to the headphone output instead.
  • The "No S/PDIF" variant turns off S/PDIF optical output. (New on Aug. 8)
  • Fixes recording issues for most sample rates in Windows XP (except 96 kHz). (New in 1.0.0.13b, Oct. 27, 2009)
  • The recording problem isn't completely fixed in neither version b nor c. If 1.0.0.13b (96 kHz) doesn't work, try 48 kHz instead. (1.0.0.13c only, Nov. 1, 2009)

Description

As per a thread on Apple Discussions (Very Poor Volume Output - Windows XP), Apple/Cirrus Logic appears to have shipped incorrectly-configured drivers for the MacBook Pro's audio device in Windows XP. Windows Vista uses a different driver and has its own independent set of problems.

In the Windows XP driver, there are two causes of low audio volume:

  1. The MacBook Pro has three speakers. The midrange speaker was not enabled.
  2. The speaker amplifier gain is scaled by -16 dB in software, while the headphone amplifier gain isn't.

The modifications to the 1.0.0.13 driver addresses these two issues. (Aug. 8, 2009)

The driver also attempts to correct recording issues (1.0.0.13b, Oct. 27). When recording, depending on the sample rate used, the driver has been observed to up-sample the received audio, returning 2x or 4x as much data as an application expects, leading to distorted audio. Version 1.0.0.13b corrects two instances of buffer overruns in the driver, resulting in most sample rates working correctly.

In the IMiniportWaveCyclic::NewStream handler, the driver rejects requests for new streams for sample rates it does not like. Oddly enough, sample rates that NewStream declares legal will record incorrectly. Version 1.0.0.13b accepts only 96 kHz as a valid sample rate, but this seems to fail in Vista. 1.0.0.13c accepts only 48 kHz instead, which I hope will at least partially work in Vista.

Due to popular demand, the "No S/PDIF" variant also turns off the digital optical output (red light in the MacBook's headphone port). It will remain disabled even if an optical cable were plugged into the headphone port: The jack detection routine does not control the optical output. The optical input should still be enabled, but I haven't tested it.

This modification of the driver has been tested on the following machines:

  • MacBook Pro MC118LL/A (15")

Use at your own risk. Without the driver's source code, I could not ensure that the modifications did not introduce subtle side effects.

Previous Versions

Hardware Details

Some observations that may be useful for writing drivers for the CS4206A on a MacBook Pro:

  • The XP driver sets two of the four GPIO pins to output '1' (0xa for direction[717], data[715], and enable[716]). Pin[3] turns on and off the midrange speaker. I haven't observed any effects from toggling pin[1].
  • There are DACs(?) at Node ID 2, 3, 4, and 8. These drive the headphone port, internal midrange speaker (right channel only), two internal stereo high-frequency speakers, and digital output, respectively. The XP driver sets the channel/stream ID[706] and stream format[2xx] for all of these nodes when playing audio. (Unmodified original driver did not set them for NID 3).
  • The ADC for the microphone has Node ID 6. 5 seems to be for the Line input, while 7 appears to be the digital input.
  • Enabling/disabling S/PDIF output is done using verb 70D (set digital converter control) on NID 8

The Intel High Definition Audio specification can be found here.