xref: /linux/drivers/dpll/zl3073x/dpll.h (revision 8a5f956a9fb7d74fff681145082acfad5afa6bb8)
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 
3 #ifndef _ZL3073X_DPLL_H
4 #define _ZL3073X_DPLL_H
5 
6 #include <linux/dpll.h>
7 #include <linux/list.h>
8 
9 #include "core.h"
10 
11 /**
12  * struct zl3073x_dpll - ZL3073x DPLL sub-device structure
13  * @list: this DPLL list entry
14  * @dev: pointer to multi-function parent device
15  * @id: DPLL index
16  * @refsel_mode: reference selection mode
17  * @forced_ref: selected reference in forced reference lock mode
18  * @check_count: periodic check counter
19  * @phase_monitor: is phase offset monitor enabled
20  * @dpll_dev: pointer to registered DPLL device
21  * @lock_status: last saved DPLL lock status
22  * @pins: list of pins
23  * @change_work: device change notification work
24  */
25 struct zl3073x_dpll {
26 	struct list_head		list;
27 	struct zl3073x_dev		*dev;
28 	u8				id;
29 	u8				refsel_mode;
30 	u8				forced_ref;
31 	u8				check_count;
32 	bool				phase_monitor;
33 	struct dpll_device		*dpll_dev;
34 	enum dpll_lock_status		lock_status;
35 	struct list_head		pins;
36 	struct work_struct		change_work;
37 };
38 
39 struct zl3073x_dpll *zl3073x_dpll_alloc(struct zl3073x_dev *zldev, u8 ch);
40 void zl3073x_dpll_free(struct zl3073x_dpll *zldpll);
41 
42 int zl3073x_dpll_register(struct zl3073x_dpll *zldpll);
43 void zl3073x_dpll_unregister(struct zl3073x_dpll *zldpll);
44 
45 int zl3073x_dpll_init_fine_phase_adjust(struct zl3073x_dev *zldev);
46 void zl3073x_dpll_changes_check(struct zl3073x_dpll *zldpll);
47 
48 #endif /* _ZL3073X_DPLL_H */
49