drm_dp_dpcd_write(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’« drm_dp_dpcd_write(9) β€” the Kernel API Manual, bestie edition πŸ’«

Okay so picture this: you're deep in the kernel, you've got a DisplayPort AUX channel, and you just need to shove a bunch of bytes into DPCD. That's literally this function. Welcome to the drm_dp_dpcd_write page from the Kernel API Manual β€” buckle up, it's a short one but it's giving essential. πŸ¦‹


✨ NAME ✨

drm_dp_dpcd_write β€” write a series of bytes to the DPCD, no cap πŸ’…


🌸 SYNOPSIS 🌸

ssize_t drm_dp_dpcd_write (struct drm_dp_aux *aux , unsigned int offset
, void *buffer , size_t size );

Look at that signature. Gorgeous. Iconic. Let's break it down. ✨


πŸŽ€ ARGUMENTS πŸŽ€

  • aux β€” the DisplayPort AUX channel, and yes it can be SST or MST, both are welcome here 🫢
  • offset β€” the address of the (first) register you're writing to, like the starting point of your little byte journey
  • buffer β€” the buffer holding the values you wanna write, aka the payload, aka the whole point
  • size β€” how many bytes are chillin' in buffer

πŸ’– DESCRIPTION πŸ’–

So here's the tea. On success you get back the number of bytes transferred. On failure you get a negative error code β€” classic.

Let's talk errors, because they matter and I refuse to gloss over them:

  • -EIO comes back if the request was NAKed by the sink, or if the retry count was exceeded 😭
  • -EPROTO comes back if not all bytes were transferred. Partial transfer? Not on this function's watch.
  • Errors from the underlying AUX channel transfer function get propagated straight to the caller β€” with one exception: -EBUSY, which causes the transaction to be retried instead of being passed along. She's persistent. πŸ’…
Also, lowkey important: in most of the cases you want to use drm_dp_dpcd_write_data instead. Not me telling you the sequel is better, but like… the docs are telling you the sequel is better. πŸ™ˆ

πŸ”₯ SEE ALSO πŸ”₯

This list is long and honestly kind of iconic β€” every single one of these, bestie, no skipping:

Kernel file ./drivers/gpu/drm/display/drm_dp_helper.c dp helpers(9), drm_dp_phy_name(9), drm_dp_lttpr_wake_timeout_setup(9), dp helpers(9), drm_dp_dpcd_probe(9), drm_dp_dpcd_set_powered(9), drm_dp_dpcd_set_probe(9), drm_dp_dpcd_read(9), drm_dp_dpcd_read_link_status(9), drm_dp_dpcd_read_phy_link_status(9), drm_dp_link_power_up(9), drm_dp_link_power_down(9), drm_dp_dpcd_write_payload(9), drm_dp_dpcd_clear_payload(9), drm_dp_dpcd_poll_act_handled(9), drm_dp_downstream_is_type(9), drm_dp_downstream_is_tmds(9), drm_dp_send_real_edid_checksum(9), drm_dp_read_dpcd_caps(9), drm_dp_read_downstream_info(9), drm_dp_downstream_max_dotclock(9), drm_dp_downstream_max_tmds_clock(9), drm_dp_downstream_min_tmds_clock(9), drm_dp_downstream_max_bpc(9), drm_dp_downstream_420_passthrough(9), drm_dp_downstream_444_to_420_conversion(9), drm_dp_downstream_rgb_to_ycbcr_conversion(9), drm_dp_downstream_mode(9), drm_dp_downstream_id(9), drm_dp_downstream_debug(9), drm_dp_subconnector_type(9), drm_dp_set_subconnector_property(9), drm_dp_read_sink_count_cap(9), drm_dp_read_sink_count(9), drm_dp_remote_aux_init(9), drm_dp_aux_init(9), drm_dp_aux_register(9), drm_dp_aux_unregister(9), drm_dp_psr_setup_time(9), drm_dp_start_crc(9), drm_dp_stop_crc(9), drm_dp_read_desc(9), drm_dp_dump_lttpr_desc(9), drm_dp_dsc_sink_bpp_incr(9), drm_dp_dsc_slice_count_to_mask(9), drm_dp_dsc_sink_slice_count_mask(9), drm_dp_dsc_sink_max_slice_count(9), drm_dp_dsc_sink_line_buf_depth(9), drm_dp_dsc_sink_supported_input_bpcs(9), drm_dp_dsc_sink_max_slice_throughput(9), drm_dp_dsc_branch_max_overall_throughput(9), drm_dp_dsc_branch_max_line_width(9), drm_dp_read_lttpr_common_caps(9), drm_dp_read_lttpr_phy_caps(9), drm_dp_lttpr_count(9), drm_dp_lttpr_max_link_rate(9), drm_dp_lttpr_set_transparent_mode(9), drm_dp_lttpr_init(9), drm_dp_lttpr_max_lane_count(9), drm_dp_lttpr_voltage_swing_level_3_supported(9), drm_dp_lttpr_pre_emphasis_level_3_supported(9), drm_dp_get_phy_test_pattern(9), drm_dp_set_phy_test_pattern(9), drm_dp_as_sdp_supported(9), drm_dp_vsc_sdp_supported(9), drm_dp_vsc_sdp_pack(9), drm_dp_get_pcon_max_frl_bw(9), drm_dp_pcon_frl_prepare(9), drm_dp_pcon_is_frl_ready(9), drm_dp_pcon_frl_configure_1(9), drm_dp_pcon_frl_configure_2(9), drm_dp_pcon_reset_frl_config(9), drm_dp_pcon_frl_enable(9), drm_dp_pcon_hdmi_link_active(9), drm_dp_pcon_hdmi_link_mode(9), drm_dp_pcon_hdmi_frl_link_error_count(9), drm_dp_pcon_pps_default(9), drm_dp_pcon_pps_override_buf(9), drm_edp_backlight_set_level(9), drm_edp_backlight_enable(9), drm_edp_backlight_disable(9), drm_edp_backlight_init(9), drm_panel_dp_aux_backlight(9), drm_dp_link_symbol_cycles(9), drm_dp_bw_overhead(9), drm_dp_bw_channel_coding_efficiency(9), drm_dp_max_dprx_data_rate(9)

Like I said. A lot. All of them. Every single one made it in. πŸ‘‘


And that's the whole page, bestie! 🌈 This lil' cutie lives in ./drivers/gpu/drm/display, it's dated October 2026, and that's the Kernel API Manual signing off. Go write some bytes. Slay. πŸ’–βœ¨

πŸ“¦ where this page comes from