diff options
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/dvb/dvb-usb/m920x.c | 201 |
1 files changed, 101 insertions, 100 deletions
diff --git a/drivers/media/dvb/dvb-usb/m920x.c b/drivers/media/dvb/dvb-usb/m920x.c index 4d63d1f16295..3ebf0bcf47c9 100644 --- a/drivers/media/dvb/dvb-usb/m920x.c +++ b/drivers/media/dvb/dvb-usb/m920x.c | |||
@@ -22,45 +22,6 @@ static int dvb_usb_m920x_debug; | |||
22 | module_param_named(debug,dvb_usb_m920x_debug, int, 0644); | 22 | module_param_named(debug,dvb_usb_m920x_debug, int, 0644); |
23 | MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); | 23 | MODULE_PARM_DESC(debug, "set debugging level (1=rc (or-able))." DVB_USB_DEBUG_STATUS); |
24 | 24 | ||
25 | static struct dvb_usb_rc_key megasky_rc_keys [] = { | ||
26 | { 0x0, 0x12, KEY_POWER }, | ||
27 | { 0x0, 0x1e, KEY_CYCLEWINDOWS }, /* min/max */ | ||
28 | { 0x0, 0x02, KEY_CHANNELUP }, | ||
29 | { 0x0, 0x05, KEY_CHANNELDOWN }, | ||
30 | { 0x0, 0x03, KEY_VOLUMEUP }, | ||
31 | { 0x0, 0x06, KEY_VOLUMEDOWN }, | ||
32 | { 0x0, 0x04, KEY_MUTE }, | ||
33 | { 0x0, 0x07, KEY_OK }, /* TS */ | ||
34 | { 0x0, 0x08, KEY_STOP }, | ||
35 | { 0x0, 0x09, KEY_MENU }, /* swap */ | ||
36 | { 0x0, 0x0a, KEY_REWIND }, | ||
37 | { 0x0, 0x1b, KEY_PAUSE }, | ||
38 | { 0x0, 0x1f, KEY_FASTFORWARD }, | ||
39 | { 0x0, 0x0c, KEY_RECORD }, | ||
40 | { 0x0, 0x0d, KEY_CAMERA }, /* screenshot */ | ||
41 | { 0x0, 0x0e, KEY_COFFEE }, /* "MTS" */ | ||
42 | }; | ||
43 | |||
44 | static struct dvb_usb_rc_key tvwalkertwin_rc_keys [] = { | ||
45 | { 0x0, 0x01, KEY_ZOOM }, /* Full Screen */ | ||
46 | { 0x0, 0x02, KEY_CAMERA }, /* snapshot */ | ||
47 | { 0x0, 0x03, KEY_MUTE }, | ||
48 | { 0x0, 0x04, KEY_REWIND }, | ||
49 | { 0x0, 0x05, KEY_PLAYPAUSE }, /* Play/Pause */ | ||
50 | { 0x0, 0x06, KEY_FASTFORWARD }, | ||
51 | { 0x0, 0x07, KEY_RECORD }, | ||
52 | { 0x0, 0x08, KEY_STOP }, | ||
53 | { 0x0, 0x09, KEY_TIME }, /* Timeshift */ | ||
54 | { 0x0, 0x0c, KEY_COFFEE }, /* Recall */ | ||
55 | { 0x0, 0x0e, KEY_CHANNELUP }, | ||
56 | { 0x0, 0x12, KEY_POWER }, | ||
57 | { 0x0, 0x15, KEY_MENU }, /* source */ | ||
58 | { 0x0, 0x18, KEY_CYCLEWINDOWS }, /* TWIN PIP */ | ||
59 | { 0x0, 0x1a, KEY_CHANNELDOWN }, | ||
60 | { 0x0, 0x1b, KEY_VOLUMEDOWN }, | ||
61 | { 0x0, 0x1e, KEY_VOLUMEUP }, | ||
62 | }; | ||
63 | |||
64 | static inline int m9206_read(struct usb_device *udev, u8 request, u16 value, | 25 | static inline int m9206_read(struct usb_device *udev, u8 request, u16 value, |
65 | u16 index, void *data, int size) | 26 | u16 index, void *data, int size) |
66 | { | 27 | { |
@@ -259,7 +220,7 @@ static struct i2c_algorithm m9206_i2c_algo = { | |||
259 | .functionality = m9206_i2c_func, | 220 | .functionality = m9206_i2c_func, |
260 | }; | 221 | }; |
261 | 222 | ||
262 | 223 | /* pid filter */ | |
263 | static int m9206_set_filter(struct dvb_usb_adapter *adap, | 224 | static int m9206_set_filter(struct dvb_usb_adapter *adap, |
264 | int type, int idx, int pid) | 225 | int type, int idx, int pid) |
265 | { | 226 | { |
@@ -419,6 +380,7 @@ static int m920x_identify_state(struct usb_device *udev, | |||
419 | return 0; | 380 | return 0; |
420 | } | 381 | } |
421 | 382 | ||
383 | /* demod configurations */ | ||
422 | static int megasky_mt352_demod_init(struct dvb_frontend *fe) | 384 | static int megasky_mt352_demod_init(struct dvb_frontend *fe) |
423 | { | 385 | { |
424 | u8 config[] = { CONFIG, 0x3d }; | 386 | u8 config[] = { CONFIG, 0x3d }; |
@@ -450,36 +412,6 @@ static struct mt352_config megasky_mt352_config = { | |||
450 | .demod_init = megasky_mt352_demod_init, | 412 | .demod_init = megasky_mt352_demod_init, |
451 | }; | 413 | }; |
452 | 414 | ||
453 | static int megasky_mt352_frontend_attach(struct dvb_usb_adapter *adap) | ||
454 | { | ||
455 | deb_rc("megasky_frontend_attach!\n"); | ||
456 | |||
457 | if ((adap->fe = dvb_attach(mt352_attach, &megasky_mt352_config, | ||
458 | &adap->dev->i2c_adap)) == NULL) | ||
459 | return -EIO; | ||
460 | |||
461 | return 0; | ||
462 | } | ||
463 | |||
464 | static struct qt1010_config megasky_qt1010_config = { | ||
465 | .i2c_address = 0x62 | ||
466 | }; | ||
467 | |||
468 | static int megasky_qt1010_tuner_attach(struct dvb_usb_adapter *adap) | ||
469 | { | ||
470 | if (dvb_attach(qt1010_attach, adap->fe, &adap->dev->i2c_adap, | ||
471 | &megasky_qt1010_config) == NULL) | ||
472 | return -ENODEV; | ||
473 | |||
474 | return 0; | ||
475 | } | ||
476 | |||
477 | static struct m9206_inits megasky_rc_init [] = { | ||
478 | { M9206_RC_INIT2, 0xa8 }, | ||
479 | { M9206_RC_INIT1, 0x51 }, | ||
480 | { } /* terminating entry */ | ||
481 | }; | ||
482 | |||
483 | static struct tda1004x_config digivox_tda10046_config = { | 415 | static struct tda1004x_config digivox_tda10046_config = { |
484 | .demod_address = 0x08, | 416 | .demod_address = 0x08, |
485 | .invert = 0, | 417 | .invert = 0, |
@@ -492,32 +424,6 @@ static struct tda1004x_config digivox_tda10046_config = { | |||
492 | .request_firmware = NULL, | 424 | .request_firmware = NULL, |
493 | }; | 425 | }; |
494 | 426 | ||
495 | static int digivox_tda10046_frontend_attach(struct dvb_usb_adapter *adap) | ||
496 | { | ||
497 | deb_rc("digivox_tda10046_frontend_attach!\n"); | ||
498 | |||
499 | if ((adap->fe = dvb_attach(tda10046_attach, &digivox_tda10046_config, | ||
500 | &adap->dev->i2c_adap)) == NULL) | ||
501 | return -EIO; | ||
502 | |||
503 | return 0; | ||
504 | } | ||
505 | |||
506 | static int digivox_tda8275_tuner_attach(struct dvb_usb_adapter *adap) | ||
507 | { | ||
508 | if (dvb_attach(tda827x_attach, adap->fe, 0x60, &adap->dev->i2c_adap, | ||
509 | NULL) == NULL) | ||
510 | return -ENODEV; | ||
511 | return 0; | ||
512 | } | ||
513 | |||
514 | /* LifeView TV Walker Twin has 1 x M9206, 2 x TDA10046, 2 x TDA8275A | ||
515 | * TDA10046 #0 is located at i2c address 0x08 | ||
516 | * TDA10046 #1 is located at i2c address 0x0b | ||
517 | * TDA8275A #0 is located at i2c address 0x60 | ||
518 | * TDA8275A #1 is located at i2c address 0x61 | ||
519 | */ | ||
520 | |||
521 | static struct tda1004x_config tvwalkertwin_0_tda10046_config = { | 427 | static struct tda1004x_config tvwalkertwin_0_tda10046_config = { |
522 | .demod_address = 0x08, | 428 | .demod_address = 0x08, |
523 | .invert = 0, | 429 | .invert = 0, |
@@ -542,6 +448,41 @@ static struct tda1004x_config tvwalkertwin_1_tda10046_config = { | |||
542 | .request_firmware = NULL, /* uses firmware EEPROM */ | 448 | .request_firmware = NULL, /* uses firmware EEPROM */ |
543 | }; | 449 | }; |
544 | 450 | ||
451 | /* tuner configurations */ | ||
452 | static struct qt1010_config megasky_qt1010_config = { | ||
453 | .i2c_address = 0x62 | ||
454 | }; | ||
455 | |||
456 | /* Callbacks for DVB USB */ | ||
457 | static int megasky_mt352_frontend_attach(struct dvb_usb_adapter *adap) | ||
458 | { | ||
459 | deb_rc("megasky_frontend_attach!\n"); | ||
460 | |||
461 | if ((adap->fe = dvb_attach(mt352_attach, &megasky_mt352_config, | ||
462 | &adap->dev->i2c_adap)) == NULL) | ||
463 | return -EIO; | ||
464 | |||
465 | return 0; | ||
466 | } | ||
467 | |||
468 | static int digivox_tda10046_frontend_attach(struct dvb_usb_adapter *adap) | ||
469 | { | ||
470 | deb_rc("digivox_tda10046_frontend_attach!\n"); | ||
471 | |||
472 | if ((adap->fe = dvb_attach(tda10046_attach, &digivox_tda10046_config, | ||
473 | &adap->dev->i2c_adap)) == NULL) | ||
474 | return -EIO; | ||
475 | |||
476 | return 0; | ||
477 | } | ||
478 | |||
479 | /* LifeView TV Walker Twin has 1 x M9206, 2 x TDA10046, 2 x TDA8275A | ||
480 | * TDA10046 #0 is located at i2c address 0x08 | ||
481 | * TDA10046 #1 is located at i2c address 0x0b | ||
482 | * TDA8275A #0 is located at i2c address 0x60 | ||
483 | * TDA8275A #1 is located at i2c address 0x61 | ||
484 | */ | ||
485 | |||
545 | static int tvwalkertwin_0_tda10046_frontend_attach(struct dvb_usb_adapter *adap) | 486 | static int tvwalkertwin_0_tda10046_frontend_attach(struct dvb_usb_adapter *adap) |
546 | { | 487 | { |
547 | deb_rc("tvwalkertwin_0_tda10046_frontend_attach!\n"); | 488 | deb_rc("tvwalkertwin_0_tda10046_frontend_attach!\n"); |
@@ -572,6 +513,23 @@ static int tvwalkertwin_1_tda10046_frontend_attach(struct dvb_usb_adapter *adap) | |||
572 | return 0; | 513 | return 0; |
573 | } | 514 | } |
574 | 515 | ||
516 | static int megasky_qt1010_tuner_attach(struct dvb_usb_adapter *adap) | ||
517 | { | ||
518 | if (dvb_attach(qt1010_attach, adap->fe, &adap->dev->i2c_adap, | ||
519 | &megasky_qt1010_config) == NULL) | ||
520 | return -ENODEV; | ||
521 | |||
522 | return 0; | ||
523 | } | ||
524 | |||
525 | static int digivox_tda8275_tuner_attach(struct dvb_usb_adapter *adap) | ||
526 | { | ||
527 | if (dvb_attach(tda827x_attach, adap->fe, 0x60, &adap->dev->i2c_adap, | ||
528 | NULL) == NULL) | ||
529 | return -ENODEV; | ||
530 | return 0; | ||
531 | } | ||
532 | |||
575 | static int tvwalkertwin_0_tda8275_tuner_attach(struct dvb_usb_adapter *adap) | 533 | static int tvwalkertwin_0_tda8275_tuner_attach(struct dvb_usb_adapter *adap) |
576 | { | 534 | { |
577 | int address = 0x60; | 535 | int address = 0x60; |
@@ -602,6 +560,13 @@ static int tvwalkertwin_1_tda8275_tuner_attach(struct dvb_usb_adapter *adap) | |||
602 | return 0; | 560 | return 0; |
603 | } | 561 | } |
604 | 562 | ||
563 | /* device-specific initialization */ | ||
564 | static struct m9206_inits megasky_rc_init [] = { | ||
565 | { M9206_RC_INIT2, 0xa8 }, | ||
566 | { M9206_RC_INIT1, 0x51 }, | ||
567 | { } /* terminating entry */ | ||
568 | }; | ||
569 | |||
605 | static struct m9206_inits tvwalkertwin_rc_init [] = { | 570 | static struct m9206_inits tvwalkertwin_rc_init [] = { |
606 | { M9206_RC_INIT2, 0x00 }, | 571 | { M9206_RC_INIT2, 0x00 }, |
607 | { M9206_RC_INIT1, 0xef }, | 572 | { M9206_RC_INIT1, 0xef }, |
@@ -611,15 +576,52 @@ static struct m9206_inits tvwalkertwin_rc_init [] = { | |||
611 | { } /* terminating entry */ | 576 | { } /* terminating entry */ |
612 | }; | 577 | }; |
613 | 578 | ||
579 | /* ir keymaps */ | ||
580 | static struct dvb_usb_rc_key megasky_rc_keys [] = { | ||
581 | { 0x0, 0x12, KEY_POWER }, | ||
582 | { 0x0, 0x1e, KEY_CYCLEWINDOWS }, /* min/max */ | ||
583 | { 0x0, 0x02, KEY_CHANNELUP }, | ||
584 | { 0x0, 0x05, KEY_CHANNELDOWN }, | ||
585 | { 0x0, 0x03, KEY_VOLUMEUP }, | ||
586 | { 0x0, 0x06, KEY_VOLUMEDOWN }, | ||
587 | { 0x0, 0x04, KEY_MUTE }, | ||
588 | { 0x0, 0x07, KEY_OK }, /* TS */ | ||
589 | { 0x0, 0x08, KEY_STOP }, | ||
590 | { 0x0, 0x09, KEY_MENU }, /* swap */ | ||
591 | { 0x0, 0x0a, KEY_REWIND }, | ||
592 | { 0x0, 0x1b, KEY_PAUSE }, | ||
593 | { 0x0, 0x1f, KEY_FASTFORWARD }, | ||
594 | { 0x0, 0x0c, KEY_RECORD }, | ||
595 | { 0x0, 0x0d, KEY_CAMERA }, /* screenshot */ | ||
596 | { 0x0, 0x0e, KEY_COFFEE }, /* "MTS" */ | ||
597 | }; | ||
598 | |||
599 | static struct dvb_usb_rc_key tvwalkertwin_rc_keys [] = { | ||
600 | { 0x0, 0x01, KEY_ZOOM }, /* Full Screen */ | ||
601 | { 0x0, 0x02, KEY_CAMERA }, /* snapshot */ | ||
602 | { 0x0, 0x03, KEY_MUTE }, | ||
603 | { 0x0, 0x04, KEY_REWIND }, | ||
604 | { 0x0, 0x05, KEY_PLAYPAUSE }, /* Play/Pause */ | ||
605 | { 0x0, 0x06, KEY_FASTFORWARD }, | ||
606 | { 0x0, 0x07, KEY_RECORD }, | ||
607 | { 0x0, 0x08, KEY_STOP }, | ||
608 | { 0x0, 0x09, KEY_TIME }, /* Timeshift */ | ||
609 | { 0x0, 0x0c, KEY_COFFEE }, /* Recall */ | ||
610 | { 0x0, 0x0e, KEY_CHANNELUP }, | ||
611 | { 0x0, 0x12, KEY_POWER }, | ||
612 | { 0x0, 0x15, KEY_MENU }, /* source */ | ||
613 | { 0x0, 0x18, KEY_CYCLEWINDOWS }, /* TWIN PIP */ | ||
614 | { 0x0, 0x1a, KEY_CHANNELDOWN }, | ||
615 | { 0x0, 0x1b, KEY_VOLUMEDOWN }, | ||
616 | { 0x0, 0x1e, KEY_VOLUMEUP }, | ||
617 | }; | ||
618 | |||
614 | /* DVB USB Driver stuff */ | 619 | /* DVB USB Driver stuff */ |
615 | static struct dvb_usb_device_properties megasky_properties; | 620 | static struct dvb_usb_device_properties megasky_properties; |
616 | static struct dvb_usb_device_properties digivox_mini_ii_properties; | 621 | static struct dvb_usb_device_properties digivox_mini_ii_properties; |
617 | static struct dvb_usb_device_properties tvwalkertwin_properties; | 622 | static struct dvb_usb_device_properties tvwalkertwin_properties; |
618 | static struct dvb_usb_device_properties dposh_properties; | 623 | static struct dvb_usb_device_properties dposh_properties; |
619 | 624 | ||
620 | static struct m9206_inits megasky_rc_init []; | ||
621 | static struct m9206_inits tvwalkertwin_rc_init []; | ||
622 | |||
623 | static int m920x_probe(struct usb_interface *intf, | 625 | static int m920x_probe(struct usb_interface *intf, |
624 | const struct usb_device_id *id) | 626 | const struct usb_device_id *id) |
625 | { | 627 | { |
@@ -800,7 +802,6 @@ static struct dvb_usb_device_properties digivox_mini_ii_properties = { | |||
800 | }; | 802 | }; |
801 | 803 | ||
802 | /* LifeView TV Walker Twin support by Nick Andrew <nick@nick-andrew.net> */ | 804 | /* LifeView TV Walker Twin support by Nick Andrew <nick@nick-andrew.net> */ |
803 | |||
804 | static struct dvb_usb_device_properties tvwalkertwin_properties = { | 805 | static struct dvb_usb_device_properties tvwalkertwin_properties = { |
805 | .caps = DVB_USB_IS_AN_I2C_ADAPTER, | 806 | .caps = DVB_USB_IS_AN_I2C_ADAPTER, |
806 | 807 | ||