STRUCT SPMI_PMIC_ARB_BUS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct spmi_pmic_arb_bus(9)

okay so bestie, welcome to the Kernel API Manual β€” today's main character is struct spmi_pmic_arb_bus, the SPMI PMIC Arbiter Bus object. yes it's a struct, yes it's iconic, no you cannot skip it 🫢


✨ NAME ✨

struct spmi_pmic_arb_bus β€” the SPMI PMIC Arbiter Bus object, fr fr 🌸


πŸŽ€ SYNOPSIS πŸŽ€

like, here's the whole vibe, character for character, do not touch:

struct spmi_pmic_arb_bus {
    struct spmi_pmic_arb    *pmic_arb;
    struct irq_domain       *domain;
    void __iomem            *intr;
    void __iomem            *cnfg;
    void __iomem            *apid_owner;
    struct spmi_controller  *spmic;
    raw_spinlock_t lock;
    u16 base_apid;
    int apid_count;
    u32 *mapping_table;
    unsigned long mapping_table_valid[BITS_TO_LONGS(
PMIC_ARB_MAX_PERIPHS)];
    u16 *ppid_to_apid;
    u16 last_apid;
    struct apid_data        *apid_data;
    u16 min_apid;
    u16 max_apid;
    int irq;
    u8 id;
 };

she's got range, she's got pointers, she's got a bitmap. periodt πŸ’…


🌈 Members 🌈

time for the member-by-member breakdown, iykyk β€” every single one, no skipping πŸ”₯

  • pmic_arb β€” the SPMI PMIC Arbiter that this bus belongs to. like, her home base πŸ’–
  • domain β€” the irq domain object for the PMIC IRQ domain ✨
  • intr β€” address of the SPMI interrupt control registers. yes, an address, and yes it's void __iomem πŸŽ€
  • cnfg β€” address of the PMIC Arbiter configuration registers πŸ¦‹
  • apid_owner β€” on v8: address of the APID owner mapping table registers πŸ‘‘
  • spmic β€” the spmi controller registered for this bus 🌸
  • lock β€” lock to synchronize accesses. raw_spinlock_t, no cap, she's keeping things orderly πŸ’…
  • base_apid β€” on v7 and v8: minimum APID associated with the particular SPMI bus instance ⭐
  • apid_count β€” on v5, v7 and v8: number of APIDs associated with the particular SPMI bus instance 🌟
  • mapping_table β€” in-memory copy of the PPID -> APID mapping table 🧚
  • mapping_table_valid β€” bitmap containing valid-only periphs βœ…
  • ppid_to_apid β€” in-memory copy of the PPID -> APID mapping table (yes bestie, this is a second in-memory copy of the PPID -> APID mapping table, that's literally what it says, i don't make the rules 😭)
  • last_apid β€” Highest value APID in use πŸ”₯
  • apid_data β€” Table of data for all APIDs πŸ“
  • min_apid β€” minimum APID (used for bounding IRQ search) πŸ”
  • max_apid β€” maximum APID πŸ’œ
  • irq β€” the PMIC ARB interrupt πŸ™ˆ
  • id β€” unique ID of the bus, her little signature πŸŽ€
ngl the base_apid / apid_count version tags? lowkey important. v5, v7, v8 are doing different things and the docs said what they said, so i'm passing it along verbatim πŸ’€

πŸ¦‹ SEE ALSO πŸ¦‹

go read these next, bestie, they're all in the kernel file ./drivers/spmi/spmi-pmic-arb.c:


and that's the page!! πŸ’– this little beauty lives in ./drivers/spmi, dated October 2026, and it's filed under struct spmi_pmic_arb_bus(9) in the Kernel API Manual. slay, go read some C πŸ§šβœ¨πŸŽ€

πŸ“¦ where this page comes from