]>
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 | ||
10b89ee3 | 22 | #include <linux/version.h> |
fd3113e8 | 23 | #define SAA7134_VERSION_CODE KERNEL_VERSION(0,2,14) |
1da177e4 LT |
24 | |
25 | #include <linux/pci.h> | |
26 | #include <linux/i2c.h> | |
79436633 | 27 | #include <linux/videodev2.h> |
1da177e4 LT |
28 | #include <linux/kdev_t.h> |
29 | #include <linux/input.h> | |
67081a46 MK |
30 | #include <linux/notifier.h> |
31 | #include <linux/delay.h> | |
3593cab5 | 32 | #include <linux/mutex.h> |
1da177e4 LT |
33 | |
34 | #include <asm/io.h> | |
35 | ||
36 | #include <media/tuner.h> | |
37 | #include <media/audiochip.h> | |
1da177e4 | 38 | #include <media/ir-common.h> |
ac9cd976 | 39 | #include <media/ir-kbd-i2c.h> |
1da177e4 | 40 | #include <media/video-buf.h> |
d21838dd MCC |
41 | #include <sound/driver.h> |
42 | #include <sound/core.h> | |
43 | #include <sound/pcm.h> | |
1da177e4 LT |
44 | #include <media/video-buf-dvb.h> |
45 | ||
46 | #ifndef TRUE | |
47 | # define TRUE (1==1) | |
48 | #endif | |
49 | #ifndef FALSE | |
50 | # define FALSE (1==0) | |
51 | #endif | |
52 | #define UNSET (-1U) | |
53 | ||
1da177e4 LT |
54 | /* ----------------------------------------------------------- */ |
55 | /* enums */ | |
56 | ||
57 | enum saa7134_tvaudio_mode { | |
58 | TVAUDIO_FM_MONO = 1, | |
59 | TVAUDIO_FM_BG_STEREO = 2, | |
60 | TVAUDIO_FM_SAT_STEREO = 3, | |
61 | TVAUDIO_FM_K_STEREO = 4, | |
62 | TVAUDIO_NICAM_AM = 5, | |
63 | TVAUDIO_NICAM_FM = 6, | |
f7d66e82 | 64 | TVAUDIO_AM_MONO = 7 |
1da177e4 LT |
65 | }; |
66 | ||
67 | enum saa7134_audio_in { | |
68 | TV = 1, | |
69 | LINE1 = 2, | |
70 | LINE2 = 3, | |
71 | LINE2_LEFT, | |
72 | }; | |
73 | ||
74 | enum saa7134_video_out { | |
75 | CCIR656 = 1, | |
76 | }; | |
77 | ||
78 | /* ----------------------------------------------------------- */ | |
79 | /* static data */ | |
80 | ||
81 | struct saa7134_tvnorm { | |
82 | char *name; | |
83 | v4l2_std_id id; | |
84 | ||
85 | /* video decoder */ | |
86 | unsigned int sync_control; | |
87 | unsigned int luma_control; | |
88 | unsigned int chroma_ctrl1; | |
89 | unsigned int chroma_gain; | |
90 | unsigned int chroma_ctrl2; | |
91 | unsigned int vgate_misc; | |
92 | ||
93 | /* video scaler */ | |
94 | unsigned int h_start; | |
95 | unsigned int h_stop; | |
96 | unsigned int video_v_start; | |
97 | unsigned int video_v_stop; | |
f246a817 MS |
98 | unsigned int vbi_v_start_0; |
99 | unsigned int vbi_v_stop_0; | |
1da177e4 | 100 | unsigned int src_timing; |
f246a817 | 101 | unsigned int vbi_v_start_1; |
1da177e4 LT |
102 | }; |
103 | ||
104 | struct saa7134_tvaudio { | |
105 | char *name; | |
106 | v4l2_std_id std; | |
107 | enum saa7134_tvaudio_mode mode; | |
108 | int carr1; | |
109 | int carr2; | |
110 | }; | |
111 | ||
112 | struct saa7134_format { | |
113 | char *name; | |
114 | unsigned int fourcc; | |
115 | unsigned int depth; | |
116 | unsigned int pm; | |
117 | unsigned int vshift; /* vertical downsampling (for planar yuv) */ | |
118 | unsigned int hshift; /* horizontal downsampling (for planar yuv) */ | |
119 | unsigned int bswap:1; | |
120 | unsigned int wswap:1; | |
121 | unsigned int yuv:1; | |
122 | unsigned int planar:1; | |
123 | unsigned int uvswap:1; | |
124 | }; | |
125 | ||
126 | /* ----------------------------------------------------------- */ | |
127 | /* card configuration */ | |
128 | ||
129 | #define SAA7134_BOARD_NOAUTO UNSET | |
130 | #define SAA7134_BOARD_UNKNOWN 0 | |
131 | #define SAA7134_BOARD_PROTEUS_PRO 1 | |
132 | #define SAA7134_BOARD_FLYVIDEO3000 2 | |
133 | #define SAA7134_BOARD_FLYVIDEO2000 3 | |
134 | #define SAA7134_BOARD_EMPRESS 4 | |
135 | #define SAA7134_BOARD_MONSTERTV 5 | |
136 | #define SAA7134_BOARD_MD9717 6 | |
137 | #define SAA7134_BOARD_TVSTATION_RDS 7 | |
138 | #define SAA7134_BOARD_CINERGY400 8 | |
139 | #define SAA7134_BOARD_MD5044 9 | |
140 | #define SAA7134_BOARD_KWORLD 10 | |
141 | #define SAA7134_BOARD_CINERGY600 11 | |
142 | #define SAA7134_BOARD_MD7134 12 | |
143 | #define SAA7134_BOARD_TYPHOON_90031 13 | |
144 | #define SAA7134_BOARD_ELSA 14 | |
145 | #define SAA7134_BOARD_ELSA_500TV 15 | |
146 | #define SAA7134_BOARD_ASUSTeK_TVFM7134 16 | |
147 | #define SAA7134_BOARD_VA1000POWER 17 | |
148 | #define SAA7134_BOARD_BMK_MPEX_NOTUNER 18 | |
149 | #define SAA7134_BOARD_VIDEOMATE_TV 19 | |
150 | #define SAA7134_BOARD_CRONOS_PLUS 20 | |
151 | #define SAA7134_BOARD_10MOONSTVMASTER 21 | |
152 | #define SAA7134_BOARD_MD2819 22 | |
153 | #define SAA7134_BOARD_BMK_MPEX_TUNER 23 | |
154 | #define SAA7134_BOARD_TVSTATION_DVR 24 | |
155 | #define SAA7134_BOARD_ASUSTEK_TVFM7133 25 | |
156 | #define SAA7134_BOARD_PINNACLE_PCTV_STEREO 26 | |
157 | #define SAA7134_BOARD_MANLI_MTV002 27 | |
158 | #define SAA7134_BOARD_MANLI_MTV001 28 | |
159 | #define SAA7134_BOARD_TG3000TV 29 | |
160 | #define SAA7134_BOARD_ECS_TVP3XP 30 | |
161 | #define SAA7134_BOARD_ECS_TVP3XP_4CB5 31 | |
162 | #define SAA7134_BOARD_AVACSSMARTTV 32 | |
163 | #define SAA7134_BOARD_AVERMEDIA_DVD_EZMAKER 33 | |
164 | #define SAA7134_BOARD_NOVAC_PRIMETV7133 34 | |
165 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_305 35 | |
330a115a | 166 | #define SAA7134_BOARD_UPMOST_PURPLE_TV 36 |
1da177e4 LT |
167 | #define SAA7134_BOARD_ITEMS_MTV005 37 |
168 | #define SAA7134_BOARD_CINERGY200 38 | |
169 | #define SAA7134_BOARD_FLYTVPLATINUM_MINI 39 | |
170 | #define SAA7134_BOARD_VIDEOMATE_TV_PVR 40 | |
171 | #define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUS 41 | |
172 | #define SAA7134_BOARD_SABRENT_SBTTVFM 42 | |
173 | #define SAA7134_BOARD_ZOLID_XPERT_TV7134 43 | |
174 | #define SAA7134_BOARD_EMPIRE_PCI_TV_RADIO_LE 44 | |
ac19ecc6 | 175 | #define SAA7134_BOARD_AVERMEDIA_STUDIO_307 45 |
1da177e4 LT |
176 | #define SAA7134_BOARD_AVERMEDIA_CARDBUS 46 |
177 | #define SAA7134_BOARD_CINERGY400_CARDBUS 47 | |
178 | #define SAA7134_BOARD_CINERGY600_MK3 48 | |
179 | #define SAA7134_BOARD_VIDEOMATE_GOLD_PLUS 49 | |
180 | #define SAA7134_BOARD_PINNACLE_300I_DVBT_PAL 50 | |
181 | #define SAA7134_BOARD_PROVIDEO_PV952 51 | |
182 | #define SAA7134_BOARD_AVERMEDIA_305 52 | |
330a115a | 183 | #define SAA7134_BOARD_ASUSTeK_TVFM7135 53 |
1da177e4 LT |
184 | #define SAA7134_BOARD_FLYTVPLATINUM_FM 54 |
185 | #define SAA7134_BOARD_FLYDVBTDUO 55 | |
ac19ecc6 MCC |
186 | #define SAA7134_BOARD_AVERMEDIA_307 56 |
187 | #define SAA7134_BOARD_AVERMEDIA_GO_007_FM 57 | |
188 | #define SAA7134_BOARD_ADS_INSTANT_TV 58 | |
189 | #define SAA7134_BOARD_KWORLD_VSTREAM_XPERT 59 | |
10b7a903 | 190 | #define SAA7134_BOARD_FLYDVBT_DUO_CARDBUS 60 |
330a115a MCC |
191 | #define SAA7134_BOARD_PHILIPS_TOUGH 61 |
192 | #define SAA7134_BOARD_VIDEOMATE_TV_GOLD_PLUSII 62 | |
193 | #define SAA7134_BOARD_KWORLD_XPERT 63 | |
2f180710 | 194 | #define SAA7134_BOARD_FLYTV_DIGIMATRIX 64 |
260784dc | 195 | #define SAA7134_BOARD_KWORLD_TERMINATOR 65 |
4279f024 | 196 | #define SAA7134_BOARD_YUAN_TUN900 66 |
a8ff417e | 197 | #define SAA7134_BOARD_BEHOLD_409FM 67 |
6b961440 | 198 | #define SAA7134_BOARD_GOTVIEW_7135 68 |
2cf36ac4 HH |
199 | #define SAA7134_BOARD_PHILIPS_EUROPA 69 |
200 | #define SAA7134_BOARD_VIDEOMATE_DVBT_300 70 | |
201 | #define SAA7134_BOARD_VIDEOMATE_DVBT_200 71 | |
bb881f14 NS |
202 | #define SAA7134_BOARD_RTD_VFG7350 72 |
203 | #define SAA7134_BOARD_RTD_VFG7330 73 | |
058afaf8 | 204 | #define SAA7134_BOARD_FLYTVPLATINUM_MINI2 74 |
76bc3a39 | 205 | #define SAA7134_BOARD_AVERMEDIA_AVERTVHD_A180 75 |
cf1c5d1d | 206 | #define SAA7134_BOARD_MONSTERTV_MOBILE 76 |
c2f6f9d8 | 207 | #define SAA7134_BOARD_PINNACLE_PCTV_110i 77 |
28f02241 | 208 | #define SAA7134_BOARD_ASUSTeK_P7131_DUAL 78 |
17ce1ff9 | 209 | #define SAA7134_BOARD_SEDNA_PC_TV_CARDBUS 79 |
5d5c9904 | 210 | #define SAA7134_BOARD_ASUSTEK_DIGIMATRIX_TV 80 |
90e9df7f | 211 | #define SAA7134_BOARD_PHILIPS_TIGER 81 |
80d2ad92 | 212 | #define SAA7134_BOARD_MSI_TVATANYWHERE_PLUS 82 |