Link: https://lore.kernel.org/r/20260217200002.683975158@linuxfoundation.org Tested-by: Florian Fainelli <florian.fainelli@broadcom.com> Tested-by: Takeshi Ogasawara <takeshi.ogasawara@futuring-girl.com> Tested-by: Peter Schneider <pschneider1968@googlemail.com> Tested-by: Jon Hunter <jonathanh@nvidia.com> Tested-by: Salvatore Bonaccorso <carnil@debian.org> Tested-by: Brett A C Sheffield <bacs@librecast.net> Tested-by: Mark Brown <broonie@kernel.org> Tested-by: Luna Jernberg <droidbittin@gmail.com> Tested-by: Ronald Warsow <rwarsow@gmx.de> Tested-by: Justin M. Forbes <jforbes@fedoraproject.org> Tested-by: Ron Economos <re@w6rz.net> Tested-by: Miguel Ojeda <ojeda@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
73 lines
1.7 KiB
C
73 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef _ZL3073X_SYNTH_H
|
|
#define _ZL3073X_SYNTH_H
|
|
|
|
#include <linux/bitfield.h>
|
|
#include <linux/math64.h>
|
|
#include <linux/types.h>
|
|
|
|
#include "regs.h"
|
|
|
|
struct zl3073x_dev;
|
|
|
|
/**
|
|
* struct zl3073x_synth - synthesizer state
|
|
* @freq_mult: frequency multiplier
|
|
* @freq_base: frequency base
|
|
* @freq_m: frequency numerator
|
|
* @freq_n: frequency denominator
|
|
* @ctrl: synth control
|
|
*/
|
|
struct zl3073x_synth {
|
|
u32 freq_mult;
|
|
u16 freq_base;
|
|
u16 freq_m;
|
|
u16 freq_n;
|
|
u8 ctrl;
|
|
};
|
|
|
|
int zl3073x_synth_state_fetch(struct zl3073x_dev *zldev, u8 synth_id);
|
|
|
|
const struct zl3073x_synth *zl3073x_synth_state_get(struct zl3073x_dev *zldev,
|
|
u8 synth_id);
|
|
|
|
int zl3073x_synth_state_set(struct zl3073x_dev *zldev, u8 synth_id,
|
|
const struct zl3073x_synth *synth);
|
|
|
|
/**
|
|
* zl3073x_synth_dpll_get - get DPLL ID the synth is driven by
|
|
* @synth: pointer to synth state
|
|
*
|
|
* Return: ID of DPLL the given synthetizer is driven by
|
|
*/
|
|
static inline u8 zl3073x_synth_dpll_get(const struct zl3073x_synth *synth)
|
|
{
|
|
return FIELD_GET(ZL_SYNTH_CTRL_DPLL_SEL, synth->ctrl);
|
|
}
|
|
|
|
/**
|
|
* zl3073x_synth_freq_get - get synth current freq
|
|
* @synth: pointer to synth state
|
|
*
|
|
* Return: frequency of given synthetizer
|
|
*/
|
|
static inline u32 zl3073x_synth_freq_get(const struct zl3073x_synth *synth)
|
|
{
|
|
return mul_u64_u32_div(synth->freq_base * synth->freq_m,
|
|
synth->freq_mult, synth->freq_n);
|
|
}
|
|
|
|
/**
|
|
* zl3073x_synth_is_enabled - check if the given synth is enabled
|
|
* @synth: pointer to synth state
|
|
*
|
|
* Return: true if synth is enabled, false otherwise
|
|
*/
|
|
static inline bool zl3073x_synth_is_enabled(const struct zl3073x_synth *synth)
|
|
{
|
|
return FIELD_GET(ZL_SYNTH_CTRL_EN, synth->ctrl);
|
|
}
|
|
|
|
#endif /* _ZL3073X_SYNTH_H */
|