STRUCT SI476X_CORE(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

Hii bestie 🫢 this is struct si476x_core(9) from the Kernel API Manual, and it’s literally the internal data structure representing the underlying β€œcore” device that all the MFD cell-devices use. Main-character energy, no cap πŸ’….


✨ SYNOPSIS ✨

Okay so here’s the whole struct, every field exactly where it lives πŸŽ€:

       struct si476x_core {
           struct i2c_client *client;
           struct regmap *regmap;
           int chip_id;
           struct mfd_cell cells[SI476X_MFD_CELLS];
           struct mutex cmd_lock;
           atomic_t users;
           wait_queue_head_t rds_read_queue;
           struct kfifo       rds_fifo;
           struct work_struct rds_fifo_drainer;
           bool rds_drainer_is_working;
           struct mutex       rds_drainer_status_lock;
           wait_queue_head_t command;
           atomic_t cts;
           wait_queue_head_t tuning;
           atomic_t stc;
           struct si476x_power_up_args power_up_parameters;
           enum si476x_power_state power_state;
           struct regulator_bulk_data supplies[4];
           struct gpio_desc *reset;
           struct si476x_pinmux pinmux;
           enum si476x_phase_diversity_mode diversity_mode;
           atomic_t is_alive;
           struct delayed_work status_monitor;
         #define SI476X_WORK_TO_CORE(w) container_of(to_delayed_work(w),
       struct si476x_core,
       status_monitor);
           int revision;
           int rds_fifo_depth;
        };

🫢 Members 🫢

  • client β€” the actual I2C client used to transfer commands to the chip. πŸ’–
  • regmap β€” the regmap for accessing the device registers. ✨
  • chip_id β€” last digit of the chip model (E.g. "1" for SI4761). πŸ‘‘
  • cells β€” MFD cell devices created by this driver. πŸŽ€
  • cmd_lock β€” mutex used to serialize all the requests to the core device. ⚠️ This field should not be used directly! Instead, si476x_core_lock/si476x_core_unlock should be used to get exclusive access to the "core" device. Like, respect the lock etiquette, bestie 😭.
  • users β€” active users counter (used by the radio cell). πŸ’€
  • rds_read_queue β€” wait queue used to wait for RDS data. πŸ¦‹
  • rds_fifo β€” FIFO in which all the RDS data received from the chip is placed. πŸ“
  • rds_fifo_drainer β€” worker that drains the on-chip RDS FIFO. 🧚
  • rds_drainer_is_working β€” flag used for launching only one instance of the rds_fifo_drainer. πŸŽ€
  • rds_drainer_status_lock β€” lock used to guard access to the rds_drainer_is_working variable. πŸ”’
  • command β€” wait queue for waiting on the command completion. πŸ’…
  • cts β€” Clear To Send flag set upon receiving first status with CTS set. 🚦
  • tuning β€” wait queue used for waiting for tune/seek command completion. πŸ“»
  • stc β€” similar to cts, but for the STC bit of the status value. ⭐
  • power_up_parameters β€” parameters used as argument for POWER_UP command when the device is started. πŸ”Œ
  • power_state β€” current power state of the device. ⚑
  • supplies β€” structure containing handles to all power supplies used by the device (NULL ones are ignored). 🌸
  • reset β€” GPIO connected to the RSTB pin of the chip. πŸ“Œ
  • pinmux β€” chip’s configurable pins configuration. πŸŽ›οΈ
  • diversity_mode β€” chip’s role when functioning in diversity mode. 🌈
  • is_alive β€” chip is initialized and active. πŸ‘‘
  • status_monitor β€” polling worker used in polling use case scenario (when IRQ is not available). πŸ‘€
  • revision β€” chip’s running firmware revision number (used for correct command set support). 🧠
  • rds_fifo_depth β€” RDS FIFO size: 20 for IRQ mode or 5 for polling mode. πŸ”₯

🌈 SEE ALSO 🌈

  • Kernel file ./include/linux/mfd/si476x-core.h
  • enum si476x_power_state(9)
  • si476x_core_lock(9)
  • si476x_core_unlock(9)
  • struct si476x_func_info(9)
  • struct si476x_power_down_args(9)
  • enum si476x_tunemode(9)
  • enum si476x_smoothmetrics(9)
  • struct si476x_rds_status_report(9)

Catch you later, bestie πŸ’• β€” this lil page comes from ./include/linux/mfd, dated October 2026, and it’s all about struct si476x_core(9). Periodt πŸŽ€βœ¨

πŸ“¦ where this page comes from