1*607f2c00SIvan Vecera /* SPDX-License-Identifier: GPL-2.0-only */ 2*607f2c00SIvan Vecera 3*607f2c00SIvan Vecera #ifndef _ZL3073X_REF_H 4*607f2c00SIvan Vecera #define _ZL3073X_REF_H 5*607f2c00SIvan Vecera 6*607f2c00SIvan Vecera #include <linux/bitfield.h> 7*607f2c00SIvan Vecera #include <linux/types.h> 8*607f2c00SIvan Vecera 9*607f2c00SIvan Vecera #include "regs.h" 10*607f2c00SIvan Vecera 11*607f2c00SIvan Vecera struct zl3073x_dev; 12*607f2c00SIvan Vecera 13*607f2c00SIvan Vecera /** 14*607f2c00SIvan Vecera * struct zl3073x_ref - input reference state 15*607f2c00SIvan Vecera * @ffo: current fractional frequency offset 16*607f2c00SIvan Vecera * @config: reference config 17*607f2c00SIvan Vecera */ 18*607f2c00SIvan Vecera struct zl3073x_ref { 19*607f2c00SIvan Vecera s64 ffo; 20*607f2c00SIvan Vecera u8 config; 21*607f2c00SIvan Vecera }; 22*607f2c00SIvan Vecera 23*607f2c00SIvan Vecera int zl3073x_ref_state_fetch(struct zl3073x_dev *zldev, u8 index); 24*607f2c00SIvan Vecera 25*607f2c00SIvan Vecera const struct zl3073x_ref *zl3073x_ref_state_get(struct zl3073x_dev *zldev, 26*607f2c00SIvan Vecera u8 index); 27*607f2c00SIvan Vecera 28*607f2c00SIvan Vecera int zl3073x_ref_freq_factorize(u32 freq, u16 *base, u16 *mult); 29*607f2c00SIvan Vecera 30*607f2c00SIvan Vecera /** 31*607f2c00SIvan Vecera * zl3073x_ref_ffo_get - get current fractional frequency offset 32*607f2c00SIvan Vecera * @ref: pointer to ref state 33*607f2c00SIvan Vecera * 34*607f2c00SIvan Vecera * Return: the latest measured fractional frequency offset 35*607f2c00SIvan Vecera */ 36*607f2c00SIvan Vecera static inline s64 37*607f2c00SIvan Vecera zl3073x_ref_ffo_get(const struct zl3073x_ref *ref) 38*607f2c00SIvan Vecera { 39*607f2c00SIvan Vecera return ref->ffo; 40*607f2c00SIvan Vecera } 41*607f2c00SIvan Vecera 42*607f2c00SIvan Vecera /** 43*607f2c00SIvan Vecera * zl3073x_ref_is_diff - check if the given input reference is differential 44*607f2c00SIvan Vecera * @ref: pointer to ref state 45*607f2c00SIvan Vecera * 46*607f2c00SIvan Vecera * Return: true if reference is differential, false if reference is single-ended 47*607f2c00SIvan Vecera */ 48*607f2c00SIvan Vecera static inline bool 49*607f2c00SIvan Vecera zl3073x_ref_is_diff(const struct zl3073x_ref *ref) 50*607f2c00SIvan Vecera { 51*607f2c00SIvan Vecera return !!FIELD_GET(ZL_REF_CONFIG_DIFF_EN, ref->config); 52*607f2c00SIvan Vecera } 53*607f2c00SIvan Vecera 54*607f2c00SIvan Vecera /** 55*607f2c00SIvan Vecera * zl3073x_ref_is_enabled - check if the given input reference is enabled 56*607f2c00SIvan Vecera * @ref: pointer to ref state 57*607f2c00SIvan Vecera * 58*607f2c00SIvan Vecera * Return: true if input refernce is enabled, false otherwise 59*607f2c00SIvan Vecera */ 60*607f2c00SIvan Vecera static inline bool 61*607f2c00SIvan Vecera zl3073x_ref_is_enabled(const struct zl3073x_ref *ref) 62*607f2c00SIvan Vecera { 63*607f2c00SIvan Vecera return !!FIELD_GET(ZL_REF_CONFIG_ENABLE, ref->config); 64*607f2c00SIvan Vecera } 65*607f2c00SIvan Vecera 66*607f2c00SIvan Vecera #endif /* _ZL3073X_REF_H */ 67