]>
Commit | Line | Data |
---|---|---|
1da177e4 | 1 | /* |
1da177e4 LT |
2 | * |
3 | * v4l2 device driver for philips saa7134 based TV cards | |
4 | * | |
5 | * (c) 2001,02 Gerd Knorr <kraxel@bytesex.org> | |
6 | * | |
7 | * This program is free software; you can redistribute it and/or modify | |
8 | * it under the terms of the GNU General Public License as published by | |
9 | * the Free Software Foundation; either version 2 of the License, or | |
10 | * (at your option) any later version. | |
11 | * | |
12 | * This program is distributed in the hope that it will be useful, | |
13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 | * GNU General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with this program; if not, write to the Free Software | |
19 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
20 | */ | |
21 | ||
1990d50b | 22 | #define SAA7134_VERSION "0, 2, 17" |
1da177e4 | 23 | |
9a12ccfc MCC |
24 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
25 | ||
1da177e4 LT |
26 | #include <linux/pci.h> |
27 | #include <linux/i2c.h> | |
79436633 | 28 | #include <linux/videodev2.h> |
1da177e4 LT |
29 | #include <linux/kdev_t.h> |
30 | #include <linux/input.h> | |
67081a46 MK |
31 | #include <linux/notifier.h> |
32 | #include <linux/delay.h> | |
3593cab5 | 33 | #include <linux/mutex.h> |
87739868 | 34 | #include <linux/pm_qos.h> |
1da177e4 LT |
35 | |
36 | #include <asm/io.h> | |
37 | ||
401998fa | 38 | #include <media/v4l2-common.h> |
35ea11ff | 39 | #include <media/v4l2-ioctl.h> |
fac6986c | 40 | #include <media/v4l2-device.h> |
3bbaa3a6 | 41 | #include <media/v4l2-fh.h> |
718bde1a | 42 | #include <media/v4l2-ctrls.h> |
1da177e4 | 43 | #include <media/tuner.h> |
6bda9644 | 44 | #include <media/rc-core.h> |
ac9cd976 | 45 | #include <media/ir-kbd-i2c.h> |
2ada815f | 46 | #include <media/videobuf2-dma-sg.h> |
d21838dd MCC |
47 | #include <sound/core.h> |
48 | #include <sound/pcm.h> | |
8c31522c | 49 | #if IS_ENABLED(CONFIG_VIDEO_SAA7134_DVB) |
2ada815f | 50 | #include <media/videobuf2-dvb.h> |
05ad3907 | 51 | #endif |
cdcd141c | 52 | #include "tda8290.h" |
1da177e4 | 53 | |
1da177e4 LT |
54 | #define UNSET (-1U) |
55 | ||
1da177e4 LT |
56 | /* ----------------------------------------------------------- */ |
57 | /* enums */ | |
58 | ||
59 | enum saa7134_tvaudio_mode { | |
60 | TVAUDIO_FM_MONO = 1, | |
61 | TVAUDIO_FM_BG_STEREO = 2, | |
62 | TVAUDIO_FM_SAT_STEREO = 3, | |
63 | TVAUDIO_FM_K_STEREO = 4, | |
64 | TVAUDIO_NICAM_AM = 5, | |
65 | TVAUDIO_NICAM_FM = 6, | |
66 | }; | |
67 | ||
68 | enum saa7134_audio_in { | |
69 | TV = 1, | |
70 | LINE1 = 2, | |
71 | LINE2 = 3, | |
72 | LINE2_LEFT, | |
73 | }; | |
74 | ||
75 | enum saa7134_video_out { | |
76 | CCIR656 = 1, | |
77 | }; | |
78 | ||
79 | /* ----------------------------------------------------------- */ | |
80 | /* static data */ | |
81 | ||
82 | struct saa7134_tvnorm { | |
83 | char *name; | |
84 | v4l2_std_id id; | |
85 | ||
86 | /* video decoder */ | |
87 | unsigned int sync_control; | |
88 | unsigned int luma_control; | |
89 | unsigned int chroma_ctrl1; | |
90 | unsigned int chroma_gain; | |
91 | unsigned int chroma_ctrl2; | |
92 | unsigned int vgate_misc; | |
93 | ||
94 | /* video scaler */ | |
95 | unsigned int h_start; | |
96 | unsigned int h_stop; | |
97 | unsigned int video_v_start; | |
98 | unsigned int video_v_stop; | |
f246a817 MS |
99 | unsigned int vbi_v_start_0; |
100 | unsigned int vbi_v_stop_0; | |
1da177e4 | 101 | unsigned int src_timing; |
f246a817 | 102 | unsigned int vbi_v_start_1; |
1da177e4 LT |
103 | }; |
104 | ||
105 | struct saa7134_tvaudio { | |
106 | char *name; | |
107 | v4l2_std_id std; | |
108 | enum saa7134_tvaudio_mode mode; | |
109 | int carr1; | |
110 | int carr2; | |
111 | }; | |
112 | ||
113 | struct saa7134_format { | |
114 | char *name; | |
115 | unsigned int fourcc; | |
116 | unsigned int depth; | |
117 | unsigned int pm; | |
118 | unsigned int vshift; /* vertical downsampling (for planar yuv) */ | |
119 | unsigned int hshift; /* horizontal downsampling (for planar yuv) */ | |
120 | unsigned int bswap:1; | |
121 | unsigned int wswap:1; | |
122 | unsigned int yuv:1; | |
123 | unsigned int planar:1; | |
124 | unsigned int uvswap:1; | |
125 | }; | |
126 | ||
a6e3b81f MCC |
127 | struct saa7134_card_ir { |
128 | struct rc_dev *dev; | |
129 | ||
130 | char name[32]; | |
131 | char phys[32]; | |
651c7a5f | 132 | unsigned users; |
a6e3b81f MCC |
133 | |
134 | u32 polling; | |
25fa2071 KS |
135 | u32 last_gpio; |
136 | u32 mask_keycode, mask_keydown, mask_keyup; | |
a6e3b81f MCC |
137 | |
138 | bool running; | |
a6e3b81f MCC |
139 | |
140 | struct timer_list timer; | |
a6e3b81f MCC |
141 | |
142 | /* IR core raw decoding */ | |
143 | u32 raw_decode; | |
144 | }; | |
145 | ||
1da177e4 LT |
146 | /* ----------------------------------------------------------- */ |
147 | /* card configuration */ | |
148 | ||
149 | #define SAA7134_BOARD_NOAUTO UNSET | |
150 | #define SAA7134_BOARD_UNKNOWN 0 | |
151 | #define SAA7134_BOARD_PROTEUS_PRO 1 | |
152 | #define SAA7134_BOARD_FLYVIDEO3000 2 | |
153 | #define SAA7134_BOARD_FLYVIDEO2000 3 | |
154 | #define SAA7134_BOARD_EMPRESS 4 | |
155 | #define SAA7134_BOARD_MONSTERTV 5 | |
156 | #define SAA7134_BOARD_MD9717 6 | |
157 | #define SAA7134_BOARD_TVSTATION_RDS 7 | |
158 | #define SAA7134_BOARD_CINERGY400 8 | |
159 | #define SAA7134_BOARD_MD5044 9 | |
160 | #define SAA7134_BOARD_KWORLD 10 | |
161 | #define SAA7134_BOARD_CINERGY600 11 | |
162 | #define SAA7134_BOARD_MD7134 12 | |
163 | #define SAA7134_BOARD_TYPHOON_90031 13 | |
164 | #define SAA7134_BOARD_ELSA 14 | |
165 | #define SAA7134_BOARD_ELSA_500TV 15 | |
166 | #define SAA7134_BOARD_ASUSTeK_TVFM7134 16 | |
167 | #define SAA7134_BOARD_VA1000POWER 17 | |
168 | #define SAA7134_BOARD_BMK_MPEX_NOTUNER 18 | |
169 | #define SAA7134_BOARD_VIDEOMATE_TV 19 | |
170 | #define SAA7134_BOARD_CRONOS_PLUS 20 | |
171 | #define SAA7134_BOARD_10MOONSTVMASTER 21 | |
172 | #define SAA7134_BOARD_MD2819 22 | |
173 | #define SAA7134_BOARD_BMK_MPEX_TUNER 23 | |
174 | #define SAA7134_BOARD_TVSTATION_DVR 24 | |
175 | #define SAA7134_BOARD_ASUSTEK_TVFM7133 25 | |
176 | #define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26 | |
177 | #define SAA7134_BOARD_MANLI_MTV002 27 | |
178 | #define SAA7134_BOARD_MANLI_MTV001 28 | |
179 | #define SAA7134_BOARD_TG3000TV 29 | |
180 | #define SAA7134_BOARD_ECS_TVP3XP 30 | |
181 | #define SAA7134_BOARD_ECS_TVP3XP_4CB5 31 | |
182 | #define SAA7134_BOARD_AVACSSMARTTV 32 | |
183 | #define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33 | |
184 | #define SAA7134_BOARD_NOVAC_PRIMETV7133 34 | |
185 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35 | |
330a115a | 186 | #define SAA7134_BOARD_UPMOST_PURPLE_TV 36 |
1da177e4 LT |
187 | #define SAA7134_BOARD_ITEMS_MTV005 37 |
188 | #define SAA7134_BOARD_CINERGY200 38 | |
189 | #define SAA7134_BOARD_FLYTVPLATINUM_MINI 39 | |
190 | #define SAA7134_BOARD_VIDEOMATE_TV_PVR 40 | |
191 | #define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41 | |
192 | #define SAA7134_BOARD_SABRENT_SBTTVFM 42 | |
193 | #define SAA7134_BOARD_ZOLID_XPERT_TV7134 43 | |
194 | #define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44 | |
ac19ecc6 | 195 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45 |
1da177e4 LT |
196 | #define SAA7134_BOARD_AVERMEDIA_CARDBUS 46 |
197 | #define SAA7134_BOARD_CINERGY400_CARDBUS 47 | |
198 | #define SAA7134_BOARD_CINERGY600_MK3 48 | |
199 | #define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49 | |
200 | #define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50 | |
201 | #define SAA7134_BOARD_PROVIDEO_PV952 51 | |
202 | #define SAA7134_BOARD_AVERMEDIA_305 52 | |
330a115a | 203 | #define SAA7134_BOARD_ASUSTeK_TVFM7135 53 |
1da177e4 LT |
204 | #define SAA7134_BOARD_FLYTVPLATINUM_FM 54 |
205 | #define SAA7134_BOARD_FLYDVBTDUO 55 | |
ac19ecc6 MCC |
206 | #define SAA7134_BOARD_AVERMEDIA_307 56 |
207 | #define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57 | |
208 | #define SAA7134_BOARD_ADS_INSTANT_TV 58 | |
209 | #define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59 | |
de7e8d78 | 210 | #define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60 |
330a115a MCC |
211 | #define SAA7134_BOARD_PHILIPS_TOUGH 61 |
212 | #define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62 | |
213 | #define SAA7134_BOARD_KWORLD_XPERT 63 | |
2f180710 | 214 | #define SAA7134_BOARD_FLYTV_DIGIMATRIX 64 |
260784dc | 215 | #define SAA7134_BOARD_KWORLD_TERMINATOR 65 |
4279f024 | 216 | #define SAA7134_BOARD_YUAN_TUN900 66 |
a8ff417e | 217 | #define SAA7134_BOARD_BEHOLD_409FM 67 |
6b961440 | 218 | #define SAA7134_BOARD_GOTVIEW_7135 68 |
2cf36ac4 HH |
219 | #define SAA7134_BOARD_PHILIPS_EUROPA 69 |
220 | #define SAA7134_BOARD_VIDEOMATE_DVBT_300 70 | |
221 | #define SAA7134_BOARD_VIDEOMATE_DVBT_200 71 | |
bb881f14 NS |
222 | #define SAA7134_BOARD_RTD_VFG7350 72 |
223 | #define SAA7134_BOARD_RTD_VFG7330 73 | |
058afaf8 | 224 | #define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74 |
76bc3a39 | 225 | #define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75 |
cf1c5d1d | 226 | #define SAA7134_BOARD_MONSTERTV_MOBILE 76 |
c2f6f9d8 | 227 | #define SAA7134_BOARD_PINNACLE_PCTV_110i 77 |
28f02241 | 228 | #define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78 |
17ce1ff9 | 229 | #define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS 79 |
5d5c9904 | 230 | #define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80 |
90e9df7f | 231 | #define SAA7134_BOARD_PHILIPS_TIGER 81 |
80d2ad92 | 232 | #define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS 82 |