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