STRUCT DPLL_DATA(9)
π¦ struct dpll_data(9) π¦
okay bestie, welcome to the Kernel API Manual page for struct dpll_data β literally the DPLL registers and integration data. DPLL? yes. Registers? yes. Integration data? yes. It's giving hardware-core main character energy π and we're gonna walk through every single field together, no cap.
β¨ NAME β¨
struct dpll_data β DPLL registers and integration data π
πΈ SYNOPSIS πΈ
okay so here's the whole struct, and yes it's long, but every field is important, periodt:
struct dpll_data {
struct clk_omap_reg mult_div1_reg;
u32 mult_mask;
u32 div1_mask;
struct clk_hw *clk_bypass;
struct clk_hw *clk_ref;
struct clk_omap_reg control_reg;
u32 enable_mask;
unsigned long last_rounded_rate;
u16 last_rounded_m;
u8 last_rounded_m4xen;
u8 last_rounded_lpmode;
u16 max_multiplier;
u8 last_rounded_n;
u8 min_divider;
u16 max_divider;
unsigned long max_rate;
u8 modes;
struct clk_omap_reg autoidle_reg;
struct clk_omap_reg idlest_reg;
u32 autoidle_mask;
u32 freqsel_mask;
u32 idlest_mask;
u32 dco_mask;
u32 sddiv_mask;
u32 dcc_mask;
unsigned long dcc_rate;
u32 lpmode_mask;
u32 m4xen_mask;
u8 auto_recal_bit;
u8 recal_en_bit;
u8 recal_st_bit;
struct clk_omap_reg ssc_deltam_reg;
struct clk_omap_reg ssc_modfreq_reg;
u32 ssc_deltam_int_mask;
u32 ssc_deltam_frac_mask;
u32 ssc_modfreq_mant_mask;
u32 ssc_modfreq_exp_mask;
u32 ssc_enable_mask;
u32 ssc_downspread_mask;
u32 ssc_modfreq;
u32 ssc_deltam;
bool ssc_downspread;
u8 flags;
};
π MEMBERS π
okay so here's the entire roster, and yes every one of these is iconic in its own way:
mult_div1_regβ the register containing the DPLL M and N bitfields πmult_maskβ mask of the DPLL M bitfield inmult_div1_regβ¨div1_maskβ mask of the DPLL N bitfield inmult_div1_regclk_bypassβstruct clk_hwpointer to the clock's bypass clock input π¦clk_refβstruct clk_hwpointer to the clock's reference clock inputcontrol_regβ register containing the DPLL mode bitfieldenable_maskβ mask of the DPLL mode bitfield incontrol_reglast_rounded_rateβ cache of the last rate result ofomap2_dpll_determine_rate(iykyk)last_rounded_mβ cache of the last M result ofomap2_dpll_determine_ratelast_rounded_m4xenβ cache of the last M4X result ofomap4_dpll_regm4xen_determine_ratelast_rounded_lpmodeβ cache of the last lpmode result ofomap4_dpll_lpmode_recalcmax_multiplierβ maximum valid non-bypass multiplier value (actual)last_rounded_nβ cache of the last N result ofomap2_dpll_determine_ratemin_dividerβ minimum valid non-bypass divider value (actual)max_dividerβ maximum valid non-bypass divider value (actual)max_rateβ maximum clock rate for the DPLLmodesβ possible values ofenable_maskautoidle_regβ register containing the DPLL autoidle mode bitfieldidlest_regβ register containing the DPLL idle status bitfieldautoidle_maskβ mask of the DPLL autoidle mode bitfield inautoidle_regfreqsel_maskβ mask of the DPLL jitter correction bitfield incontrol_regidlest_maskβ mask of the DPLL idle status bitfield inidlest_regdcc_maskβ mask of the DPLL DCC correction bitfieldmult_div1_regdcc_rateβ rate atleast which DCCdcc_maskmust be set (yes, "atleast" is literally what the original says β we're not fixing it π)lpmode_maskβ mask of the DPLL low-power mode bitfield incontrol_regm4xen_maskβ mask of the DPLL M4X multiplier bitfield incontrol_regauto_recal_bitβ bitshift of the driftguard enable bit incontrol_regrecal_en_bitβ bitshift of thePRM_IRQENABLE_*bit for recalibration IRQsrecal_st_bitβ bitshift of thePRM_IRQSTATUS_*bit for recalibration IRQsssc_deltam_regβ register containing the DPLL SSC frequency spreadingssc_modfreq_regβ register containing the DPLL SSC modulation frequencyssc_modfreq_mant_maskβ mask of the mantissa component inssc_modfreq_regssc_modfreq_exp_maskβ mask of the exponent component inssc_modfreq_regssc_enable_maskβ mask of the DPLL SSC enable bit incontrol_regssc_downspread_maskβ mask of the DPLL SSC low frequency only bit incontrol_regssc_modfreqβ the DPLL SSC frequency modulation in kHzssc_deltamβ the DPLL SSC frequency spreading in permille (10th of percent)ssc_downspreadβ require the only low frequency spread of the DPLL in SSC modeflagsβ DPLL type/features (see below π)
quick heads up bestie: the struct in the synopsis also has dco_mask, sddiv_mask, ssc_deltam_int_mask and ssc_deltam_frac_mask β but the members list doesn't describe them, so we're not gonna invent anything, periodt π
π DESCRIPTION π
Possible values for flags: DPLL_J_TYPE: "J-type DPLL" (only some 36xx, 4xxx DPLLs) β¨
freqsel_mask is only used on the OMAP34xx family and AM35xx.
XXX Some DPLLs have multiple bypass inputs, so it's not technically correct to only have one clk_bypass pointer. π
XXX The runtime-variable fields (last_rounded_rate,last_rounded_m,last_rounded_n) should be separated from the runtime-fixed fields and placed into a different structure, so that the runtime-fixed data can be placed into read-only space. π
β SEE ALSO β
- Kernel file
./include/linux/clk/ti.h struct clk_omap_reg(9)struct clk_hw_omap_ops(9)struct clk_hw_omap(9)struct ti_clk_ll_ops(9)
and that's the whole page bestie β Kernel API Manual, source path ./include/linux/clk, dated October 2026. slay π
β¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms