Skip to content

Add USB brightness control for older Apple displays - #1918

Open
minimum91 wants to merge 1 commit into
MonitorControl:mainfrom
minimum91:usb-apple-displays
Open

minimum91 wants to merge 1 commit into
MonitorControl:mainfrom
minimum91:usb-apple-displays

Conversation

@minimum91

Copy link
Copy Markdown

This adds hardware brightness control for older Apple displays that current macOS doesn't drive, such as the ADC Apple Studio and Cinema Displays. They don't support DDC, so today MonitorControl can only dim them in software.

These displays implement the USB Monitor Control class instead: brightness is a HID feature control (usage page 0x82, usage 0x10) on their USB connection. macOS's own AppleUSBDisplays driver controls later Apple displays this way, but it explicitly excludes the ADC-era product IDs (for example 0x9215 to 0x9219).

Changes

  • USBDisplayControl.swift (new): finds Apple USB monitors (vendor 0x05AC, usage page 0x80) that have a brightness control. It reads and writes that control through IOKit HID, on the usual 0–100 DDC scale.
  • DisplayManager.updateUSBDisplayControls(): pairs each Apple OtherDisplay with its USB connection.
    • It matches by EDID model number first, which is normally the USB product ID.
    • Otherwise, when exactly one display is left over, it gets the one USB display that isn't driven by AppleUSBDisplays.
    • It runs from configure() and after wake, next to updateArm64AVServices().
  • OtherDisplay: a display with a usbControl counts as hardware-controlled.
    • Brightness reads and writes go over USB instead of DDC.
    • Contrast and volume are marked unavailable, since these displays only offer brightness.
  • Settings: such displays show "Hardware (USB)".

Displays without such a USB connection behave exactly as before. Only Apple displays that already end up as OtherDisplay are considered; displays that macOS handles are skipped.

Testing

Tested on macOS 12 (Monterey) with two displays connected at the same time:

  • an Apple Studio Display 15" (ADC, 0x9215), connected through Apple's DVI to ADC adapter
  • an Apple Cinema HD Display (0x9221)

Results:

  • The Studio Display is controlled over USB. The menu slider, the brightness keys and the OSD all adjust its backlight.
  • The Cinema HD Display, which macOS drives natively, keeps working as before.

The other ADC models (Studio Display 17", Cinema Display 20" and 23") use the same USB protocol but haven't been tested.

🤖 Generated with Claude Code

Older Apple displays such as the ADC Studio and Cinema Displays don't
support DDC and current macOS doesn't drive them, so MonitorControl
could only dim them in software. They implement the USB Monitor Control
class instead: brightness is a HID feature control (usage page 0x82,
usage 0x10) on their USB connection.

USBDisplayControl reads and writes that control through IOKit HID,
presenting it on the usual 0-100 DDC scale. DisplayManager pairs each
Apple display that ends up as an OtherDisplay with its USB connection,
by EDID model number (normally the USB product ID), or, when a single
display is left over, with the one USB display that macOS doesn't drive
itself. A paired display uses USB for brightness instead of DDC, and
contrast and volume are marked unavailable since the USB control only
offers brightness. Settings shows it as "Hardware (USB)". Displays
without such a USB connection behave exactly as before.

Tested on macOS 12 with an Apple Studio Display 15" (ADC, via Apple's
DVI to ADC adapter) next to an Apple Cinema HD Display.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@waydabber waydabber added the AI contribution / fork recommendation Unplanned PR (typically AI) with improvements which may be of interest to the community label Sep 26, 2026
@waydabber

Copy link
Copy Markdown
Member

This is a great addition! Although I have no way of testing it. Will keep it here as a fork recommendation for those who have such displays.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

AI contribution / fork recommendation Unplanned PR (typically AI) with improvements which may be of interest to the community

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants