drivers/dpll/zl3073x/chan.h

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

File Facts

System
Linux kernel
Corpus path
drivers/dpll/zl3073x/chan.h
Extension
.h
Size
5045 bytes
Lines
189
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_chan {
	struct_group(cfg,
		u8	mode_refsel;
		u8	ref_prio[ZL3073X_NUM_REFS / 2];
	);
	struct_group(stat,
		u8	mon_status;
		u8	refsel_status;
		s64	df_offset;
	);
};

int zl3073x_chan_state_fetch(struct zl3073x_dev *zldev, u8 index);
const struct zl3073x_chan *zl3073x_chan_state_get(struct zl3073x_dev *zldev,
						 u8 index);
int zl3073x_chan_state_set(struct zl3073x_dev *zldev, u8 index,
			   const struct zl3073x_chan *chan);

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

/**
 * zl3073x_chan_df_offset_get - get cached df_offset vs tracked reference
 * @chan: pointer to channel state
 *
 * Return: frequency offset in 2^-48 steps
 */
static inline s64
zl3073x_chan_df_offset_get(const struct zl3073x_chan *chan)
{
	return chan->df_offset;
}

/**
 * zl3073x_chan_mode_get - get DPLL channel operating mode
 * @chan: pointer to channel state
 *
 * Return: reference selection mode of the given DPLL channel
 */
static inline u8 zl3073x_chan_mode_get(const struct zl3073x_chan *chan)
{
	return FIELD_GET(ZL_DPLL_MODE_REFSEL_MODE, chan->mode_refsel);
}

/**
 * zl3073x_chan_ref_get - get manually selected reference
 * @chan: pointer to channel state
 *
 * Return: reference selected in forced reference lock mode
 */
static inline u8 zl3073x_chan_ref_get(const struct zl3073x_chan *chan)
{
	return FIELD_GET(ZL_DPLL_MODE_REFSEL_REF, chan->mode_refsel);
}

/**
 * zl3073x_chan_mode_set - set DPLL channel operating mode
 * @chan: pointer to channel state
 * @mode: mode to set
 */
static inline void zl3073x_chan_mode_set(struct zl3073x_chan *chan, u8 mode)
{
	FIELD_MODIFY(ZL_DPLL_MODE_REFSEL_MODE, &chan->mode_refsel, mode);
}

/**
 * zl3073x_chan_ref_set - set manually selected reference
 * @chan: pointer to channel state
 * @ref: reference to set
 */
static inline void zl3073x_chan_ref_set(struct zl3073x_chan *chan, u8 ref)
{
	FIELD_MODIFY(ZL_DPLL_MODE_REFSEL_REF, &chan->mode_refsel, ref);
}

/**
 * zl3073x_chan_ref_prio_get - get reference priority
 * @chan: pointer to channel state
 * @ref: input reference index
 *
 * Return: priority of the given reference <0, 15>
 */
static inline u8
zl3073x_chan_ref_prio_get(const struct zl3073x_chan *chan, u8 ref)
{
	u8 val = chan->ref_prio[ref / 2];

	if (!(ref & 1))
		return FIELD_GET(ZL_DPLL_REF_PRIO_REF_P, val);
	else
		return FIELD_GET(ZL_DPLL_REF_PRIO_REF_N, val);

Annotation

Implementation Notes