STRUCT STM32_SAI_SUB_DATA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

okay so bestie, welcome to the Kernel API Manual page for struct stm32_sai_sub_data β€” literally the private data of the SAI sub block, aka block A or block B πŸ’…βœ¨. no cap, that's the whole name vibe.

✨ SYNOPSIS ✨

here's the struct in all its glory β€” every field exactly as written, bestie. don't let the wrap on set_sai_ck_rate jump-scare you 😭:

       struct stm32_sai_sub_data {
           struct platform_device *pdev;
           struct regmap *regmap;
           const struct regmap_config *regmap_config;
           struct snd_dmaengine_dai_dma_data dma_params;
           struct snd_soc_dai_driver cpu_dai_drv;
           struct snd_soc_dai *cpu_dai;
           struct snd_pcm_substream *substream;
           struct stm32_sai_data *pdata;
           struct device_node *np_sync_provider;
           struct clk *sai_ck;
           struct clk *sai_mclk;
           dma_addr_t phys_addr;
           unsigned int mclk_rate;
           unsigned int id;
           int dir;
           bool master;
           bool spdif;
           bool sai_ck_used;
           int fmt;
           int sync;
           int synco;
           int synci;
           int fs_length;
           int slots;
           int slot_width;
           int slot_mask;
           int data_size;
           unsigned int spdif_frm_cnt;
           struct snd_aes_iec958 iec958;
           struct mutex ctrl_lock;
           spinlock_t irq_lock;
           int (*set_sai_ck_rate)(struct stm32_sai_sub_data *sai, unsigned int
       rate);
           void (*put_sai_ck_rate)(struct stm32_sai_sub_data *sai);
        };

🌸 Members 🌸

field-by-field, no skipping, because we respect the kernel tea β˜•:

  • pdev β€” device data pointer. the device situation, iconic.
  • regmap β€” SAI register map pointer.
  • regmap_config β€” SAI sub block register map configuration pointer.
  • dma_params β€” dma configuration data for rx or tx channel.
  • cpu_dai_drv β€” DAI driver data pointer.
  • cpu_dai β€” DAI runtime data pointer.
  • substream β€” PCM substream data pointer.
  • pdata β€” SAI block parent data pointer.
  • np_sync_provider β€” synchronization provider node.
  • sai_ck β€” kernel clock feeding the SAI clock generator.
  • sai_mclk β€” master clock from SAI mclk provider.
  • phys_addr β€” SAI registers physical base address.
  • mclk_rate β€” SAI block master clock frequency (Hz). set at init.
  • id β€” SAI sub block id corresponding to sub-block A or B.
  • dir β€” SAI block direction (playback or capture). set at init.
  • master β€” SAI block mode flag. (true=master, false=slave) set at init.
  • spdif β€” SAI S/PDIF iec60958 mode flag. set at init.
  • sai_ck_used β€” flag set while exclusivity on SAI kernel clock is active.
  • fmt β€” SAI block format. relevant only for custom protocols. set at init.
  • sync β€” SAI block synchronization mode. (none, internal or external).
  • synco β€” SAI block ext sync source (provider setting). (none, sub-block A/B).
  • synci β€” SAI block ext sync source (client setting). (SAI sync provider index).
  • fs_length β€” frame synchronization length. depends on protocol settings.
  • slots β€” rx or tx slot number.
  • slot_width β€” rx or tx slot width in bits.
  • slot_mask β€” rx or tx active slots mask. set at init or at runtime.
  • data_size β€” PCM data width. corresponds to PCM substream width.
  • spdif_frm_cnt β€” S/PDIF playback frame counter.
  • iec958 β€” iec958 data.
  • ctrl_lock β€” control lock.
  • irq_lock β€” prevent race condition with IRQ.
  • set_sai_ck_rate β€” set SAI kernel clock rate.
  • put_sai_ck_rate β€” put SAI kernel clock rate.

🌈 SEE ALSO 🌈

  • Kernel file ./sound/soc/stm/stm32_sai_sub.c β€” go read the source, bestie, it's giving main character energy πŸ”₯.

okay that's the whole struct stm32_sai_sub_data(9) situation, bestie 🫢. this page came from source/version ./sound/soc/stm and is dated October 2026 β€” mwah, byeee πŸ’‹βœ¨.

πŸ“¦ where this page comes from