aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx25840
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2006-02-07 03:48:40 -0500
committerMauro Carvalho Chehab <mchehab@infradead.org>2006-02-07 03:48:40 -0500
commitd97a11e091a0bf40f1cfb0bbf443ddd7b455b133 (patch)
tree489727bd0a5cc8350ff5753b26b893dd1776791f /drivers/media/video/cx25840
parent8a8832a8eb5a824261a63c22befb4a8c193d4d02 (diff)
V4L/DVB (3300): Add standard for South Korean NTSC-M using A2 audio.
South Korea uses NTSC-M but with A2 audio instead of BTSC. Several audio chips need this information in order to set the correct audio processing registers. Acked-by: Mauro Carvalho Chehab <mauro_chehab@yahoo.com.br> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
Diffstat (limited to 'drivers/media/video/cx25840')
-rw-r--r--drivers/media/video/cx25840/cx25840-core.c50
1 files changed, 20 insertions, 30 deletions
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c
index 3acd587b160c..8d8aa8ec8304 100644
--- a/drivers/media/video/cx25840/cx25840-core.c
+++ b/drivers/media/video/cx25840/cx25840-core.c
@@ -220,33 +220,23 @@ static void input_change(struct i2c_client *client)
220 cx25840_write(client, 0x808, 0xff); 220 cx25840_write(client, 0x808, 0xff);
221 cx25840_write(client, 0x80b, 0x10); 221 cx25840_write(client, 0x80b, 0x10);
222 } else if (std & V4L2_STD_NTSC) { 222 } else if (std & V4L2_STD_NTSC) {
223 /* NTSC */ 223 /* Certain Hauppauge PVR150 models have a hardware bug
224 if (state->pvr150_workaround) { 224 that causes audio to drop out. For these models the
225 /* Certain Hauppauge PVR150 models have a hardware bug 225 audio standard must be set explicitly.
226 that causes audio to drop out. For these models the 226 To be precise: it affects cards with tuner models
227 audio standard must be set explicitly. 227 85, 99 and 112 (model numbers from tveeprom). */
228 To be precise: it affects cards with tuner models 228 int hw_fix = state->pvr150_workaround;
229 85, 99 and 112 (model numbers from tveeprom). */ 229
230 if (std == V4L2_STD_NTSC_M_JP) { 230 if (std == V4L2_STD_NTSC_M_JP) {
231 /* Japan uses EIAJ audio standard */
232 cx25840_write(client, 0x808, 0x2f);
233 } else {
234 /* Others use the BTSC audio standard */
235 cx25840_write(client, 0x808, 0x1f);
236 }
237 /* South Korea uses the A2-M (aka Zweiton M) audio
238 standard, and should set 0x808 to 0x3f, but I don't
239 know how to detect this. */
240 } else if (std == V4L2_STD_NTSC_M_JP) {
241 /* Japan uses EIAJ audio standard */ 231 /* Japan uses EIAJ audio standard */
242 cx25840_write(client, 0x808, 0xf7); 232 cx25840_write(client, 0x808, hw_fix ? 0x2f : 0xf7);
233 } else if (std == V4L2_STD_NTSC_M_KR) {
234 /* South Korea uses A2 audio standard */
235 cx25840_write(client, 0x808, hw_fix ? 0x3f : 0xf8);
243 } else { 236 } else {
244 /* Others use the BTSC audio standard */ 237 /* Others use the BTSC audio standard */
245 cx25840_write(client, 0x808, 0xf6); 238 cx25840_write(client, 0x808, hw_fix ? 0x1f : 0xf6);
246 } 239 }
247 /* South Korea uses the A2-M (aka Zweiton M) audio standard,
248 and should set 0x808 to 0xf8, but I don't know how to
249 detect this. */
250 cx25840_write(client, 0x80b, 0x00); 240 cx25840_write(client, 0x80b, 0x00);
251 } 241 }
252 242
@@ -330,17 +320,17 @@ static int set_v4lstd(struct i2c_client *client, v4l2_std_id std)
330 u8 fmt=0; /* zero is autodetect */ 320 u8 fmt=0; /* zero is autodetect */
331 321
332 /* First tests should be against specific std */ 322 /* First tests should be against specific std */
333 if (std & V4L2_STD_NTSC_M_JP) { 323 if (std == V4L2_STD_NTSC_M_JP) {
334 fmt=0x2; 324 fmt=0x2;
335 } else if (std & V4L2_STD_NTSC_443) { 325 } else if (std == V4L2_STD_NTSC_443) {
336 fmt=0x3; 326 fmt=0x3;
337 } else if (std & V4L2_STD_PAL_M) { 327 } else if (std == V4L2_STD_PAL_M) {
338 fmt=0x5; 328 fmt=0x5;
339 } else if (std & V4L2_STD_PAL_N) { 329 } else if (std == V4L2_STD_PAL_N) {
340 fmt=0x6; 330 fmt=0x6;
341 } else if (std & V4L2_STD_PAL_Nc) { 331 } else if (std == V4L2_STD_PAL_Nc) {
342 fmt=0x7; 332 fmt=0x7;
343 } else if (std & V4L2_STD_PAL_60) { 333 } else if (std == V4L2_STD_PAL_60) {
344 fmt=0x8; 334 fmt=0x8;
345 } else { 335 } else {
346 /* Then, test against generic ones */ 336 /* Then, test against generic ones */
@@ -369,7 +359,7 @@ v4l2_std_id cx25840_get_v4lstd(struct i2c_client * client)
369 } 359 }
370 360
371 switch (fmt) { 361 switch (fmt) {
372 case 0x1: return V4L2_STD_NTSC_M; 362 case 0x1: return V4L2_STD_NTSC_M | V4L2_STD_NTSC_M_KR;
373 case 0x2: return V4L2_STD_NTSC_M_JP; 363 case 0x2: return V4L2_STD_NTSC_M_JP;
374 case 0x3: return V4L2_STD_NTSC_443; 364 case 0x3: return V4L2_STD_NTSC_443;
375 case 0x4: return V4L2_STD_PAL; 365 case 0x4: return V4L2_STD_PAL;