Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/dpll/zl3073x/out.h
38189 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
3
#ifndef _ZL3073X_OUT_H
4
#define _ZL3073X_OUT_H
5
6
#include <linux/bitfield.h>
7
#include <linux/types.h>
8
9
#include "regs.h"
10
11
struct zl3073x_dev;
12
13
/**
14
* struct zl3073x_out - output state
15
* @div: output divisor
16
* @width: output pulse width
17
* @esync_n_period: embedded sync or n-pin period (for n-div formats)
18
* @esync_n_width: embedded sync or n-pin pulse width
19
* @phase_comp: phase compensation
20
* @ctrl: output control
21
* @mode: output mode
22
*/
23
struct zl3073x_out {
24
u32 div;
25
u32 width;
26
u32 esync_n_period;
27
u32 esync_n_width;
28
s32 phase_comp;
29
u8 ctrl;
30
u8 mode;
31
};
32
33
int zl3073x_out_state_fetch(struct zl3073x_dev *zldev, u8 index);
34
const struct zl3073x_out *zl3073x_out_state_get(struct zl3073x_dev *zldev,
35
u8 index);
36
37
int zl3073x_out_state_set(struct zl3073x_dev *zldev, u8 index,
38
const struct zl3073x_out *out);
39
40
/**
41
* zl3073x_out_signal_format_get - get output signal format
42
* @out: pointer to out state
43
*
44
* Return: signal format of given output
45
*/
46
static inline u8 zl3073x_out_signal_format_get(const struct zl3073x_out *out)
47
{
48
return FIELD_GET(ZL_OUTPUT_MODE_SIGNAL_FORMAT, out->mode);
49
}
50
51
/**
52
* zl3073x_out_is_diff - check if the given output is differential
53
* @out: pointer to out state
54
*
55
* Return: true if output is differential, false if output is single-ended
56
*/
57
static inline bool zl3073x_out_is_diff(const struct zl3073x_out *out)
58
{
59
switch (zl3073x_out_signal_format_get(out)) {
60
case ZL_OUTPUT_MODE_SIGNAL_FORMAT_LVDS:
61
case ZL_OUTPUT_MODE_SIGNAL_FORMAT_DIFF:
62
case ZL_OUTPUT_MODE_SIGNAL_FORMAT_LOWVCM:
63
return true;
64
default:
65
break;
66
}
67
68
return false;
69
}
70
71
/**
72
* zl3073x_out_is_enabled - check if the given output is enabled
73
* @out: pointer to out state
74
*
75
* Return: true if output is enabled, false if output is disabled
76
*/
77
static inline bool zl3073x_out_is_enabled(const struct zl3073x_out *out)
78
{
79
return !!FIELD_GET(ZL_OUTPUT_CTRL_EN, out->ctrl);
80
}
81
82
/**
83
* zl3073x_out_synth_get - get synth connected to given output
84
* @out: pointer to out state
85
*
86
* Return: index of synth connected to given output.
87
*/
88
static inline u8 zl3073x_out_synth_get(const struct zl3073x_out *out)
89
{
90
return FIELD_GET(ZL_OUTPUT_CTRL_SYNTH_SEL, out->ctrl);
91
}
92
93
#endif /* _ZL3073X_OUT_H */
94
95