Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] saa7134: support MagicPro ProHDTV Pro2 Hybrid DMB-TH PCI card

This card has a TD18271 silicon tuner, and uses TDA8290 and LGS8G75 to
demodulate analog and digital broadcast respectively. GPIO configurations
were derived using DScaler regspy.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

authored by

Timothy Lee and committed by
Mauro Carvalho Chehab
ce02704d 5398b622

+89
+54
drivers/media/video/saa7134/saa7134-cards.c
··· 5591 5591 .amux = TV, 5592 5592 }, 5593 5593 }, 5594 + [SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2] = { 5595 + /* Timothy Lee <timothy.lee@siriushk.com> */ 5596 + .name = "MagicPro ProHDTV Pro2 DMB-TH/Hybrid", 5597 + .audio_clock = 0x00187de7, 5598 + .tuner_type = TUNER_PHILIPS_TDA8290, 5599 + .radio_type = UNSET, 5600 + .tuner_config = 3, 5601 + .tuner_addr = ADDR_UNSET, 5602 + .radio_addr = ADDR_UNSET, 5603 + .gpiomask = 0x02050000, 5604 + .mpeg = SAA7134_MPEG_DVB, 5605 + .ts_type = SAA7134_MPEG_TS_PARALLEL, 5606 + .inputs = { { 5607 + .name = name_tv, 5608 + .vmux = 1, 5609 + .amux = TV, 5610 + .tv = 1, 5611 + .gpio = 0x00050000, 5612 + }, { 5613 + .name = name_comp1, 5614 + .vmux = 3, 5615 + .amux = LINE1, 5616 + .gpio = 0x00050000, 5617 + }, { 5618 + .name = name_svideo, 5619 + .vmux = 8, 5620 + .amux = LINE1, 5621 + .gpio = 0x00050000, 5622 + } }, 5623 + .radio = { 5624 + .name = name_radio, 5625 + .amux = TV, 5626 + .gpio = 0x00050000, 5627 + }, 5628 + .mute = { 5629 + .name = name_mute, 5630 + .vmux = 0, 5631 + .amux = TV, 5632 + .gpio = 0x00050000, 5633 + }, 5634 + }, 5594 5635 5595 5636 }; 5596 5637 ··· 6837 6796 .subdevice = 0xc900, 6838 6797 .driver_data = SAA7134_BOARD_VIDEOMATE_M1F, 6839 6798 }, { 6799 + .vendor = PCI_VENDOR_ID_PHILIPS, 6800 + .device = PCI_DEVICE_ID_PHILIPS_SAA7134, 6801 + .subvendor = 0x17de, 6802 + .subdevice = 0xd136, 6803 + .driver_data = SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2, 6804 + }, { 6840 6805 /* --- boards without eeprom + subsystem ID --- */ 6841 6806 .vendor = PCI_VENDOR_ID_PHILIPS, 6842 6807 .device = PCI_DEVICE_ID_PHILIPS_SAA7134, ··· 7035 6988 switch (dev->board) { 7036 6989 case SAA7134_BOARD_HAUPPAUGE_HVR1150: 7037 6990 case SAA7134_BOARD_HAUPPAUGE_HVR1120: 6991 + case SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2: 7038 6992 ret = saa7134_tda18271_hvr11x0_toggle_agc(dev, arg); 7039 6993 break; 7040 6994 case SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG: ··· 7062 7014 case SAA7134_BOARD_HAUPPAUGE_HVR1120: 7063 7015 case SAA7134_BOARD_AVERMEDIA_M733A: 7064 7016 case SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG: 7017 + case SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2: 7065 7018 /* tda8290 + tda18271 */ 7066 7019 ret = saa7134_tda8290_18271_callback(dev, command, arg); 7067 7020 break; ··· 7374 7325 msleep(10); 7375 7326 saa7134_set_gpio(dev, 1, 1); 7376 7327 dev->has_remote = SAA7134_REMOTE_GPIO; 7328 + break; 7329 + case SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2: 7330 + /* enable LGS-8G75 */ 7331 + saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, 0x0e050000, 0x0c050000); 7332 + saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, 0x0e050000, 0x0c050000); 7377 7333 break; 7378 7334 } 7379 7335 return 0;
+34
drivers/media/video/saa7134/saa7134-dvb.c
··· 53 53 #include "lgdt3305.h" 54 54 #include "tda8290.h" 55 55 #include "mb86a20s.h" 56 + #include "lgs8gxx.h" 56 57 57 58 #include "zl10353.h" 58 59 ··· 1124 1123 .gate = TDA18271_GATE_ANALOG, 1125 1124 }; 1126 1125 1126 + static struct lgs8gxx_config prohdtv_pro2_lgs8g75_config = { 1127 + .prod = LGS8GXX_PROD_LGS8G75, 1128 + .demod_address = 0x1d, 1129 + .serial_ts = 0, 1130 + .ts_clk_pol = 1, 1131 + .ts_clk_gated = 0, 1132 + .if_clk_freq = 30400, /* 30.4 MHz */ 1133 + .if_freq = 4000, /* 4.00 MHz */ 1134 + .if_neg_center = 0, 1135 + .ext_adc = 0, 1136 + .adc_signed = 1, 1137 + .adc_vpp = 3, /* 2.0 Vpp */ 1138 + .if_neg_edge = 1, 1139 + }; 1140 + 1141 + static struct tda18271_config prohdtv_pro2_tda18271_config = { 1142 + .gate = TDA18271_GATE_ANALOG, 1143 + .output_opt = TDA18271_OUTPUT_LT_OFF, 1144 + }; 1145 + 1127 1146 /* ================================================================== 1128 1147 * Core code 1129 1148 */ ··· 1694 1673 } 1695 1674 1696 1675 /* mb86a20s need to use the I2C gateway */ 1676 + break; 1677 + case SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2: 1678 + fe0->dvb.frontend = dvb_attach(lgs8gxx_attach, 1679 + &prohdtv_pro2_lgs8g75_config, 1680 + &dev->i2c_adap); 1681 + if (fe0->dvb.frontend != NULL) { 1682 + dvb_attach(tda829x_attach, fe0->dvb.frontend, 1683 + &dev->i2c_adap, 0x4b, 1684 + &tda829x_no_probe); 1685 + dvb_attach(tda18271_attach, fe0->dvb.frontend, 1686 + 0x60, &dev->i2c_adap, 1687 + &prohdtv_pro2_tda18271_config); 1688 + } 1697 1689 break; 1698 1690 default: 1699 1691 wprintk("Huh? unknown DVB card?\n");
+1
drivers/media/video/saa7134/saa7134.h
··· 328 328 #define SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG 182 329 329 #define SAA7134_BOARD_VIDEOMATE_M1F 183 330 330 #define SAA7134_BOARD_ENCORE_ENLTV_FM3 184 331 + #define SAA7134_BOARD_MAGICPRO_PROHDTV_PRO2 185 331 332 332 333 #define SAA7134_MAXBOARDS 32 333 334 #define SAA7134_INPUT_MAX 8