aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/tveeprom.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/tveeprom.c')
-rw-r--r--drivers/media/video/tveeprom.c471
1 files changed, 237 insertions, 234 deletions
diff --git a/drivers/media/video/tveeprom.c b/drivers/media/video/tveeprom.c
index 4d294e2becb9..11c15787e25f 100644
--- a/drivers/media/video/tveeprom.c
+++ b/drivers/media/video/tveeprom.c
@@ -46,11 +46,12 @@ MODULE_DESCRIPTION("i2c Hauppauge eeprom decoder driver");
46MODULE_AUTHOR("John Klar"); 46MODULE_AUTHOR("John Klar");
47MODULE_LICENSE("GPL"); 47MODULE_LICENSE("GPL");
48 48
49static int debug = 0; 49static int debug;
50module_param(debug, int, 0644); 50module_param(debug, int, 0644);
51MODULE_PARM_DESC(debug, "Debug level (0-1)"); 51MODULE_PARM_DESC(debug, "Debug level (0-1)");
52 52
53#define STRM(array,i) (i < sizeof(array)/sizeof(char*) ? array[i] : "unknown") 53#define STRM(array, i) \
54 (i < sizeof(array) / sizeof(char *) ? array[i] : "unknown")
54 55
55#define tveeprom_info(fmt, arg...) \ 56#define tveeprom_info(fmt, arg...) \
56 v4l_printk(KERN_INFO, "tveeprom", c->adapter, c->addr, fmt , ## arg) 57 v4l_printk(KERN_INFO, "tveeprom", c->adapter, c->addr, fmt , ## arg)
@@ -58,7 +59,8 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
58 v4l_printk(KERN_WARNING, "tveeprom", c->adapter, c->addr, fmt , ## arg) 59 v4l_printk(KERN_WARNING, "tveeprom", c->adapter, c->addr, fmt , ## arg)
59#define tveeprom_dbg(fmt, arg...) do { \ 60#define tveeprom_dbg(fmt, arg...) do { \
60 if (debug) \ 61 if (debug) \
61 v4l_printk(KERN_DEBUG, "tveeprom", c->adapter, c->addr, fmt , ## arg); \ 62 v4l_printk(KERN_DEBUG, "tveeprom", \
63 c->adapter, c->addr, fmt , ## arg); \
62 } while (0) 64 } while (0)
63 65
64/* 66/*
@@ -94,170 +96,170 @@ static struct HAUPPAUGE_TUNER
94hauppauge_tuner[] = 96hauppauge_tuner[] =
95{ 97{
96 /* 0-9 */ 98 /* 0-9 */
97 { TUNER_ABSENT, "None" }, 99 { TUNER_ABSENT, "None" },
98 { TUNER_ABSENT, "External" }, 100 { TUNER_ABSENT, "External" },
99 { TUNER_ABSENT, "Unspecified" }, 101 { TUNER_ABSENT, "Unspecified" },
100 { TUNER_PHILIPS_PAL, "Philips FI1216" }, 102 { TUNER_PHILIPS_PAL, "Philips FI1216" },
101 { TUNER_PHILIPS_SECAM, "Philips FI1216MF" }, 103 { TUNER_PHILIPS_SECAM, "Philips FI1216MF" },
102 { TUNER_PHILIPS_NTSC, "Philips FI1236" }, 104 { TUNER_PHILIPS_NTSC, "Philips FI1236" },
103 { TUNER_PHILIPS_PAL_I, "Philips FI1246" }, 105 { TUNER_PHILIPS_PAL_I, "Philips FI1246" },
104 { TUNER_PHILIPS_PAL_DK,"Philips FI1256" }, 106 { TUNER_PHILIPS_PAL_DK, "Philips FI1256" },
105 { TUNER_PHILIPS_PAL, "Philips FI1216 MK2" }, 107 { TUNER_PHILIPS_PAL, "Philips FI1216 MK2" },
106 { TUNER_PHILIPS_SECAM, "Philips FI1216MF MK2" }, 108 { TUNER_PHILIPS_SECAM, "Philips FI1216MF MK2" },
107 /* 10-19 */ 109 /* 10-19 */
108 { TUNER_PHILIPS_NTSC, "Philips FI1236 MK2" }, 110 { TUNER_PHILIPS_NTSC, "Philips FI1236 MK2" },
109 { TUNER_PHILIPS_PAL_I, "Philips FI1246 MK2" }, 111 { TUNER_PHILIPS_PAL_I, "Philips FI1246 MK2" },
110 { TUNER_PHILIPS_PAL_DK,"Philips FI1256 MK2" }, 112 { TUNER_PHILIPS_PAL_DK, "Philips FI1256 MK2" },
111 { TUNER_TEMIC_NTSC, "Temic 4032FY5" }, 113 { TUNER_TEMIC_NTSC, "Temic 4032FY5" },
112 { TUNER_TEMIC_PAL, "Temic 4002FH5" }, 114 { TUNER_TEMIC_PAL, "Temic 4002FH5" },
113 { TUNER_TEMIC_PAL_I, "Temic 4062FY5" }, 115 { TUNER_TEMIC_PAL_I, "Temic 4062FY5" },
114 { TUNER_PHILIPS_PAL, "Philips FR1216 MK2" }, 116 { TUNER_PHILIPS_PAL, "Philips FR1216 MK2" },
115 { TUNER_PHILIPS_SECAM, "Philips FR1216MF MK2" }, 117 { TUNER_PHILIPS_SECAM, "Philips FR1216MF MK2" },
116 { TUNER_PHILIPS_NTSC, "Philips FR1236 MK2" }, 118 { TUNER_PHILIPS_NTSC, "Philips FR1236 MK2" },
117 { TUNER_PHILIPS_PAL_I, "Philips FR1246 MK2" }, 119 { TUNER_PHILIPS_PAL_I, "Philips FR1246 MK2" },
118 /* 20-29 */ 120 /* 20-29 */
119 { TUNER_PHILIPS_PAL_DK,"Philips FR1256 MK2" }, 121 { TUNER_PHILIPS_PAL_DK, "Philips FR1256 MK2" },
120 { TUNER_PHILIPS_PAL, "Philips FM1216" }, 122 { TUNER_PHILIPS_PAL, "Philips FM1216" },
121 { TUNER_PHILIPS_SECAM, "Philips FM1216MF" }, 123 { TUNER_PHILIPS_SECAM, "Philips FM1216MF" },
122 { TUNER_PHILIPS_NTSC, "Philips FM1236" }, 124 { TUNER_PHILIPS_NTSC, "Philips FM1236" },
123 { TUNER_PHILIPS_PAL_I, "Philips FM1246" }, 125 { TUNER_PHILIPS_PAL_I, "Philips FM1246" },
124 { TUNER_PHILIPS_PAL_DK,"Philips FM1256" }, 126 { TUNER_PHILIPS_PAL_DK, "Philips FM1256" },
125 { TUNER_TEMIC_4036FY5_NTSC, "Temic 4036FY5" }, 127 { TUNER_TEMIC_4036FY5_NTSC, "Temic 4036FY5" },
126 { TUNER_ABSENT, "Samsung TCPN9082D" }, 128 { TUNER_ABSENT, "Samsung TCPN9082D" },
127 { TUNER_ABSENT, "Samsung TCPM9092P" }, 129 { TUNER_ABSENT, "Samsung TCPM9092P" },
128 { TUNER_TEMIC_4006FH5_PAL, "Temic 4006FH5" }, 130 { TUNER_TEMIC_4006FH5_PAL, "Temic 4006FH5" },
129 /* 30-39 */ 131 /* 30-39 */
130 { TUNER_ABSENT, "Samsung TCPN9085D" }, 132 { TUNER_ABSENT, "Samsung TCPN9085D" },
131 { TUNER_ABSENT, "Samsung TCPB9085P" }, 133 { TUNER_ABSENT, "Samsung TCPB9085P" },
132 { TUNER_ABSENT, "Samsung TCPL9091P" }, 134 { TUNER_ABSENT, "Samsung TCPL9091P" },
133 { TUNER_TEMIC_4039FR5_NTSC, "Temic 4039FR5" }, 135 { TUNER_TEMIC_4039FR5_NTSC, "Temic 4039FR5" },
134 { TUNER_PHILIPS_FQ1216ME, "Philips FQ1216 ME" }, 136 { TUNER_PHILIPS_FQ1216ME, "Philips FQ1216 ME" },
135 { TUNER_TEMIC_4066FY5_PAL_I, "Temic 4066FY5" }, 137 { TUNER_TEMIC_4066FY5_PAL_I, "Temic 4066FY5" },
136 { TUNER_PHILIPS_NTSC, "Philips TD1536" }, 138 { TUNER_PHILIPS_NTSC, "Philips TD1536" },
137 { TUNER_PHILIPS_NTSC, "Philips TD1536D" }, 139 { TUNER_PHILIPS_NTSC, "Philips TD1536D" },
138 { TUNER_PHILIPS_NTSC, "Philips FMR1236" }, /* mono radio */ 140 { TUNER_PHILIPS_NTSC, "Philips FMR1236" }, /* mono radio */
139 { TUNER_ABSENT, "Philips FI1256MP" }, 141 { TUNER_ABSENT, "Philips FI1256MP" },
140 /* 40-49 */ 142 /* 40-49 */
141 { TUNER_ABSENT, "Samsung TCPQ9091P" }, 143 { TUNER_ABSENT, "Samsung TCPQ9091P" },
142 { TUNER_TEMIC_4006FN5_MULTI_PAL, "Temic 4006FN5" }, 144 { TUNER_TEMIC_4006FN5_MULTI_PAL, "Temic 4006FN5" },
143 { TUNER_TEMIC_4009FR5_PAL, "Temic 4009FR5" }, 145 { TUNER_TEMIC_4009FR5_PAL, "Temic 4009FR5" },
144 { TUNER_TEMIC_4046FM5, "Temic 4046FM5" }, 146 { TUNER_TEMIC_4046FM5, "Temic 4046FM5" },
145 { TUNER_TEMIC_4009FN5_MULTI_PAL_FM, "Temic 4009FN5" }, 147 { TUNER_TEMIC_4009FN5_MULTI_PAL_FM, "Temic 4009FN5" },
146 { TUNER_ABSENT, "Philips TD1536D FH 44"}, 148 { TUNER_ABSENT, "Philips TD1536D FH 44"},
147 { TUNER_LG_NTSC_FM, "LG TP18NSR01F"}, 149 { TUNER_LG_NTSC_FM, "LG TP18NSR01F"},
148 { TUNER_LG_PAL_FM, "LG TP18PSB01D"}, 150 { TUNER_LG_PAL_FM, "LG TP18PSB01D"},
149 { TUNER_LG_PAL, "LG TP18PSB11D"}, 151 { TUNER_LG_PAL, "LG TP18PSB11D"},
150 { TUNER_LG_PAL_I_FM, "LG TAPC-I001D"}, 152 { TUNER_LG_PAL_I_FM, "LG TAPC-I001D"},
151 /* 50-59 */ 153 /* 50-59 */
152 { TUNER_LG_PAL_I, "LG TAPC-I701D"}, 154 { TUNER_LG_PAL_I, "LG TAPC-I701D"},
153 { TUNER_ABSENT, "Temic 4042FI5"}, 155 { TUNER_ABSENT, "Temic 4042FI5"},
154 { TUNER_MICROTUNE_4049FM5, "Microtune 4049 FM5"}, 156 { TUNER_MICROTUNE_4049FM5, "Microtune 4049 FM5"},
155 { TUNER_ABSENT, "LG TPI8NSR11F"}, 157 { TUNER_ABSENT, "LG TPI8NSR11F"},
156 { TUNER_ABSENT, "Microtune 4049 FM5 Alt I2C"}, 158 { TUNER_ABSENT, "Microtune 4049 FM5 Alt I2C"},
157 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FQ1216ME MK3"}, 159 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FQ1216ME MK3"},
158 { TUNER_ABSENT, "Philips FI1236 MK3"}, 160 { TUNER_ABSENT, "Philips FI1236 MK3"},
159 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216 ME MK3"}, 161 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216 ME MK3"},
160 { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK3"}, 162 { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK3"},
161 { TUNER_ABSENT, "Philips FM1216MP MK3"}, 163 { TUNER_ABSENT, "Philips FM1216MP MK3"},
162 /* 60-69 */ 164 /* 60-69 */
163 { TUNER_PHILIPS_FM1216ME_MK3, "LG S001D MK3"}, 165 { TUNER_PHILIPS_FM1216ME_MK3, "LG S001D MK3"},
164 { TUNER_ABSENT, "LG M001D MK3"}, 166 { TUNER_ABSENT, "LG M001D MK3"},
165 { TUNER_PHILIPS_FM1216ME_MK3, "LG S701D MK3"}, 167 { TUNER_PHILIPS_FM1216ME_MK3, "LG S701D MK3"},
166 { TUNER_ABSENT, "LG M701D MK3"}, 168 { TUNER_ABSENT, "LG M701D MK3"},
167 { TUNER_ABSENT, "Temic 4146FM5"}, 169 { TUNER_ABSENT, "Temic 4146FM5"},
168 { TUNER_ABSENT, "Temic 4136FY5"}, 170 { TUNER_ABSENT, "Temic 4136FY5"},
169 { TUNER_ABSENT, "Temic 4106FH5"}, 171 { TUNER_ABSENT, "Temic 4106FH5"},
170 { TUNER_ABSENT, "Philips FQ1216LMP MK3"}, 172 { TUNER_ABSENT, "Philips FQ1216LMP MK3"},
171 { TUNER_LG_NTSC_TAPE, "LG TAPE H001F MK3"}, 173 { TUNER_LG_NTSC_TAPE, "LG TAPE H001F MK3"},
172 { TUNER_LG_NTSC_TAPE, "LG TAPE H701F MK3"}, 174 { TUNER_LG_NTSC_TAPE, "LG TAPE H701F MK3"},
173 /* 70-79 */ 175 /* 70-79 */
174 { TUNER_ABSENT, "LG TALN H200T"}, 176 { TUNER_ABSENT, "LG TALN H200T"},
175 { TUNER_ABSENT, "LG TALN H250T"}, 177 { TUNER_ABSENT, "LG TALN H250T"},
176 { TUNER_ABSENT, "LG TALN M200T"}, 178 { TUNER_ABSENT, "LG TALN M200T"},
177 { TUNER_ABSENT, "LG TALN Z200T"}, 179 { TUNER_ABSENT, "LG TALN Z200T"},
178 { TUNER_ABSENT, "LG TALN S200T"}, 180 { TUNER_ABSENT, "LG TALN S200T"},
179 { TUNER_ABSENT, "Thompson DTT7595"}, 181 { TUNER_ABSENT, "Thompson DTT7595"},
180 { TUNER_ABSENT, "Thompson DTT7592"}, 182 { TUNER_ABSENT, "Thompson DTT7592"},
181 { TUNER_ABSENT, "Silicon TDA8275C1 8290"}, 183 { TUNER_ABSENT, "Silicon TDA8275C1 8290"},
182 { TUNER_ABSENT, "Silicon TDA8275C1 8290 FM"}, 184 { TUNER_ABSENT, "Silicon TDA8275C1 8290 FM"},
183 { TUNER_ABSENT, "Thompson DTT757"}, 185 { TUNER_ABSENT, "Thompson DTT757"},
184 /* 80-89 */ 186 /* 80-89 */
185 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FQ1216LME MK3"}, 187 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FQ1216LME MK3"},
186 { TUNER_LG_PAL_NEW_TAPC, "LG TAPC G701D"}, 188 { TUNER_LG_PAL_NEW_TAPC, "LG TAPC G701D"},
187 { TUNER_LG_NTSC_NEW_TAPC, "LG TAPC H791F"}, 189 { TUNER_LG_NTSC_NEW_TAPC, "LG TAPC H791F"},
188 { TUNER_LG_PAL_NEW_TAPC, "TCL 2002MB 3"}, 190 { TUNER_LG_PAL_NEW_TAPC, "TCL 2002MB 3"},
189 { TUNER_LG_PAL_NEW_TAPC, "TCL 2002MI 3"}, 191 { TUNER_LG_PAL_NEW_TAPC, "TCL 2002MI 3"},
190 { TUNER_TCL_2002N, "TCL 2002N 6A"}, 192 { TUNER_TCL_2002N, "TCL 2002N 6A"},
191 { TUNER_PHILIPS_FM1236_MK3, "Philips FQ1236 MK3"}, 193 { TUNER_PHILIPS_FM1236_MK3, "Philips FQ1236 MK3"},
192 { TUNER_SAMSUNG_TCPN_2121P30A, "Samsung TCPN 2121P30A"}, 194 { TUNER_SAMSUNG_TCPN_2121P30A, "Samsung TCPN 2121P30A"},
193 { TUNER_ABSENT, "Samsung TCPE 4121P30A"}, 195 { TUNER_ABSENT, "Samsung TCPE 4121P30A"},
194 { TUNER_PHILIPS_FM1216ME_MK3, "TCL MFPE05 2"}, 196 { TUNER_PHILIPS_FM1216ME_MK3, "TCL MFPE05 2"},
195 /* 90-99 */ 197 /* 90-99 */
196 { TUNER_ABSENT, "LG TALN H202T"}, 198 { TUNER_ABSENT, "LG TALN H202T"},
197 { TUNER_PHILIPS_FQ1216AME_MK4, "Philips FQ1216AME MK4"}, 199 { TUNER_PHILIPS_FQ1216AME_MK4, "Philips FQ1216AME MK4"},
198 { TUNER_PHILIPS_FQ1236A_MK4, "Philips FQ1236A MK4"}, 200 { TUNER_PHILIPS_FQ1236A_MK4, "Philips FQ1236A MK4"},
199 { TUNER_ABSENT, "Philips FQ1286A MK4"}, 201 { TUNER_ABSENT, "Philips FQ1286A MK4"},
200 { TUNER_ABSENT, "Philips FQ1216ME MK5"}, 202 { TUNER_ABSENT, "Philips FQ1216ME MK5"},
201 { TUNER_ABSENT, "Philips FQ1236 MK5"}, 203 { TUNER_ABSENT, "Philips FQ1236 MK5"},
202 { TUNER_SAMSUNG_TCPG_6121P30A, "Samsung TCPG 6121P30A"}, 204 { TUNER_SAMSUNG_TCPG_6121P30A, "Samsung TCPG 6121P30A"},
203 { TUNER_TCL_2002MB, "TCL 2002MB_3H"}, 205 { TUNER_TCL_2002MB, "TCL 2002MB_3H"},
204 { TUNER_ABSENT, "TCL 2002MI_3H"}, 206 { TUNER_ABSENT, "TCL 2002MI_3H"},
205 { TUNER_TCL_2002N, "TCL 2002N 5H"}, 207 { TUNER_TCL_2002N, "TCL 2002N 5H"},
206 /* 100-109 */ 208 /* 100-109 */
207 { TUNER_PHILIPS_FMD1216ME_MK3, "Philips FMD1216ME"}, 209 { TUNER_PHILIPS_FMD1216ME_MK3, "Philips FMD1216ME"},
208 { TUNER_TEA5767, "Philips TEA5768HL FM Radio"}, 210 { TUNER_TEA5767, "Philips TEA5768HL FM Radio"},
209 { TUNER_ABSENT, "Panasonic ENV57H12D5"}, 211 { TUNER_ABSENT, "Panasonic ENV57H12D5"},
210 { TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"}, 212 { TUNER_PHILIPS_FM1236_MK3, "TCL MFNM05-4"},
211 { TUNER_ABSENT, "TCL MNM05-4"}, 213 { TUNER_ABSENT, "TCL MNM05-4"},
212 { TUNER_PHILIPS_FM1216ME_MK3, "TCL MPE05-2"}, 214 { TUNER_PHILIPS_FM1216ME_MK3, "TCL MPE05-2"},
213 { TUNER_ABSENT, "TCL MQNM05-4"}, 215 { TUNER_ABSENT, "TCL MQNM05-4"},
214 { TUNER_ABSENT, "LG TAPC-W701D"}, 216 { TUNER_ABSENT, "LG TAPC-W701D"},
215 { TUNER_ABSENT, "TCL 9886P-WM"}, 217 { TUNER_ABSENT, "TCL 9886P-WM"},
216 { TUNER_ABSENT, "TCL 1676NM-WM"}, 218 { TUNER_ABSENT, "TCL 1676NM-WM"},
217 /* 110-119 */ 219 /* 110-119 */
218 { TUNER_ABSENT, "Thompson DTT75105"}, 220 { TUNER_ABSENT, "Thompson DTT75105"},
219 { TUNER_ABSENT, "Conexant_CX24109"}, 221 { TUNER_ABSENT, "Conexant_CX24109"},
220 { TUNER_TCL_2002N, "TCL M2523_5N_E"}, 222 { TUNER_TCL_2002N, "TCL M2523_5N_E"},
221 { TUNER_TCL_2002MB, "TCL M2523_3DB_E"}, 223 { TUNER_TCL_2002MB, "TCL M2523_3DB_E"},
222 { TUNER_ABSENT, "Philips 8275A"}, 224 { TUNER_ABSENT, "Philips 8275A"},
223 { TUNER_ABSENT, "Microtune MT2060"}, 225 { TUNER_ABSENT, "Microtune MT2060"},
224 { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK5"}, 226 { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK5"},
225 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216ME MK5"}, 227 { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216ME MK5"},
226 { TUNER_ABSENT, "TCL M2523_3DI_E"}, 228 { TUNER_ABSENT, "TCL M2523_3DI_E"},
227 { TUNER_ABSENT, "Samsung THPD5222FG30A"}, 229 { TUNER_ABSENT, "Samsung THPD5222FG30A"},
228 /* 120-129 */ 230 /* 120-129 */
229 { TUNER_XC2028, "Xceive XC3028"}, 231 { TUNER_XC2028, "Xceive XC3028"},
230 { TUNER_ABSENT, "Philips FQ1216LME MK5"}, 232 { TUNER_ABSENT, "Philips FQ1216LME MK5"},
231 { TUNER_ABSENT, "Philips FQD1216LME"}, 233 { TUNER_ABSENT, "Philips FQD1216LME"},
232 { TUNER_ABSENT, "Conexant CX24118A"}, 234 { TUNER_ABSENT, "Conexant CX24118A"},
233 { TUNER_ABSENT, "TCL DMF11WIP"}, 235 { TUNER_ABSENT, "TCL DMF11WIP"},
234 { TUNER_ABSENT, "TCL MFNM05_4H_E"}, 236 { TUNER_ABSENT, "TCL MFNM05_4H_E"},
235 { TUNER_ABSENT, "TCL MNM05_4H_E"}, 237 { TUNER_ABSENT, "TCL MNM05_4H_E"},
236 { TUNER_ABSENT, "TCL MPE05_2H_E"}, 238 { TUNER_ABSENT, "TCL MPE05_2H_E"},
237 { TUNER_ABSENT, "TCL MQNM05_4_U"}, 239 { TUNER_ABSENT, "TCL MQNM05_4_U"},
238 { TUNER_ABSENT, "TCL M2523_5NH_E"}, 240 { TUNER_ABSENT, "TCL M2523_5NH_E"},
239 /* 130-139 */ 241 /* 130-139 */
240 { TUNER_ABSENT, "TCL M2523_3DBH_E"}, 242 { TUNER_ABSENT, "TCL M2523_3DBH_E"},
241 { TUNER_ABSENT, "TCL M2523_3DIH_E"}, 243 { TUNER_ABSENT, "TCL M2523_3DIH_E"},
242 { TUNER_ABSENT, "TCL MFPE05_2_U"}, 244 { TUNER_ABSENT, "TCL MFPE05_2_U"},
243 { TUNER_ABSENT, "Philips FMD1216MEX"}, 245 { TUNER_ABSENT, "Philips FMD1216MEX"},
244 { TUNER_ABSENT, "Philips FRH2036B"}, 246 { TUNER_ABSENT, "Philips FRH2036B"},
245 { TUNER_ABSENT, "Panasonic ENGF75_01GF"}, 247 { TUNER_ABSENT, "Panasonic ENGF75_01GF"},
246 { TUNER_ABSENT, "MaxLinear MXL5005"}, 248 { TUNER_ABSENT, "MaxLinear MXL5005"},
247 { TUNER_ABSENT, "MaxLinear MXL5003"}, 249 { TUNER_ABSENT, "MaxLinear MXL5003"},
248 { TUNER_ABSENT, "Xceive XC2028"}, 250 { TUNER_ABSENT, "Xceive XC2028"},
249 { TUNER_ABSENT, "Microtune MT2131"}, 251 { TUNER_ABSENT, "Microtune MT2131"},
250 /* 140-149 */ 252 /* 140-149 */
251 { TUNER_ABSENT, "Philips 8275A_8295"}, 253 { TUNER_ABSENT, "Philips 8275A_8295"},
252 { TUNER_ABSENT, "TCL MF02GIP_5N_E"}, 254 { TUNER_ABSENT, "TCL MF02GIP_5N_E"},
253 { TUNER_ABSENT, "TCL MF02GIP_3DB_E"}, 255 { TUNER_ABSENT, "TCL MF02GIP_3DB_E"},
254 { TUNER_ABSENT, "TCL MF02GIP_3DI_E"}, 256 { TUNER_ABSENT, "TCL MF02GIP_3DI_E"},
255 { TUNER_ABSENT, "Microtune MT2266"}, 257 { TUNER_ABSENT, "Microtune MT2266"},
256 { TUNER_ABSENT, "TCL MF10WPP_4N_E"}, 258 { TUNER_ABSENT, "TCL MF10WPP_4N_E"},
257 { TUNER_ABSENT, "LG TAPQ_H702F"}, 259 { TUNER_ABSENT, "LG TAPQ_H702F"},
258 { TUNER_ABSENT, "TCL M09WPP_4N_E"}, 260 { TUNER_ABSENT, "TCL M09WPP_4N_E"},
259 { TUNER_ABSENT, "MaxLinear MXL5005_v2"}, 261 { TUNER_ABSENT, "MaxLinear MXL5005_v2"},
260 { TUNER_PHILIPS_TDA8290, "Philips 18271_8295"}, 262 { TUNER_PHILIPS_TDA8290, "Philips 18271_8295"},
261}; 263};
262 264
263static struct HAUPPAUGE_AUDIOIC 265static struct HAUPPAUGE_AUDIOIC
@@ -344,37 +346,37 @@ static const char *decoderIC[] = {
344static int hasRadioTuner(int tunerType) 346static int hasRadioTuner(int tunerType)
345{ 347{
346 switch (tunerType) { 348 switch (tunerType) {
347 case 18: //PNPEnv_TUNER_FR1236_MK2: 349 case 18: /* PNPEnv_TUNER_FR1236_MK2 */
348 case 23: //PNPEnv_TUNER_FM1236: 350 case 23: /* PNPEnv_TUNER_FM1236 */
349 case 38: //PNPEnv_TUNER_FMR1236: 351 case 38: /* PNPEnv_TUNER_FMR1236 */
350 case 16: //PNPEnv_TUNER_FR1216_MK2: 352 case 16: /* PNPEnv_TUNER_FR1216_MK2 */
351 case 19: //PNPEnv_TUNER_FR1246_MK2: 353 case 19: /* PNPEnv_TUNER_FR1246_MK2 */
352 case 21: //PNPEnv_TUNER_FM1216: 354 case 21: /* PNPEnv_TUNER_FM1216 */
353 case 24: //PNPEnv_TUNER_FM1246: 355 case 24: /* PNPEnv_TUNER_FM1246 */
354 case 17: //PNPEnv_TUNER_FR1216MF_MK2: 356 case 17: /* PNPEnv_TUNER_FR1216MF_MK2 */
355 case 22: //PNPEnv_TUNER_FM1216MF: 357 case 22: /* PNPEnv_TUNER_FM1216MF */
356 case 20: //PNPEnv_TUNER_FR1256_MK2: 358 case 20: /* PNPEnv_TUNER_FR1256_MK2 */
357 case 25: //PNPEnv_TUNER_FM1256: 359 case 25: /* PNPEnv_TUNER_FM1256 */
358 case 33: //PNPEnv_TUNER_4039FR5: 360 case 33: /* PNPEnv_TUNER_4039FR5 */
359 case 42: //PNPEnv_TUNER_4009FR5: 361 case 42: /* PNPEnv_TUNER_4009FR5 */
360 case 52: //PNPEnv_TUNER_4049FM5: 362 case 52: /* PNPEnv_TUNER_4049FM5 */
361 case 54: //PNPEnv_TUNER_4049FM5_AltI2C: 363 case 54: /* PNPEnv_TUNER_4049FM5_AltI2C */
362 case 44: //PNPEnv_TUNER_4009FN5: 364 case 44: /* PNPEnv_TUNER_4009FN5 */
363 case 31: //PNPEnv_TUNER_TCPB9085P: 365 case 31: /* PNPEnv_TUNER_TCPB9085P */
364 case 30: //PNPEnv_TUNER_TCPN9085D: 366 case 30: /* PNPEnv_TUNER_TCPN9085D */
365 case 46: //PNPEnv_TUNER_TP18NSR01F: 367 case 46: /* PNPEnv_TUNER_TP18NSR01F */
366 case 47: //PNPEnv_TUNER_TP18PSB01D: 368 case 47: /* PNPEnv_TUNER_TP18PSB01D */
367 case 49: //PNPEnv_TUNER_TAPC_I001D: 369 case 49: /* PNPEnv_TUNER_TAPC_I001D */
368 case 60: //PNPEnv_TUNER_TAPE_S001D_MK3: 370 case 60: /* PNPEnv_TUNER_TAPE_S001D_MK3 */
369 case 57: //PNPEnv_TUNER_FM1216ME_MK3: 371 case 57: /* PNPEnv_TUNER_FM1216ME_MK3 */
370 case 59: //PNPEnv_TUNER_FM1216MP_MK3: 372 case 59: /* PNPEnv_TUNER_FM1216MP_MK3 */
371 case 58: //PNPEnv_TUNER_FM1236_MK3: 373 case 58: /* PNPEnv_TUNER_FM1236_MK3 */
372 case 68: //PNPEnv_TUNER_TAPE_H001F_MK3: 374 case 68: /* PNPEnv_TUNER_TAPE_H001F_MK3 */
373 case 61: //PNPEnv_TUNER_TAPE_M001D_MK3: 375 case 61: /* PNPEnv_TUNER_TAPE_M001D_MK3 */
374 case 78: //PNPEnv_TUNER_TDA8275C1_8290_FM: 376 case 78: /* PNPEnv_TUNER_TDA8275C1_8290_FM */
375 case 89: //PNPEnv_TUNER_TCL_MFPE05_2: 377 case 89: /* PNPEnv_TUNER_TCL_MFPE05_2 */
376 case 92: //PNPEnv_TUNER_PHILIPS_FQ1236A_MK4: 378 case 92: /* PNPEnv_TUNER_PHILIPS_FQ1236A_MK4 */
377 case 105: 379 case 105:
378 return 1; 380 return 1;
379 } 381 }
380 return 0; 382 return 0;
@@ -392,7 +394,8 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
392 ** 394 **
393 ** In our (ivtv) case we're interested in the following: 395 ** In our (ivtv) case we're interested in the following:
394 ** tuner type: tag [00].05 or [0a].01 (index into hauppauge_tuner) 396 ** tuner type: tag [00].05 or [0a].01 (index into hauppauge_tuner)
395 ** tuner fmts: tag [00].04 or [0a].00 (bitmask index into hauppauge_tuner_fmt) 397 ** tuner fmts: tag [00].04 or [0a].00 (bitmask index into
398 ** hauppauge_tuner_fmt)
396 ** radio: tag [00].{last} or [0e].00 (bitmask. bit2=FM) 399 ** radio: tag [00].{last} or [0e].00 (bitmask. bit2=FM)
397 ** audio proc: tag [02].01 or [05].00 (mask with 0x7f) 400 ** audio proc: tag [02].01 or [05].00 (mask with 0x7f)
398 ** decoder proc: tag [09].01) 401 ** decoder proc: tag [09].01)
@@ -451,16 +454,17 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
451 ++i; 454 ++i;
452 } else { 455 } else {
453 tveeprom_warn("Encountered bad packet header [%02x]. " 456 tveeprom_warn("Encountered bad packet header [%02x]. "
454 "Corrupt or not a Hauppauge eeprom.\n", eeprom_data[i]); 457 "Corrupt or not a Hauppauge eeprom.\n",
458 eeprom_data[i]);
455 return; 459 return;
456 } 460 }
457 461
458 if (debug) { 462 if (debug) {
459 tveeprom_info("Tag [%02x] + %d bytes:", eeprom_data[i], len - 1); 463 tveeprom_info("Tag [%02x] + %d bytes:",
460 for(j = 1; j < len; j++) { 464 eeprom_data[i], len - 1);
461 printk(" %02x", eeprom_data[i + j]); 465 for (j = 1; j < len; j++)
462 } 466 printk(KERN_CONT " %02x", eeprom_data[i + j]);
463 printk("\n"); 467 printk(KERN_CONT "\n");
464 } 468 }
465 469
466 /* process by tag */ 470 /* process by tag */
@@ -511,16 +515,16 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
511 (eeprom_data[i+6] << 8) + 515 (eeprom_data[i+6] << 8) +
512 (eeprom_data[i+7] << 16); 516 (eeprom_data[i+7] << 16);
513 517
514 if ( (eeprom_data[i + 8] & 0xf0) && 518 if ((eeprom_data[i + 8] & 0xf0) &&
515 (tvee->serial_number < 0xffffff) ) { 519 (tvee->serial_number < 0xffffff)) {
516 tvee->MAC_address[0] = 0x00; 520 tvee->MAC_address[0] = 0x00;
517 tvee->MAC_address[1] = 0x0D; 521 tvee->MAC_address[1] = 0x0D;
518 tvee->MAC_address[2] = 0xFE; 522 tvee->MAC_address[2] = 0xFE;
519 tvee->MAC_address[3] = eeprom_data[i + 7]; 523 tvee->MAC_address[3] = eeprom_data[i + 7];
520 tvee->MAC_address[4] = eeprom_data[i + 6]; 524 tvee->MAC_address[4] = eeprom_data[i + 6];
521 tvee->MAC_address[5] = eeprom_data[i + 5]; 525 tvee->MAC_address[5] = eeprom_data[i + 5];
522 tvee->has_MAC_address = 1; 526 tvee->has_MAC_address = 1;
523 } 527 }
524 break; 528 break;
525 529
526 case 0x05: 530 case 0x05:
@@ -544,7 +548,7 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
544 (eeprom_data[i + 3] << 16) + 548 (eeprom_data[i + 3] << 16) +
545 (eeprom_data[i + 4] << 24); 549 (eeprom_data[i + 4] << 24);
546 tvee->revision = 550 tvee->revision =
547 eeprom_data[i +5 ] + 551 eeprom_data[i + 5] +
548 (eeprom_data[i + 6] << 8) + 552 (eeprom_data[i + 6] << 8) +
549 (eeprom_data[i + 7] << 16); 553 (eeprom_data[i + 7] << 16);
550 break; 554 break;
@@ -564,16 +568,16 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
564 case 0x0a: 568 case 0x0a:
565 /* tag 'Tuner' */ 569 /* tag 'Tuner' */
566 if (beenhere == 0) { 570 if (beenhere == 0) {
567 tuner1 = eeprom_data[i+2]; 571 tuner1 = eeprom_data[i + 2];
568 t_format1 = eeprom_data[i+1]; 572 t_format1 = eeprom_data[i + 1];
569 beenhere = 1; 573 beenhere = 1;
570 } else { 574 } else {
571 /* a second (radio) tuner may be present */ 575 /* a second (radio) tuner may be present */
572 tuner2 = eeprom_data[i+2]; 576 tuner2 = eeprom_data[i + 2];
573 t_format2 = eeprom_data[i+1]; 577 t_format2 = eeprom_data[i + 1];
574 if (t_format2 == 0) { /* not a TV tuner? */ 578 /* not a TV tuner? */
579 if (t_format2 == 0)
575 tvee->has_radio = 1; /* must be radio */ 580 tvee->has_radio = 1; /* must be radio */
576 }
577 } 581 }
578 break; 582 break;
579 583
@@ -601,7 +605,8 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
601 /* case 0x12: tag 'InfoBits' */ 605 /* case 0x12: tag 'InfoBits' */
602 606
603 default: 607 default:
604 tveeprom_dbg("Not sure what to do with tag [%02x]\n", tag); 608 tveeprom_dbg("Not sure what to do with tag [%02x]\n",
609 tag);
605 /* dump the rest of the packet? */ 610 /* dump the rest of the packet? */
606 } 611 }
607 } 612 }
@@ -615,7 +620,7 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
615 tvee->rev_str[0] = 32 + ((tvee->revision >> 18) & 0x3f); 620 tvee->rev_str[0] = 32 + ((tvee->revision >> 18) & 0x3f);
616 tvee->rev_str[1] = 32 + ((tvee->revision >> 12) & 0x3f); 621 tvee->rev_str[1] = 32 + ((tvee->revision >> 12) & 0x3f);
617 tvee->rev_str[2] = 32 + ((tvee->revision >> 6) & 0x3f); 622 tvee->rev_str[2] = 32 + ((tvee->revision >> 6) & 0x3f);
618 tvee->rev_str[3] = 32 + ( tvee->revision & 0x3f); 623 tvee->rev_str[3] = 32 + (tvee->revision & 0x3f);
619 tvee->rev_str[4] = 0; 624 tvee->rev_str[4] = 0;
620 } 625 }
621 626
@@ -658,44 +663,40 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
658 663
659 tveeprom_info("Hauppauge model %d, rev %s, serial# %d\n", 664 tveeprom_info("Hauppauge model %d, rev %s, serial# %d\n",
660 tvee->model, tvee->rev_str, tvee->serial_number); 665 tvee->model, tvee->rev_str, tvee->serial_number);
661 if (tvee->has_MAC_address == 1) { 666 if (tvee->has_MAC_address == 1)
662 tveeprom_info("MAC address is %02X-%02X-%02X-%02X-%02X-%02X\n", 667 tveeprom_info("MAC address is %02X-%02X-%02X-%02X-%02X-%02X\n",
663 tvee->MAC_address[0], tvee->MAC_address[1], 668 tvee->MAC_address[0], tvee->MAC_address[1],
664 tvee->MAC_address[2], tvee->MAC_address[3], 669 tvee->MAC_address[2], tvee->MAC_address[3],
665 tvee->MAC_address[4], tvee->MAC_address[5]); 670 tvee->MAC_address[4], tvee->MAC_address[5]);
666 }
667 tveeprom_info("tuner model is %s (idx %d, type %d)\n", 671 tveeprom_info("tuner model is %s (idx %d, type %d)\n",
668 t_name1, tuner1, tvee->tuner_type); 672 t_name1, tuner1, tvee->tuner_type);
669 tveeprom_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n", 673 tveeprom_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n",
670 t_fmt_name1[0], t_fmt_name1[1], t_fmt_name1[2], t_fmt_name1[3], 674 t_fmt_name1[0], t_fmt_name1[1], t_fmt_name1[2],
671 t_fmt_name1[4], t_fmt_name1[5], t_fmt_name1[6], t_fmt_name1[7], 675 t_fmt_name1[3], t_fmt_name1[4], t_fmt_name1[5],
672 t_format1); 676 t_fmt_name1[6], t_fmt_name1[7], t_format1);
673 if (tuner2) { 677 if (tuner2)
674 tveeprom_info("second tuner model is %s (idx %d, type %d)\n", 678 tveeprom_info("second tuner model is %s (idx %d, type %d)\n",
675 t_name2, tuner2, tvee->tuner2_type); 679 t_name2, tuner2, tvee->tuner2_type);
676 } 680 if (t_format2)
677 if (t_format2) {
678 tveeprom_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n", 681 tveeprom_info("TV standards%s%s%s%s%s%s%s%s (eeprom 0x%02x)\n",
679 t_fmt_name2[0], t_fmt_name2[1], t_fmt_name2[2], t_fmt_name2[3], 682 t_fmt_name2[0], t_fmt_name2[1], t_fmt_name2[2],
680 t_fmt_name2[4], t_fmt_name2[5], t_fmt_name2[6], t_fmt_name2[7], 683 t_fmt_name2[3], t_fmt_name2[4], t_fmt_name2[5],
681 t_format2); 684 t_fmt_name2[6], t_fmt_name2[7], t_format2);
682 } 685 if (audioic < 0) {
683 if (audioic<0) {
684 tveeprom_info("audio processor is unknown (no idx)\n"); 686 tveeprom_info("audio processor is unknown (no idx)\n");
685 tvee->audio_processor=AUDIO_CHIP_UNKNOWN; 687 tvee->audio_processor = AUDIO_CHIP_UNKNOWN;
686 } else { 688 } else {
687 if (audioic < ARRAY_SIZE(audioIC)) 689 if (audioic < ARRAY_SIZE(audioIC))
688 tveeprom_info("audio processor is %s (idx %d)\n", 690 tveeprom_info("audio processor is %s (idx %d)\n",
689 audioIC[audioic].name,audioic); 691 audioIC[audioic].name, audioic);
690 else 692 else
691 tveeprom_info("audio processor is unknown (idx %d)\n", 693 tveeprom_info("audio processor is unknown (idx %d)\n",
692 audioic); 694 audioic);
693 } 695 }
694 if (tvee->decoder_processor) { 696 if (tvee->decoder_processor)
695 tveeprom_info("decoder processor is %s (idx %d)\n", 697 tveeprom_info("decoder processor is %s (idx %d)\n",
696 STRM(decoderIC, tvee->decoder_processor), 698 STRM(decoderIC, tvee->decoder_processor),
697 tvee->decoder_processor); 699 tvee->decoder_processor);
698 }
699 if (tvee->has_ir == -1) 700 if (tvee->has_ir == -1)
700 tveeprom_info("has %sradio\n", 701 tveeprom_info("has %sradio\n",
701 tvee->has_radio ? "" : "no "); 702 tvee->has_radio ? "" : "no ");
@@ -716,11 +717,13 @@ int tveeprom_read(struct i2c_client *c, unsigned char *eedata, int len)
716 int err; 717 int err;
717 718
718 buf = 0; 719 buf = 0;
719 if (1 != (err = i2c_master_send(c, &buf, 1))) { 720 err = i2c_master_send(c, &buf, 1);
721 if (err != 1) {
720 tveeprom_info("Huh, no eeprom present (err=%d)?\n", err); 722 tveeprom_info("Huh, no eeprom present (err=%d)?\n", err);
721 return -1; 723 return -1;
722 } 724 }
723 if (len != (err = i2c_master_recv(c, eedata, len))) { 725 err = i2c_master_recv(c, eedata, len);
726 if (err != len) {
724 tveeprom_warn("i2c eeprom read error (err=%d)\n", err); 727 tveeprom_warn("i2c eeprom read error (err=%d)\n", err);
725 return -1; 728 return -1;
726 } 729 }
@@ -731,9 +734,9 @@ int tveeprom_read(struct i2c_client *c, unsigned char *eedata, int len)
731 for (i = 0; i < len; i++) { 734 for (i = 0; i < len; i++) {
732 if (0 == (i % 16)) 735 if (0 == (i % 16))
733 tveeprom_info("%02x:", i); 736 tveeprom_info("%02x:", i);
734 printk(" %02x", eedata[i]); 737 printk(KERN_CONT " %02x", eedata[i]);
735 if (15 == (i % 16)) 738 if (15 == (i % 16))
736 printk("\n"); 739 printk(KERN_CONT "\n");
737 } 740 }
738 } 741 }
739 return 0; 742 return 0;
@@ -765,9 +768,9 @@ tveeprom_command(struct i2c_client *client,
765 768
766 switch (cmd) { 769 switch (cmd) {
767 case 0: 770 case 0:
768 buf = kzalloc(256,GFP_KERNEL); 771 buf = kzalloc(256, GFP_KERNEL);
769 tveeprom_read(client,buf,256); 772 tveeprom_read(client, buf, 256);
770 tveeprom_hauppauge_analog(client, &eeprom,buf); 773 tveeprom_hauppauge_analog(client, &eeprom, buf);
771 kfree(buf); 774 kfree(buf);
772 eeprom_props[0] = eeprom.tuner_type; 775 eeprom_props[0] = eeprom.tuner_type;
773 eeprom_props[1] = eeprom.tuner_formats; 776 eeprom_props[1] = eeprom.tuner_formats;
@@ -801,7 +804,7 @@ tveeprom_detect_client(struct i2c_adapter *adapter,
801} 804}
802 805
803static int 806static int
804tveeprom_attach_adapter (struct i2c_adapter *adapter) 807tveeprom_attach_adapter(struct i2c_adapter *adapter)
805{ 808{
806 if (adapter->class & I2C_CLASS_TV_ANALOG) 809 if (adapter->class & I2C_CLASS_TV_ANALOG)
807 return i2c_probe(adapter, &addr_data, tveeprom_detect_client); 810 return i2c_probe(adapter, &addr_data, tveeprom_detect_client);
@@ -809,7 +812,7 @@ tveeprom_attach_adapter (struct i2c_adapter *adapter)
809} 812}
810 813
811static int 814static int
812tveeprom_detach_client (struct i2c_client *client) 815tveeprom_detach_client(struct i2c_client *client)
813{ 816{
814 int err; 817 int err;
815 818