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 * @tracker: tracking object for the acquired reference 22 * @lock_status: last saved DPLL lock status 23 * @pins: list of pins 24 * @change_work: device change notification work 25 */ 26 struct zl3073x_dpll { 27 struct list_head list; 28 struct zl3073x_dev *dev; 29 u8 id; 30 u8 refsel_mode; 31 u8 forced_ref; 32 u8 check_count; 33 bool phase_monitor; 34 struct dpll_device *dpll_dev; 35 dpll_tracker tracker; 36 enum dpll_lock_status lock_status; 37 struct list_head pins; 38 struct work_struct change_work; 39 }; 40 41 struct zl3073x_dpll *zl3073x_dpll_alloc(struct zl3073x_dev *zldev, u8 ch); 42 void zl3073x_dpll_free(struct zl3073x_dpll *zldpll); 43 44 int zl3073x_dpll_register(struct zl3073x_dpll *zldpll); 45 void zl3073x_dpll_unregister(struct zl3073x_dpll *zldpll); 46 47 int zl3073x_dpll_init_fine_phase_adjust(struct zl3073x_dev *zldev); 48 void zl3073x_dpll_changes_check(struct zl3073x_dpll *zldpll); 49 50 #endif /* _ZL3073X_DPLL_H */ 51