mirror of
https://github.com/torvalds/linux.git
synced 2026-05-01 13:02:35 -04:00
Update existing DPLL drivers to utilize the DPLL reference count tracking infrastructure. Add dpll_tracker fields to the drivers' internal device and pin structures. Pass pointers to these trackers when calling dpll_device_get/put() and dpll_pin_get/put(). This allows developers to inspect the specific references held by this driver via debugfs when CONFIG_DPLL_REFCNT_TRACKER is enabled, aiding in the debugging of resource leaks. Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Ivan Vecera <ivecera@redhat.com> Reviewed-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com> Link: https://patch.msgid.link/20260203174002.705176-9-ivecera@redhat.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#ifndef _ZL3073X_DPLL_H
|
|
#define _ZL3073X_DPLL_H
|
|
|
|
#include <linux/dpll.h>
|
|
#include <linux/list.h>
|
|
|
|
#include "core.h"
|
|
|
|
/**
|
|
* struct zl3073x_dpll - ZL3073x DPLL sub-device structure
|
|
* @list: this DPLL list entry
|
|
* @dev: pointer to multi-function parent device
|
|
* @id: DPLL index
|
|
* @refsel_mode: reference selection mode
|
|
* @forced_ref: selected reference in forced reference lock mode
|
|
* @check_count: periodic check counter
|
|
* @phase_monitor: is phase offset monitor enabled
|
|
* @dpll_dev: pointer to registered DPLL device
|
|
* @tracker: tracking object for the acquired reference
|
|
* @lock_status: last saved DPLL lock status
|
|
* @pins: list of pins
|
|
* @change_work: device change notification work
|
|
*/
|
|
struct zl3073x_dpll {
|
|
struct list_head list;
|
|
struct zl3073x_dev *dev;
|
|
u8 id;
|
|
u8 refsel_mode;
|
|
u8 forced_ref;
|
|
u8 check_count;
|
|
bool phase_monitor;
|
|
struct dpll_device *dpll_dev;
|
|
dpll_tracker tracker;
|
|
enum dpll_lock_status lock_status;
|
|
struct list_head pins;
|
|
struct work_struct change_work;
|
|
};
|
|
|
|
struct zl3073x_dpll *zl3073x_dpll_alloc(struct zl3073x_dev *zldev, u8 ch);
|
|
void zl3073x_dpll_free(struct zl3073x_dpll *zldpll);
|
|
|
|
int zl3073x_dpll_register(struct zl3073x_dpll *zldpll);
|
|
void zl3073x_dpll_unregister(struct zl3073x_dpll *zldpll);
|
|
|
|
int zl3073x_dpll_init_fine_phase_adjust(struct zl3073x_dev *zldev);
|
|
void zl3073x_dpll_changes_check(struct zl3073x_dpll *zldpll);
|
|
|
|
#endif /* _ZL3073X_DPLL_H */
|