forked from nns779/px4_drv
-
Notifications
You must be signed in to change notification settings - Fork 18
/
Copy pathcxd2856er.h
154 lines (131 loc) · 4.07 KB
/
cxd2856er.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
// SPDX-License-Identifier: GPL-2.0-only
/*
* Sony CXD2856ER driver definitions (cxd2856er.h)
*
* Copyright (c) 2018-2021 nns779
*/
#ifndef __CXD2856ER_H__
#define __CXD2856ER_H__
#ifdef __linux__
#include <linux/types.h>
#include <linux/mutex.h>
#include <linux/device.h>
#elif defined(_WIN32) || defined(_WIN64)
#include "misc_win.h"
#endif
#include "i2c_comm.h"
struct cxd2856er_config {
u32 xtal;
bool tuner_i2c;
};
enum cxd2856er_state {
CXD2856ER_UNKNOWN_STATE = 0,
CXD2856ER_SLEEP_STATE,
CXD2856ER_ACTIVE_STATE
};
enum cxd2856er_system {
CXD2856ER_UNSPECIFIED_SYSTEM = 0,
CXD2856ER_ISDB_T_SYSTEM,
CXD2856ER_ISDB_S_SYSTEM
};
enum cxd2856er_i2c_target {
CXD2856ER_I2C_SLVX = 0,
CXD2856ER_I2C_SLVT
};
union cxd2856er_system_params {
u32 bandwidth;
};
struct cxd2856er_demod {
const struct device *dev;
const struct i2c_comm_master *i2c;
struct i2c_comm_master i2c_master;
struct {
u8 slvx; // system
u8 slvt; // demod
} i2c_addr;
struct cxd2856er_config config;
enum cxd2856er_state state;
enum cxd2856er_system system;
};
#ifdef __cplusplus
extern "C" {
#endif
int cxd2856er_read_regs(struct cxd2856er_demod *demod,
enum cxd2856er_i2c_target target,
u8 reg, u8 *buf, int len);
int cxd2856er_write_regs(struct cxd2856er_demod *demod,
enum cxd2856er_i2c_target target,
u8 reg, u8 *buf, int len);
int cxd2856er_write_reg_mask(struct cxd2856er_demod *demod,
enum cxd2856er_i2c_target target,
u8 reg, u8 val, u8 mask);
static inline int cxd2856er_read_slvx_regs(struct cxd2856er_demod *demod,
u8 reg, u8 *buf, int len)
{
return cxd2856er_read_regs(demod, CXD2856ER_I2C_SLVX, reg, buf, len);
}
static inline int cxd2856er_read_slvt_regs(struct cxd2856er_demod *demod,
u8 reg, u8 *buf, int len)
{
return cxd2856er_read_regs(demod, CXD2856ER_I2C_SLVT, reg, buf, len);
}
static inline int cxd2856er_read_slvx_reg(struct cxd2856er_demod *demod,
u8 reg, u8 *val)
{
return cxd2856er_read_regs(demod, CXD2856ER_I2C_SLVX, reg, val, 1);
}
static inline int cxd2856er_read_slvt_reg(struct cxd2856er_demod *demod,
u8 reg, u8 *val)
{
return cxd2856er_read_regs(demod, CXD2856ER_I2C_SLVT, reg, val, 1);
}
static inline int cxd2856er_write_slvx_regs(struct cxd2856er_demod *demod,
u8 reg, u8 *buf, int len)
{
return cxd2856er_write_regs(demod, CXD2856ER_I2C_SLVX, reg, buf, len);
}
static inline int cxd2856er_write_slvt_regs(struct cxd2856er_demod *demod,
u8 reg, u8 *buf, int len)
{
return cxd2856er_write_regs(demod, CXD2856ER_I2C_SLVT, reg, buf, len);
}
static inline int cxd2856er_write_slvx_reg(struct cxd2856er_demod *demod,
u8 reg, u8 val)
{
return cxd2856er_write_regs(demod, CXD2856ER_I2C_SLVX, reg, &val, 1);
}
static inline int cxd2856er_write_slvt_reg(struct cxd2856er_demod *demod,
u8 reg, u8 val)
{
return cxd2856er_write_regs(demod, CXD2856ER_I2C_SLVT, reg, &val, 1);
}
static inline int cxd2856er_write_slvx_reg_mask(struct cxd2856er_demod *demod,
u8 reg, u8 val, u8 mask)
{
return cxd2856er_write_reg_mask(demod, CXD2856ER_I2C_SLVX,
reg, val, mask);
}
static inline int cxd2856er_write_slvt_reg_mask(struct cxd2856er_demod *demod,
u8 reg, u8 val, u8 mask)
{
return cxd2856er_write_reg_mask(demod, CXD2856ER_I2C_SLVT,
reg, val, mask);
}
int cxd2856er_init(struct cxd2856er_demod *demod);
int cxd2856er_term(struct cxd2856er_demod *demod);
int cxd2856er_sleep(struct cxd2856er_demod *demod);
int cxd2856er_wakeup(struct cxd2856er_demod *demod,
enum cxd2856er_system system,
union cxd2856er_system_params *params);
int cxd2856er_post_tune(struct cxd2856er_demod *demod);
int cxd2856er_set_slot_isdbs(struct cxd2856er_demod *demod, u16 idx);
int cxd2856er_set_tsid_isdbs(struct cxd2856er_demod *demod, u16 tsid);
int cxd2856er_is_ts_locked_isdbt(struct cxd2856er_demod *demod,
bool *locked, bool *unlocked);
int cxd2856er_is_ts_locked_isdbs(struct cxd2856er_demod *demod, bool *locked);
int cxd2856er_read_cnr_raw_isdbt(struct cxd2856er_demod *demod, u16 *value);
int cxd2856er_read_cnr_raw_isdbs(struct cxd2856er_demod *demod, u16 *value);
#ifdef __cplusplus
}
#endif
#endif