STRUCT OPP_TABLE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

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

πŸŽ€ NAME πŸŽ€

struct opp_table β€” Device opp structure. Okay bestie, this is the Kernel API Manual page for struct opp_table(9) β€” yes, the manual name is folded in right here because we’re cute. πŸ’–

✨ SYNOPSIS ✨

       struct opp_table {
           struct list_head node, lazy;
           struct blocking_notifier_head head;
           struct list_head dev_list;
           struct list_head opp_list;
           struct kref kref;
           struct mutex lock;
           struct device_node *np;
           unsigned long clock_latency_ns_max;
           unsigned int voltage_tolerance_v1;
           unsigned int parsed_static_opps;
           enum opp_table_access shared_opp;
           unsigned long current_rate_single_clk;
           struct dev_pm_opp *current_opp;
           struct dev_pm_opp *suspend_opp;
           struct opp_table **required_opp_tables;
           struct device **required_devs;
           unsigned int required_opp_count;
           unsigned int *supported_hw;
           unsigned int supported_hw_count;
           const char *prop_name;
           config_clks_t config_clks;
           struct clk **clks;
           struct clk *clk;
           int clk_count;
           config_regulators_t config_regulators;
           struct regulator **regulators;
           int regulator_count;
           struct icc_path **paths;
           unsigned int path_count;
           bool enabled;
           bool is_genpd;
         #ifdef CONFIG_DEBUG_FS;
           struct dentry *dentry;
           char dentry_name[NAME_MAX];
         #endif;
        };

πŸ¦‹ Members πŸ¦‹

  • node β€” the table node, and it contains the devices with OPPs that have been registered. Once nodes are added, they are not modified in this table. Slay, stable data. 🫢
  • head β€” notifier head to notify the OPP availability changes. It’s giving β€œping the group chat when availability shifts.” ✨
  • dev_list β€” list of devices that share these OPPs. Besties sharing the same OPP table, iconic. πŸ’–
  • opp_list β€” table of opps. Literally the OPP lineup. πŸ‘‘
  • kref β€” for reference count of the table. Gotta keep track of who’s still holding on. πŸ’…
  • lock β€” mutex protecting the opp_list and dev_list. No chaotic edits, periodt. πŸ”’
  • np β€” struct device_node pointer for opp’s DT node. Tree data, but make it pointer. 🌳
  • clock_latency_ns_max β€” Max clock latency in nanoseconds. Tiny numbers, big vibes. ⏱️
  • voltage_tolerance_v1 β€” In percentage, for v1 bindings only. Vintage binding energy. πŸŽ€
  • parsed_static_opps β€” Count of devices for which OPPs are initialized from DT. Counting the DT girlies. 🧚
  • shared_opp β€” OPP is shared between multiple devices. Sharing is caring, no cap. πŸ’ž
  • current_rate_single_clk β€” Currently configured frequency for single clk. The current single-clk rate, bestie. 🌟
  • current_opp β€” Currently configured OPP for the table. Main character OPP of the moment. 🌈
  • suspend_opp β€” Pointer to OPP to be used during device suspend. Nap-time OPP. 😴
  • required_opp_tables β€” List of device OPP tables that are required by OPPs in this table. The required squad. πŸ«‚
  • required_devs β€” List of devices for required OPP tables. Devices tied to the required tables. πŸ“±
  • required_opp_count β€” Number of required devices. Count ’em. πŸ”’
  • supported_hw β€” Array of version number to support. Hardware version lineup. πŸ› οΈ
  • supported_hw_count β€” Number of elements in supported_hw array. Array length, obviously. ✨
  • prop_name β€” A name to postfix to many DT properties, while parsing them. A little suffix situation. 🏷️
  • config_clks β€” Platform specific config_clks callback. Platform-specific callback, we love to see it. πŸŽ›οΈ
  • clks β€” Device’s clock handles, for multiple clocks. Plural clocks, plural handles. ⌚
  • clk β€” Device’s clock handle, for single clock. Singular clock, singular handle. ⏰
  • clk_count β€” Number of clocks. One, two, maybe more. πŸ”’
  • config_regulators β€” Platform specific config_regulators callback. Another platform-specific callback, and yes it’s serving. ⚑
  • regulators β€” Supply regulators. Power supply regulators, not vibes regulators. πŸ”Œ
  • regulator_count β€” Number of power supply regulators. Its value can be -1 (uninitialized), 0 (no opp-microvolt property) or > 0 (has opp-microvolt property). Very specific, very demure. πŸ’€
  • paths β€” Interconnect path handles. Path handles for interconnect, iykyk. πŸ›€οΈ
  • path_count β€” Number of interconnect paths. Count the paths. πŸŒ‰
  • enabled β€” Set to true if the device’s resources are enabled/configured. True means enabled/configured, bestie. βœ…
  • is_genpd β€” Marks if the OPP table belongs to a genpd. genpd membership check. πŸͺͺ
  • dentry β€” debugfs dentry pointer of the real device directory (not links). Real directory, not a link. πŸ”
  • dentry_name β€” Name of the real dentry. The real dentry’s name. 🏷️
Tiny heads-up: the synopsis has struct list_head node, lazy;, but the original member list only describes node. I’m not inventing lore for lazy β€” we keep the facts exactly as they are. πŸ™ˆ

πŸ’– Description πŸ’–

This is an internal data structure maintaining the link to opps attached to a device. It is not meant to be shared to users, because it is meant for book keeping and is private to the OPP library. So no, bestie, this is not a user-facing structure β€” it’s internal business. Periodt. πŸ”₯

🌈 SEE ALSO 🌈

  • Kernel file ./drivers/opp/opp.h β€” the source file, bestie. πŸ“
  • struct opp_config_data(9) β€” another one on the guest list. 🎟️
  • struct dev_pm_opp_icc_bw(9) β€” ICC bandwidth struct, say that three times fast. 🌊
  • struct dev_pm_opp(9) β€” the OPP struct itself. ⭐
  • struct opp_device(9) β€” the OPP device struct. πŸ“±

Sourced from ./drivers/opp, dated October 2026, and this page is struct opp_table(9) β€” bye bestie, stay book-keeping and private to the OPP library! πŸ«Άβœ¨πŸ’…

πŸ“¦ where this page comes from