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