drivers/dpll/zl3073x/ref.h

Source file repositories/reference/linux-study-clean/drivers/dpll/zl3073x/ref.h

File Facts

System
Linux kernel
Corpus path
drivers/dpll/zl3073x/ref.h
Extension
.h
Size
4560 bytes
Lines
192
Domain
Driver Families
Bucket
drivers/dpll
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct zl3073x_ref {
	struct_group(cfg, /* Configuration */
		u64	phase_comp;
		u32	esync_n_div;
		u16	freq_base;
		u16	freq_mult;
		u16	freq_ratio_m;
		u16	freq_ratio_n;
		u8	sync_ctrl;
	);
	struct_group(inv, /* Invariants */
		u8	config;
	);
	struct_group(stat, /* Status */
		u32	meas_freq;
		u8	mon_status;
	);
};

int zl3073x_ref_state_fetch(struct zl3073x_dev *zldev, u8 index);

const struct zl3073x_ref *zl3073x_ref_state_get(struct zl3073x_dev *zldev,
						u8 index);

int zl3073x_ref_state_set(struct zl3073x_dev *zldev, u8 index,
			  const struct zl3073x_ref *ref);

int zl3073x_ref_state_update(struct zl3073x_dev *zldev, u8 index);

int zl3073x_ref_freq_factorize(u32 freq, u16 *base, u16 *mult);

/**
 * zl3073x_ref_meas_freq_get - get measured input frequency
 * @ref: pointer to ref state
 *
 * Return: measured input frequency in Hz
 */
static inline u32
zl3073x_ref_meas_freq_get(const struct zl3073x_ref *ref)
{
	return ref->meas_freq;
}

/**
 * zl3073x_ref_freq_get - get given input reference frequency
 * @ref: pointer to ref state
 *
 * Return: frequency of the given input reference
 */
static inline u32
zl3073x_ref_freq_get(const struct zl3073x_ref *ref)
{
	return mul_u64_u32_div(ref->freq_base * ref->freq_mult,
			       ref->freq_ratio_m, ref->freq_ratio_n);
}

/**
 * zl3073x_ref_freq_set - set given input reference frequency
 * @ref: pointer to ref state
 * @freq: frequency to be set
 *
 * Return: 0 on success, <0 when frequency cannot be factorized
 */
static inline int
zl3073x_ref_freq_set(struct zl3073x_ref *ref, u32 freq)
{
	u16 base, mult;
	int rc;

	rc = zl3073x_ref_freq_factorize(freq, &base, &mult);
	if (rc)
		return rc;

	ref->freq_base = base;
	ref->freq_mult = mult;
	ref->freq_ratio_m = 1;
	ref->freq_ratio_n = 1;

	return 0;
}

/**
 * zl3073x_ref_sync_mode_get - get sync control mode
 * @ref: pointer to ref state
 *
 * Return: sync control mode (ZL_REF_SYNC_CTRL_MODE_*)
 */
static inline u8
zl3073x_ref_sync_mode_get(const struct zl3073x_ref *ref)
{

Annotation

Implementation Notes