STRUCT DPU_HW_PINGPONG_OPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct dpu_hw_pingpong_ops(9) πŸ’…

okay so this is a page from the Kernel API Manual bestie, and it's literally the whole interface to the pingpong Hw driver functions 🫢 (yes, pingpong, we love a whimsical subsystem). One thing you need to internalize before anything else: the assumption baked into all of this is that these functions will be called after clocks are enabled. That's the vibe check. No clocks, no calls. Periodt.


✨ NAME ✨

struct dpu_hw_pingpong_ops β€” the interface to the pingpong Hw driver functions, with the assumption being that these functions will be called after clocks are enabled. 🌸


πŸ¦‹ SYNOPSIS πŸ¦‹

struct dpu_hw_pingpong_ops {
    int (*enable_tearcheck)(struct dpu_hw_pingpong *pp, struct dpu_hw_tear_check *cfg);
    int (*disable_tearcheck)(struct dpu_hw_pingpong *pp);
    int (*connect_external_te)(struct dpu_hw_pingpong *pp, bool enable_external_te);
    u32 (*get_line_count)(struct dpu_hw_pingpong *pp);
    void (*disable_autorefresh)(struct dpu_hw_pingpong *pp, uint32_t encoder_id, u16 vdisplay);
    void (*setup_dither)(struct dpu_hw_pingpong *pp, struct dpu_hw_dither_cfg *cfg);
    int (*enable_dsc)(struct dpu_hw_pingpong *pp);
    void (*disable_dsc)(struct dpu_hw_pingpong *pp);
    int (*setup_dsc)(struct dpu_hw_pingpong *pp);
 };

like… look at her. nine function pointers. main character energy fr fr. πŸ‘‘


πŸŽ€ Members πŸŽ€

  • enable_tearcheck β€” turns on vysnc generation (yes that's genuinely how it's spelled in the header, i'm not fixing it πŸ’€), sets up the init value of the read pointer, and programs the tear check cofiguration (again β€” their spelling, not mine 🫢). it's giving "do three things at once and slay".
  • disable_tearcheck β€” disables the tear check block. bye bestie πŸ‘‹
  • connect_external_te β€” does a read, modify, write to either set or clear listening to external TE. Return: 1 if TE was originally connected, 0 if not, or -ERROR. so like, she answers back. iconic. ✨
  • get_line_count β€” obtains the current vertical line counter. just tells you the number. lowkey useful, highkey humble. πŸ”’
  • disable_autorefresh β€” disables autorefresh if enabled. note the little "if" there, she's conditional and she knows it πŸ’…
  • setup_dither β€” sets up the dither matix for the pingpong block. (matix. matrix's chaotic cousin. love that for us πŸ“)
  • enable_dsc β€” enable DSC πŸ”₯
  • disable_dsc β€” disable DSC πŸ’€
  • setup_dsc β€” setup DSC ⭐

🌈 SEE ALSO 🌈

  • Kernel file ./drivers/gpu/drm/msm/disp/dpu1/dpu_hw_pingpong.h
  • dpu_hw_dither_cfg(9)
  • to_dpu_hw_pingpong(9)

like, go read those too, iykyk πŸ“š


and that's the whole page bestie, no cap. 🧚 this little gem lives at ./drivers/gpu/drm/msm/disp/dpu1, dated October 2026, and it's filed under struct dpu_hw_pingpong_ops(9) β€” go forth and enable those clocks first, mwah πŸ’–πŸŽ€πŸ’œ

πŸ“¦ where this page comes from