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