diff options
author | Frank Dischner <phaedrus961@gmail.com> | 2009-06-14 22:05:20 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-06-16 18:07:49 -0400 |
commit | 040d4cbfb3df7db8cb661a64d0d65f7e753f43d3 (patch) | |
tree | 5ab3b13294ec3d0007c16b04df4fe6215f69c0d0 /drivers | |
parent | 24dff657e725fe63b3514b7ee57e4ac51210d3fc (diff) |
V4L/DVB (11987): au8522: add support for QAM-64 modulation type
Add support for QAM64 modulation type to the au8522 demod driver.
Signed-off-by: Frank Dischner <phaedrus961@gmail.com>
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/dvb/frontends/au8522_dig.c | 98 |
1 files changed, 92 insertions, 6 deletions
diff --git a/drivers/media/dvb/frontends/au8522_dig.c b/drivers/media/dvb/frontends/au8522_dig.c index 35731258bb0a..956b80f4979c 100644 --- a/drivers/media/dvb/frontends/au8522_dig.c +++ b/drivers/media/dvb/frontends/au8522_dig.c | |||
@@ -367,11 +367,90 @@ static struct { | |||
367 | { 0x8231, 0x13 }, | 367 | { 0x8231, 0x13 }, |
368 | }; | 368 | }; |
369 | 369 | ||
370 | /* QAM Modulation table */ | 370 | /* QAM64 Modulation table */ |
371 | static struct { | 371 | static struct { |
372 | u16 reg; | 372 | u16 reg; |
373 | u16 data; | 373 | u16 data; |
374 | } QAM_mod_tab[] = { | 374 | } QAM64_mod_tab[] = { |
375 | { 0x00a3, 0x09 }, | ||
376 | { 0x00a4, 0x00 }, | ||
377 | { 0x0081, 0xc4 }, | ||
378 | { 0x00a5, 0x40 }, | ||
379 | { 0x00aa, 0x77 }, | ||
380 | { 0x00ad, 0x77 }, | ||
381 | { 0x00a6, 0x67 }, | ||
382 | { 0x0262, 0x20 }, | ||
383 | { 0x021c, 0x30 }, | ||
384 | { 0x00b8, 0x3e }, | ||
385 | { 0x00b9, 0xf0 }, | ||
386 | { 0x00ba, 0x01 }, | ||
387 | { 0x00bb, 0x18 }, | ||
388 | { 0x00bc, 0x50 }, | ||
389 | { 0x00bd, 0x00 }, | ||
390 | { 0x00be, 0xea }, | ||
391 | { 0x00bf, 0xef }, | ||
392 | { 0x00c0, 0xfc }, | ||
393 | { 0x00c1, 0xbd }, | ||
394 | { 0x00c2, 0x1f }, | ||
395 | { 0x00c3, 0xfc }, | ||
396 | { 0x00c4, 0xdd }, | ||
397 | { 0x00c5, 0xaf }, | ||
398 | { 0x00c6, 0x00 }, | ||
399 | { 0x00c7, 0x38 }, | ||
400 | { 0x00c8, 0x30 }, | ||
401 | { 0x00c9, 0x05 }, | ||
402 | { 0x00ca, 0x4a }, | ||
403 | { 0x00cb, 0xd0 }, | ||
404 | { 0x00cc, 0x01 }, | ||
405 | { 0x00cd, 0xd9 }, | ||
406 | { 0x00ce, 0x6f }, | ||
407 | { 0x00cf, 0xf9 }, | ||
408 | { 0x00d0, 0x70 }, | ||
409 | { 0x00d1, 0xdf }, | ||
410 | { 0x00d2, 0xf7 }, | ||
411 | { 0x00d3, 0xc2 }, | ||
412 | { 0x00d4, 0xdf }, | ||
413 | { 0x00d5, 0x02 }, | ||
414 | { 0x00d6, 0x9a }, | ||
415 | { 0x00d7, 0xd0 }, | ||
416 | { 0x0250, 0x0d }, | ||
417 | { 0x0251, 0xcd }, | ||
418 | { 0x0252, 0xe0 }, | ||
419 | { 0x0253, 0x05 }, | ||
420 | { 0x0254, 0xa7 }, | ||
421 | { 0x0255, 0xff }, | ||
422 | { 0x0256, 0xed }, | ||
423 | { 0x0257, 0x5b }, | ||
424 | { 0x0258, 0xae }, | ||
425 | { 0x0259, 0xe6 }, | ||
426 | { 0x025a, 0x3d }, | ||
427 | { 0x025b, 0x0f }, | ||
428 | { 0x025c, 0x0d }, | ||
429 | { 0x025d, 0xea }, | ||
430 | { 0x025e, 0xf2 }, | ||
431 | { 0x025f, 0x51 }, | ||
432 | { 0x0260, 0xf5 }, | ||
433 | { 0x0261, 0x06 }, | ||
434 | { 0x021a, 0x00 }, | ||
435 | { 0x0546, 0x40 }, | ||
436 | { 0x0210, 0xc7 }, | ||
437 | { 0x0211, 0xaa }, | ||
438 | { 0x0212, 0xab }, | ||
439 | { 0x0213, 0x02 }, | ||
440 | { 0x0502, 0x00 }, | ||
441 | { 0x0121, 0x04 }, | ||
442 | { 0x0122, 0x04 }, | ||
443 | { 0x052e, 0x10 }, | ||
444 | { 0x00a4, 0xca }, | ||
445 | { 0x00a7, 0x40 }, | ||
446 | { 0x0526, 0x01 }, | ||
447 | }; | ||
448 | |||
449 | /* QAM256 Modulation table */ | ||
450 | static struct { | ||
451 | u16 reg; | ||
452 | u16 data; | ||
453 | } QAM256_mod_tab[] = { | ||
375 | { 0x80a3, 0x09 }, | 454 | { 0x80a3, 0x09 }, |
376 | { 0x80a4, 0x00 }, | 455 | { 0x80a4, 0x00 }, |
377 | { 0x8081, 0xc4 }, | 456 | { 0x8081, 0xc4 }, |
@@ -464,12 +543,19 @@ static int au8522_enable_modulation(struct dvb_frontend *fe, | |||
464 | au8522_set_if(fe, state->config->vsb_if); | 543 | au8522_set_if(fe, state->config->vsb_if); |
465 | break; | 544 | break; |
466 | case QAM_64: | 545 | case QAM_64: |
546 | dprintk("%s() QAM 64\n", __func__); | ||
547 | for (i = 0; i < ARRAY_SIZE(QAM64_mod_tab); i++) | ||
548 | au8522_writereg(state, | ||
549 | QAM64_mod_tab[i].reg, | ||
550 | QAM64_mod_tab[i].data); | ||
551 | au8522_set_if(fe, state->config->qam_if); | ||
552 | break; | ||
467 | case QAM_256: | 553 | case QAM_256: |
468 | dprintk("%s() QAM 64/256\n", __func__); | 554 | dprintk("%s() QAM 256\n", __func__); |
469 | for (i = 0; i < ARRAY_SIZE(QAM_mod_tab); i++) | 555 | for (i = 0; i < ARRAY_SIZE(QAM256_mod_tab); i++) |
470 | au8522_writereg(state, | 556 | au8522_writereg(state, |
471 | QAM_mod_tab[i].reg, | 557 | QAM256_mod_tab[i].reg, |
472 | QAM_mod_tab[i].data); | 558 | QAM256_mod_tab[i].data); |
473 | au8522_set_if(fe, state->config->qam_if); | 559 | au8522_set_if(fe, state->config->qam_if); |
474 | break; | 560 | break; |
475 | default: | 561 | default: |