Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
56fc08ca | 2 | /* |
56fc08ca MCC |
3 | */ |
4 | ||
49965a80 HV |
5 | #ifndef MSP3400_DRIVER_H |
6 | #define MSP3400_DRIVER_H | |
1da177e4 | 7 | |
d647f0b7 | 8 | #include <media/drv-intf/msp3400.h> |
76efd62f | 9 | #include <media/v4l2-device.h> |
ebc3bba5 | 10 | #include <media/v4l2-ctrls.h> |
fb493282 | 11 | #include <media/v4l2-mc.h> |
2474ed44 | 12 | |
1da177e4 LT |
13 | /* ---------------------------------------------------------------------- */ |
14 | ||
53b0a1c6 HV |
15 | /* This macro is allowed for *constants* only, gcc must calculate it |
16 | at compile time. Remember -- no floats in kernel mode */ | |
17 | #define MSP_CARRIER(freq) ((int)((float)(freq / 18.432) * (1 << 24))) | |
18 | ||
19 | #define MSP_MODE_AM_DETECT 0 | |
20 | #define MSP_MODE_FM_RADIO 2 | |
21 | #define MSP_MODE_FM_TERRA 3 | |
22 | #define MSP_MODE_FM_SAT 4 | |
23 | #define MSP_MODE_FM_NICAM1 5 | |
24 | #define MSP_MODE_FM_NICAM2 6 | |
25 | #define MSP_MODE_AM_NICAM 7 | |
26 | #define MSP_MODE_BTSC 8 | |
27 | #define MSP_MODE_EXTERN 9 | |
28 | ||
42772574 HV |
29 | #define SCART_IN1 0 |
30 | #define SCART_IN2 1 | |
31 | #define SCART_IN3 2 | |
32 | #define SCART_IN4 3 | |
33 | #define SCART_IN1_DA 4 | |
34 | #define SCART_IN2_DA 5 | |
35 | #define SCART_MONO 6 | |
36 | #define SCART_MUTE 7 | |
1da177e4 LT |
37 | |
38 | #define SCART_DSP_IN 0 | |
39 | #define SCART1_OUT 1 | |
40 | #define SCART2_OUT 2 | |
41 | ||
53b0a1c6 HV |
42 | #define OPMODE_AUTO -1 |
43 | #define OPMODE_MANUAL 0 | |
44 | #define OPMODE_AUTODETECT 1 /* use autodetect (>= msp3410 only) */ | |
45 | #define OPMODE_AUTOSELECT 2 /* use autodetect & autoselect (>= msp34xxG) */ | |
46 | ||
47 | /* module parameters */ | |
f167cb4e | 48 | extern int msp_debug; |
90ab5ee9 RR |
49 | extern bool msp_once; |
50 | extern bool msp_amsound; | |
f167cb4e | 51 | extern int msp_standard; |
90ab5ee9 | 52 | extern bool msp_dolby; |
f167cb4e | 53 | extern int msp_stereo_thresh; |
53b0a1c6 | 54 | |
fc9bd1ce MCC |
55 | enum msp3400_pads { |
56 | MSP3400_PAD_IF_INPUT, | |
57 | MSP3400_PAD_OUT, | |
58 | MSP3400_NUM_PADS | |
59 | }; | |
60 | ||
53b0a1c6 | 61 | struct msp_state { |
76efd62f | 62 | struct v4l2_subdev sd; |
ebc3bba5 | 63 | struct v4l2_ctrl_handler hdl; |
53b0a1c6 | 64 | int rev1, rev2; |
74cab31c | 65 | int ident; |
5af0c8f6 HV |
66 | u8 has_nicam; |
67 | u8 has_radio; | |
68 | u8 has_headphones; | |
69 | u8 has_ntsc_jp_d_k3; | |
0020d3ef HV |
70 | u8 has_scart2; |
71 | u8 has_scart3; | |
5af0c8f6 | 72 | u8 has_scart4; |
0020d3ef | 73 | u8 has_scart2_out; |
5af0c8f6 HV |
74 | u8 has_scart2_out_volume; |
75 | u8 has_i2s_conf; | |
76 | u8 has_subwoofer; | |
77 | u8 has_sound_processing; | |
78 | u8 has_virtual_dolby_surround; | |
79 | u8 has_dolby_pro_logic; | |
de98cdaf | 80 | u8 force_btsc; |
7560d7a4 HV |
81 | |
82 | int radio; | |
53b0a1c6 | 83 | int opmode; |
5af0c8f6 | 84 | int std; |
53b0a1c6 | 85 | int mode; |
5d1ed986 | 86 | v4l2_std_id v4l2_std, detected_std; |
53b0a1c6 HV |
87 | int nicam_on; |
88 | int acb; | |
89 | int in_scart; | |
90 | int i2s_mode; | |
91 | int main, second; /* sound carrier */ | |
92 | int input; | |
5325b427 HV |
93 | u32 route_in; |
94 | u32 route_out; | |
53b0a1c6 HV |
95 | |
96 | /* v4l2 */ | |
97 | int audmode; | |
98 | int rxsubchans; | |
99 | ||
ebc3bba5 HV |
100 | struct { |
101 | /* volume cluster */ | |
102 | struct v4l2_ctrl *volume; | |
103 | struct v4l2_ctrl *muted; | |
104 | }; | |
105 | ||
3bbe5a83 | 106 | int scan_in_progress; |
53b0a1c6 HV |
107 | |
108 | /* thread */ | |
109 | struct task_struct *kthread; | |
110 | wait_queue_head_t wq; | |
0a115373 RD |
111 | unsigned int restart:1; |
112 | unsigned int watch_stereo:1; | |
fb493282 | 113 | |
24095e76 | 114 | #if IS_ENABLED(CONFIG_MEDIA_CONTROLLER) |
fc9bd1ce | 115 | struct media_pad pads[MSP3400_NUM_PADS]; |
fb493282 | 116 | #endif |
53b0a1c6 HV |
117 | }; |
118 | ||
76efd62f HV |
119 | static inline struct msp_state *to_state(struct v4l2_subdev *sd) |
120 | { | |
121 | return container_of(sd, struct msp_state, sd); | |
122 | } | |
123 | ||
ebc3bba5 HV |
124 | static inline struct msp_state *ctrl_to_state(struct v4l2_ctrl *ctrl) |
125 | { | |
126 | return container_of(ctrl->handler, struct msp_state, hdl); | |
127 | } | |
128 | ||
53b0a1c6 HV |
129 | /* msp3400-driver.c */ |
130 | int msp_write_dem(struct i2c_client *client, int addr, int val); | |
131 | int msp_write_dsp(struct i2c_client *client, int addr, int val); | |
132 | int msp_read_dem(struct i2c_client *client, int addr); | |
133 | int msp_read_dsp(struct i2c_client *client, int addr); | |
134 | int msp_reset(struct i2c_client *client); | |
135 | void msp_set_scart(struct i2c_client *client, int in, int out); | |
ebc3bba5 | 136 | void msp_update_volume(struct msp_state *state); |
53b0a1c6 HV |
137 | int msp_sleep(struct msp_state *state, int timeout); |
138 | ||
139 | /* msp3400-kthreads.c */ | |
5af0c8f6 | 140 | const char *msp_standard_std_name(int std); |
8a4b275f | 141 | void msp_set_audmode(struct i2c_client *client); |
de533ccf | 142 | int msp_detect_stereo(struct i2c_client *client); |
53b0a1c6 HV |
143 | int msp3400c_thread(void *data); |
144 | int msp3410d_thread(void *data); | |
145 | int msp34xxg_thread(void *data); | |
8a4b275f HV |
146 | void msp3400c_set_mode(struct i2c_client *client, int mode); |
147 | void msp3400c_set_carrier(struct i2c_client *client, int cdo1, int cdo2); | |
53b0a1c6 | 148 | |
49965a80 | 149 | #endif /* MSP3400_DRIVER_H */ |