diff options
Diffstat (limited to 'drivers/media/dvb/ttpci')
-rw-r--r-- | drivers/media/dvb/ttpci/Kconfig | 4 | ||||
-rw-r--r-- | drivers/media/dvb/ttpci/budget-av.c | 298 | ||||
-rw-r--r-- | drivers/media/dvb/ttpci/budget-ci.c | 311 | ||||
-rw-r--r-- | drivers/media/dvb/ttpci/budget.h | 1 |
4 files changed, 614 insertions, 0 deletions
diff --git a/drivers/media/dvb/ttpci/Kconfig b/drivers/media/dvb/ttpci/Kconfig index 401a04effc06..ab0bcd208c78 100644 --- a/drivers/media/dvb/ttpci/Kconfig +++ b/drivers/media/dvb/ttpci/Kconfig | |||
@@ -104,6 +104,8 @@ config DVB_BUDGET_CI | |||
104 | select DVB_STV0297 if !DVB_FE_CUSTOMISE | 104 | select DVB_STV0297 if !DVB_FE_CUSTOMISE |
105 | select DVB_STV0299 if !DVB_FE_CUSTOMISE | 105 | select DVB_STV0299 if !DVB_FE_CUSTOMISE |
106 | select DVB_TDA1004X if !DVB_FE_CUSTOMISE | 106 | select DVB_TDA1004X if !DVB_FE_CUSTOMISE |
107 | select DVB_STB0899 if !DVB_FE_CUSTOMISE | ||
108 | select DVB_STB6100 if !DVB_FE_CUSTOMISE | ||
107 | select DVB_LNBP21 if !DVB_FE_CUSTOMISE | 109 | select DVB_LNBP21 if !DVB_FE_CUSTOMISE |
108 | select DVB_TDA10023 if !DVB_FE_CUSTOMISE | 110 | select DVB_TDA10023 if !DVB_FE_CUSTOMISE |
109 | select MEDIA_TUNER_TDA827X if !MEDIA_TUNER_CUSTOMIZE | 111 | select MEDIA_TUNER_TDA827X if !MEDIA_TUNER_CUSTOMIZE |
@@ -131,6 +133,8 @@ config DVB_BUDGET_AV | |||
131 | select DVB_TDA1004X if !DVB_FE_CUSTOMISE | 133 | select DVB_TDA1004X if !DVB_FE_CUSTOMISE |
132 | select DVB_TDA10021 if !DVB_FE_CUSTOMISE | 134 | select DVB_TDA10021 if !DVB_FE_CUSTOMISE |
133 | select DVB_TDA10023 if !DVB_FE_CUSTOMISE | 135 | select DVB_TDA10023 if !DVB_FE_CUSTOMISE |
136 | select DVB_STB0899 if !DVB_FE_CUSTOMISE | ||
137 | select DVB_TDA8261 if !DVB_FE_CUSTOMISE | ||
134 | select DVB_TUA6100 if !DVB_FE_CUSTOMISE | 138 | select DVB_TUA6100 if !DVB_FE_CUSTOMISE |
135 | help | 139 | help |
136 | Support for simple SAA7146 based DVB cards | 140 | Support for simple SAA7146 based DVB cards |
diff --git a/drivers/media/dvb/ttpci/budget-av.c b/drivers/media/dvb/ttpci/budget-av.c index 1032ea77837e..f996cef79ec1 100644 --- a/drivers/media/dvb/ttpci/budget-av.c +++ b/drivers/media/dvb/ttpci/budget-av.c | |||
@@ -35,6 +35,11 @@ | |||
35 | 35 | ||
36 | #include "budget.h" | 36 | #include "budget.h" |
37 | #include "stv0299.h" | 37 | #include "stv0299.h" |
38 | #include "stb0899_drv.h" | ||
39 | #include "stb0899_reg.h" | ||
40 | #include "stb0899_cfg.h" | ||
41 | #include "tda8261.h" | ||
42 | #include "tda8261_cfg.h" | ||
38 | #include "tda1002x.h" | 43 | #include "tda1002x.h" |
39 | #include "tda1004x.h" | 44 | #include "tda1004x.h" |
40 | #include "tua6100.h" | 45 | #include "tua6100.h" |
@@ -882,6 +887,281 @@ static struct stv0299_config philips_sd1878_config = { | |||
882 | .set_symbol_rate = philips_sd1878_ci_set_symbol_rate, | 887 | .set_symbol_rate = philips_sd1878_ci_set_symbol_rate, |
883 | }; | 888 | }; |
884 | 889 | ||
890 | /* KNC1 DVB-S (STB0899) Inittab */ | ||
891 | static const struct stb0899_s1_reg knc1_stb0899_s1_init_1[] = { | ||
892 | |||
893 | { STB0899_DEV_ID , 0x81 }, | ||
894 | { STB0899_DISCNTRL1 , 0x32 }, | ||
895 | { STB0899_DISCNTRL2 , 0x80 }, | ||
896 | { STB0899_DISRX_ST0 , 0x04 }, | ||
897 | { STB0899_DISRX_ST1 , 0x00 }, | ||
898 | { STB0899_DISPARITY , 0x00 }, | ||
899 | { STB0899_DISFIFO , 0x00 }, | ||
900 | { STB0899_DISSTATUS , 0x20 }, | ||
901 | { STB0899_DISF22 , 0x8c }, | ||
902 | { STB0899_DISF22RX , 0x9a }, | ||
903 | { STB0899_SYSREG , 0x0b }, | ||
904 | { STB0899_ACRPRESC , 0x11 }, | ||
905 | { STB0899_ACRDIV1 , 0x0a }, | ||
906 | { STB0899_ACRDIV2 , 0x05 }, | ||
907 | { STB0899_DACR1 , 0x00 }, | ||
908 | { STB0899_DACR2 , 0x00 }, | ||
909 | { STB0899_OUTCFG , 0x00 }, | ||
910 | { STB0899_MODECFG , 0x00 }, | ||
911 | { STB0899_IRQSTATUS_3 , 0x30 }, | ||
912 | { STB0899_IRQSTATUS_2 , 0x00 }, | ||
913 | { STB0899_IRQSTATUS_1 , 0x00 }, | ||
914 | { STB0899_IRQSTATUS_0 , 0x00 }, | ||
915 | { STB0899_IRQMSK_3 , 0xf3 }, | ||
916 | { STB0899_IRQMSK_2 , 0xfc }, | ||
917 | { STB0899_IRQMSK_1 , 0xff }, | ||
918 | { STB0899_IRQMSK_0 , 0xff }, | ||
919 | { STB0899_IRQCFG , 0x00 }, | ||
920 | { STB0899_I2CCFG , 0x88 }, | ||
921 | { STB0899_I2CRPT , 0x58 }, /* Repeater=8, Stop=disabled */ | ||
922 | { STB0899_IOPVALUE5 , 0x00 }, | ||
923 | { STB0899_IOPVALUE4 , 0x20 }, | ||
924 | { STB0899_IOPVALUE3 , 0xc9 }, | ||
925 | { STB0899_IOPVALUE2 , 0x90 }, | ||
926 | { STB0899_IOPVALUE1 , 0x40 }, | ||
927 | { STB0899_IOPVALUE0 , 0x00 }, | ||
928 | { STB0899_GPIO00CFG , 0x82 }, | ||
929 | { STB0899_GPIO01CFG , 0x82 }, | ||
930 | { STB0899_GPIO02CFG , 0x82 }, | ||
931 | { STB0899_GPIO03CFG , 0x82 }, | ||
932 | { STB0899_GPIO04CFG , 0x82 }, | ||
933 | { STB0899_GPIO05CFG , 0x82 }, | ||
934 | { STB0899_GPIO06CFG , 0x82 }, | ||
935 | { STB0899_GPIO07CFG , 0x82 }, | ||
936 | { STB0899_GPIO08CFG , 0x82 }, | ||
937 | { STB0899_GPIO09CFG , 0x82 }, | ||
938 | { STB0899_GPIO10CFG , 0x82 }, | ||
939 | { STB0899_GPIO11CFG , 0x82 }, | ||
940 | { STB0899_GPIO12CFG , 0x82 }, | ||
941 | { STB0899_GPIO13CFG , 0x82 }, | ||
942 | { STB0899_GPIO14CFG , 0x82 }, | ||
943 | { STB0899_GPIO15CFG , 0x82 }, | ||
944 | { STB0899_GPIO16CFG , 0x82 }, | ||
945 | { STB0899_GPIO17CFG , 0x82 }, | ||
946 | { STB0899_GPIO18CFG , 0x82 }, | ||
947 | { STB0899_GPIO19CFG , 0x82 }, | ||
948 | { STB0899_GPIO20CFG , 0x82 }, | ||
949 | { STB0899_SDATCFG , 0xb8 }, | ||
950 | { STB0899_SCLTCFG , 0xba }, | ||
951 | { STB0899_AGCRFCFG , 0x08 }, /* 0x1c */ | ||
952 | { STB0899_GPIO22 , 0x82 }, /* AGCBB2CFG */ | ||
953 | { STB0899_GPIO21 , 0x91 }, /* AGCBB1CFG */ | ||
954 | { STB0899_DIRCLKCFG , 0x82 }, | ||
955 | { STB0899_CLKOUT27CFG , 0x7e }, | ||
956 | { STB0899_STDBYCFG , 0x82 }, | ||
957 | { STB0899_CS0CFG , 0x82 }, | ||
958 | { STB0899_CS1CFG , 0x82 }, | ||
959 | { STB0899_DISEQCOCFG , 0x20 }, | ||
960 | { STB0899_GPIO32CFG , 0x82 }, | ||
961 | { STB0899_GPIO33CFG , 0x82 }, | ||
962 | { STB0899_GPIO34CFG , 0x82 }, | ||
963 | { STB0899_GPIO35CFG , 0x82 }, | ||
964 | { STB0899_GPIO36CFG , 0x82 }, | ||
965 | { STB0899_GPIO37CFG , 0x82 }, | ||
966 | { STB0899_GPIO38CFG , 0x82 }, | ||
967 | { STB0899_GPIO39CFG , 0x82 }, | ||
968 | { STB0899_NCOARSE , 0x15 }, /* 0x15 = 27 Mhz Clock, F/3 = 198MHz, F/6 = 99MHz */ | ||
969 | { STB0899_SYNTCTRL , 0x02 }, /* 0x00 = CLK from CLKI, 0x02 = CLK from XTALI */ | ||
970 | { STB0899_FILTCTRL , 0x00 }, | ||
971 | { STB0899_SYSCTRL , 0x00 }, | ||
972 | { STB0899_STOPCLK1 , 0x20 }, | ||
973 | { STB0899_STOPCLK2 , 0x00 }, | ||
974 | { STB0899_INTBUFSTATUS , 0x00 }, | ||
975 | { STB0899_INTBUFCTRL , 0x0a }, | ||
976 | { 0xffff , 0xff }, | ||
977 | }; | ||
978 | |||
979 | static const struct stb0899_s1_reg knc1_stb0899_s1_init_3[] = { | ||
980 | { STB0899_DEMOD , 0x00 }, | ||
981 | { STB0899_RCOMPC , 0xc9 }, | ||
982 | { STB0899_AGC1CN , 0x41 }, | ||
983 | { STB0899_AGC1REF , 0x08 }, | ||
984 | { STB0899_RTC , 0x7a }, | ||
985 | { STB0899_TMGCFG , 0x4e }, | ||
986 | { STB0899_AGC2REF , 0x33 }, | ||
987 | { STB0899_TLSR , 0x84 }, | ||
988 | { STB0899_CFD , 0xee }, | ||
989 | { STB0899_ACLC , 0x87 }, | ||
990 | { STB0899_BCLC , 0x94 }, | ||
991 | { STB0899_EQON , 0x41 }, | ||
992 | { STB0899_LDT , 0xdd }, | ||
993 | { STB0899_LDT2 , 0xc9 }, | ||
994 | { STB0899_EQUALREF , 0xb4 }, | ||
995 | { STB0899_TMGRAMP , 0x10 }, | ||
996 | { STB0899_TMGTHD , 0x30 }, | ||
997 | { STB0899_IDCCOMP , 0xfb }, | ||
998 | { STB0899_QDCCOMP , 0x03 }, | ||
999 | { STB0899_POWERI , 0x3b }, | ||
1000 | { STB0899_POWERQ , 0x3d }, | ||
1001 | { STB0899_RCOMP , 0x81 }, | ||
1002 | { STB0899_AGCIQIN , 0x80 }, | ||
1003 | { STB0899_AGC2I1 , 0x04 }, | ||
1004 | { STB0899_AGC2I2 , 0xf5 }, | ||
1005 | { STB0899_TLIR , 0x25 }, | ||
1006 | { STB0899_RTF , 0x80 }, | ||
1007 | { STB0899_DSTATUS , 0x00 }, | ||
1008 | { STB0899_LDI , 0xca }, | ||
1009 | { STB0899_CFRM , 0xf1 }, | ||
1010 | { STB0899_CFRL , 0xf3 }, | ||
1011 | { STB0899_NIRM , 0x2a }, | ||
1012 | { STB0899_NIRL , 0x05 }, | ||
1013 | { STB0899_ISYMB , 0x17 }, | ||
1014 | { STB0899_QSYMB , 0xfa }, | ||
1015 | { STB0899_SFRH , 0x2f }, | ||
1016 | { STB0899_SFRM , 0x68 }, | ||
1017 | { STB0899_SFRL , 0x40 }, | ||
1018 | { STB0899_SFRUPH , 0x2f }, | ||
1019 | { STB0899_SFRUPM , 0x68 }, | ||
1020 | { STB0899_SFRUPL , 0x40 }, | ||
1021 | { STB0899_EQUAI1 , 0xfd }, | ||
1022 | { STB0899_EQUAQ1 , 0x04 }, | ||
1023 | { STB0899_EQUAI2 , 0x0f }, | ||
1024 | { STB0899_EQUAQ2 , 0xff }, | ||
1025 | { STB0899_EQUAI3 , 0xdf }, | ||
1026 | { STB0899_EQUAQ3 , 0xfa }, | ||
1027 | { STB0899_EQUAI4 , 0x37 }, | ||
1028 | { STB0899_EQUAQ4 , 0x0d }, | ||
1029 | { STB0899_EQUAI5 , 0xbd }, | ||
1030 | { STB0899_EQUAQ5 , 0xf7 }, | ||
1031 | { STB0899_DSTATUS2 , 0x00 }, | ||
1032 | { STB0899_VSTATUS , 0x00 }, | ||
1033 | { STB0899_VERROR , 0xff }, | ||
1034 | { STB0899_IQSWAP , 0x2a }, | ||
1035 | { STB0899_ECNT1M , 0x00 }, | ||
1036 | { STB0899_ECNT1L , 0x00 }, | ||
1037 | { STB0899_ECNT2M , 0x00 }, | ||
1038 | { STB0899_ECNT2L , 0x00 }, | ||
1039 | { STB0899_ECNT3M , 0x00 }, | ||
1040 | { STB0899_ECNT3L , 0x00 }, | ||
1041 | { STB0899_FECAUTO1 , 0x06 }, | ||
1042 | { STB0899_FECM , 0x01 }, | ||
1043 | { STB0899_VTH12 , 0xf0 }, | ||
1044 | { STB0899_VTH23 , 0xa0 }, | ||
1045 | { STB0899_VTH34 , 0x78 }, | ||
1046 | { STB0899_VTH56 , 0x4e }, | ||
1047 | { STB0899_VTH67 , 0x48 }, | ||
1048 | { STB0899_VTH78 , 0x38 }, | ||
1049 | { STB0899_PRVIT , 0xff }, | ||
1050 | { STB0899_VITSYNC , 0x19 }, | ||
1051 | { STB0899_RSULC , 0xb1 }, /* DVB = 0xb1, DSS = 0xa1 */ | ||
1052 | { STB0899_TSULC , 0x42 }, | ||
1053 | { STB0899_RSLLC , 0x40 }, | ||
1054 | { STB0899_TSLPL , 0x12 }, | ||
1055 | { STB0899_TSCFGH , 0x0c }, | ||
1056 | { STB0899_TSCFGM , 0x00 }, | ||
1057 | { STB0899_TSCFGL , 0x0c }, | ||
1058 | { STB0899_TSOUT , 0x0d }, /* 0x0d for CAM */ | ||
1059 | { STB0899_RSSYNCDEL , 0x00 }, | ||
1060 | { STB0899_TSINHDELH , 0x02 }, | ||
1061 | { STB0899_TSINHDELM , 0x00 }, | ||
1062 | { STB0899_TSINHDELL , 0x00 }, | ||
1063 | { STB0899_TSLLSTKM , 0x00 }, | ||
1064 | { STB0899_TSLLSTKL , 0x00 }, | ||
1065 | { STB0899_TSULSTKM , 0x00 }, | ||
1066 | { STB0899_TSULSTKL , 0xab }, | ||
1067 | { STB0899_PCKLENUL , 0x00 }, | ||
1068 | { STB0899_PCKLENLL , 0xcc }, | ||
1069 | { STB0899_RSPCKLEN , 0xcc }, | ||
1070 | { STB0899_TSSTATUS , 0x80 }, | ||
1071 | { STB0899_ERRCTRL1 , 0xb6 }, | ||
1072 | { STB0899_ERRCTRL2 , 0x96 }, | ||
1073 | { STB0899_ERRCTRL3 , 0x89 }, | ||
1074 | { STB0899_DMONMSK1 , 0x27 }, | ||
1075 | { STB0899_DMONMSK0 , 0x03 }, | ||
1076 | { STB0899_DEMAPVIT , 0x5c }, | ||
1077 | { STB0899_PLPARM , 0x1f }, | ||
1078 | { STB0899_PDELCTRL , 0x48 }, | ||
1079 | { STB0899_PDELCTRL2 , 0x00 }, | ||
1080 | { STB0899_BBHCTRL1 , 0x00 }, | ||
1081 | { STB0899_BBHCTRL2 , 0x00 }, | ||
1082 | { STB0899_HYSTTHRESH , 0x77 }, | ||
1083 | { STB0899_MATCSTM , 0x00 }, | ||
1084 | { STB0899_MATCSTL , 0x00 }, | ||
1085 | { STB0899_UPLCSTM , 0x00 }, | ||
1086 | { STB0899_UPLCSTL , 0x00 }, | ||
1087 | { STB0899_DFLCSTM , 0x00 }, | ||
1088 | { STB0899_DFLCSTL , 0x00 }, | ||
1089 | { STB0899_SYNCCST , 0x00 }, | ||
1090 | { STB0899_SYNCDCSTM , 0x00 }, | ||
1091 | { STB0899_SYNCDCSTL , 0x00 }, | ||
1092 | { STB0899_ISI_ENTRY , 0x00 }, | ||
1093 | { STB0899_ISI_BIT_EN , 0x00 }, | ||
1094 | { STB0899_MATSTRM , 0x00 }, | ||
1095 | { STB0899_MATSTRL , 0x00 }, | ||
1096 | { STB0899_UPLSTRM , 0x00 }, | ||
1097 | { STB0899_UPLSTRL , 0x00 }, | ||
1098 | { STB0899_DFLSTRM , 0x00 }, | ||
1099 | { STB0899_DFLSTRL , 0x00 }, | ||
1100 | { STB0899_SYNCSTR , 0x00 }, | ||
1101 | { STB0899_SYNCDSTRM , 0x00 }, | ||
1102 | { STB0899_SYNCDSTRL , 0x00 }, | ||
1103 | { STB0899_CFGPDELSTATUS1 , 0x10 }, | ||
1104 | { STB0899_CFGPDELSTATUS2 , 0x00 }, | ||
1105 | { STB0899_BBFERRORM , 0x00 }, | ||
1106 | { STB0899_BBFERRORL , 0x00 }, | ||
1107 | { STB0899_UPKTERRORM , 0x00 }, | ||
1108 | { STB0899_UPKTERRORL , 0x00 }, | ||
1109 | { 0xffff , 0xff }, | ||
1110 | }; | ||
1111 | |||
1112 | /* STB0899 demodulator config for the KNC1 and clones */ | ||
1113 | static struct stb0899_config knc1_dvbs2_config = { | ||
1114 | .init_dev = knc1_stb0899_s1_init_1, | ||
1115 | .init_s2_demod = stb0899_s2_init_2, | ||
1116 | .init_s1_demod = knc1_stb0899_s1_init_3, | ||
1117 | .init_s2_fec = stb0899_s2_init_4, | ||
1118 | .init_tst = stb0899_s1_init_5, | ||
1119 | |||
1120 | .postproc = NULL, | ||
1121 | |||
1122 | .demod_address = 0x68, | ||
1123 | // .ts_output_mode = STB0899_OUT_PARALLEL, /* types = SERIAL/PARALLEL */ | ||
1124 | .block_sync_mode = STB0899_SYNC_FORCED, /* DSS, SYNC_FORCED/UNSYNCED */ | ||
1125 | // .ts_pfbit_toggle = STB0899_MPEG_NORMAL, /* DirecTV, MPEG toggling seq */ | ||
1126 | |||
1127 | .xtal_freq = 27000000, | ||
1128 | .inversion = IQ_SWAP_OFF, /* 1 */ | ||
1129 | |||
1130 | .lo_clk = 76500000, | ||
1131 | .hi_clk = 90000000, | ||
1132 | |||
1133 | .esno_ave = STB0899_DVBS2_ESNO_AVE, | ||
1134 | .esno_quant = STB0899_DVBS2_ESNO_QUANT, | ||
1135 | .avframes_coarse = STB0899_DVBS2_AVFRAMES_COARSE, | ||
1136 | .avframes_fine = STB0899_DVBS2_AVFRAMES_FINE, | ||
1137 | .miss_threshold = STB0899_DVBS2_MISS_THRESHOLD, | ||
1138 | .uwp_threshold_acq = STB0899_DVBS2_UWP_THRESHOLD_ACQ, | ||
1139 | .uwp_threshold_track = STB0899_DVBS2_UWP_THRESHOLD_TRACK, | ||
1140 | .uwp_threshold_sof = STB0899_DVBS2_UWP_THRESHOLD_SOF, | ||
1141 | .sof_search_timeout = STB0899_DVBS2_SOF_SEARCH_TIMEOUT, | ||
1142 | |||
1143 | .btr_nco_bits = STB0899_DVBS2_BTR_NCO_BITS, | ||
1144 | .btr_gain_shift_offset = STB0899_DVBS2_BTR_GAIN_SHIFT_OFFSET, | ||
1145 | .crl_nco_bits = STB0899_DVBS2_CRL_NCO_BITS, | ||
1146 | .ldpc_max_iter = STB0899_DVBS2_LDPC_MAX_ITER, | ||
1147 | |||
1148 | .tuner_get_frequency = tda8261_get_frequency, | ||
1149 | .tuner_set_frequency = tda8261_set_frequency, | ||
1150 | .tuner_set_bandwidth = NULL, | ||
1151 | .tuner_get_bandwidth = tda8261_get_bandwidth, | ||
1152 | .tuner_set_rfsiggain = NULL | ||
1153 | }; | ||
1154 | |||
1155 | /* | ||
1156 | * SD1878/SHA tuner config | ||
1157 | * 1F, Single I/P, Horizontal mount, High Sensitivity | ||
1158 | */ | ||
1159 | static const struct tda8261_config sd1878c_config = { | ||
1160 | // .name = "SD1878/SHA", | ||
1161 | .addr = 0x60, | ||
1162 | .step_size = TDA8261_STEP_1000 /* kHz */ | ||
1163 | }; | ||
1164 | |||
885 | static u8 read_pwm(struct budget_av *budget_av) | 1165 | static u8 read_pwm(struct budget_av *budget_av) |
886 | { | 1166 | { |
887 | u8 b = 0xff; | 1167 | u8 b = 0xff; |
@@ -905,8 +1185,11 @@ static u8 read_pwm(struct budget_av *budget_av) | |||
905 | #define SUBID_DVBS_TV_STAR 0x0014 | 1185 | #define SUBID_DVBS_TV_STAR 0x0014 |
906 | #define SUBID_DVBS_TV_STAR_PLUS_X4 0x0015 | 1186 | #define SUBID_DVBS_TV_STAR_PLUS_X4 0x0015 |
907 | #define SUBID_DVBS_TV_STAR_CI 0x0016 | 1187 | #define SUBID_DVBS_TV_STAR_CI 0x0016 |
1188 | #define SUBID_DVBS2_KNC1 0x0018 | ||
1189 | #define SUBID_DVBS2_KNC1_OEM 0x0019 | ||
908 | #define SUBID_DVBS_EASYWATCH_1 0x001a | 1190 | #define SUBID_DVBS_EASYWATCH_1 0x001a |
909 | #define SUBID_DVBS_EASYWATCH_2 0x001b | 1191 | #define SUBID_DVBS_EASYWATCH_2 0x001b |
1192 | #define SUBID_DVBS2_EASYWATCH 0x001d | ||
910 | #define SUBID_DVBS_EASYWATCH 0x001e | 1193 | #define SUBID_DVBS_EASYWATCH 0x001e |
911 | 1194 | ||
912 | #define SUBID_DVBC_EASYWATCH 0x002a | 1195 | #define SUBID_DVBC_EASYWATCH 0x002a |
@@ -941,6 +1224,9 @@ static void frontend_init(struct budget_av *budget_av) | |||
941 | case SUBID_DVBT_KNC1_PLUS: | 1224 | case SUBID_DVBT_KNC1_PLUS: |
942 | case SUBID_DVBC_EASYWATCH: | 1225 | case SUBID_DVBC_EASYWATCH: |
943 | case SUBID_DVBC_KNC1_PLUS_MK3: | 1226 | case SUBID_DVBC_KNC1_PLUS_MK3: |
1227 | case SUBID_DVBS2_KNC1: | ||
1228 | case SUBID_DVBS2_KNC1_OEM: | ||
1229 | case SUBID_DVBS2_EASYWATCH: | ||
944 | saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTHI); | 1230 | saa7146_setgpio(saa, 3, SAA7146_GPIO_OUTHI); |
945 | break; | 1231 | break; |
946 | } | 1232 | } |
@@ -993,7 +1279,14 @@ static void frontend_init(struct budget_av *budget_av) | |||
993 | fe->ops.tuner_ops.set_params = philips_su1278_ty_ci_tuner_set_params; | 1279 | fe->ops.tuner_ops.set_params = philips_su1278_ty_ci_tuner_set_params; |
994 | } | 1280 | } |
995 | break; | 1281 | break; |
1282 | case SUBID_DVBS2_KNC1: | ||
1283 | case SUBID_DVBS2_KNC1_OEM: | ||
1284 | case SUBID_DVBS2_EASYWATCH: | ||
1285 | budget_av->reinitialise_demod = 1; | ||
1286 | if ((fe = dvb_attach(stb0899_attach, &knc1_dvbs2_config, &budget_av->budget.i2c_adap))) | ||
1287 | dvb_attach(tda8261_attach, fe, &sd1878c_config, &budget_av->budget.i2c_adap); | ||
996 | 1288 | ||
1289 | break; | ||
997 | case SUBID_DVBS_CINERGY1200: | 1290 | case SUBID_DVBS_CINERGY1200: |
998 | fe = dvb_attach(stv0299_attach, &cinergy_1200s_config, | 1291 | fe = dvb_attach(stv0299_attach, &cinergy_1200s_config, |
999 | &budget_av->budget.i2c_adap); | 1292 | &budget_av->budget.i2c_adap); |
@@ -1260,6 +1553,8 @@ static struct saa7146_ext_vv vv_data = { | |||
1260 | static struct saa7146_extension budget_extension; | 1553 | static struct saa7146_extension budget_extension; |
1261 | 1554 | ||
1262 | MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S); | 1555 | MAKE_BUDGET_INFO(knc1s, "KNC1 DVB-S", BUDGET_KNC1S); |
1556 | MAKE_BUDGET_INFO(knc1s2,"KNC1 DVB-S2", BUDGET_KNC1S2); | ||
1557 | MAKE_BUDGET_INFO(sates2,"Satelco EasyWatch DVB-S2", BUDGET_KNC1S2); | ||
1263 | MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C); | 1558 | MAKE_BUDGET_INFO(knc1c, "KNC1 DVB-C", BUDGET_KNC1C); |
1264 | MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T); | 1559 | MAKE_BUDGET_INFO(knc1t, "KNC1 DVB-T", BUDGET_KNC1T); |
1265 | MAKE_BUDGET_INFO(kncxs, "KNC TV STAR DVB-S", BUDGET_TVSTAR); | 1560 | MAKE_BUDGET_INFO(kncxs, "KNC TV STAR DVB-S", BUDGET_TVSTAR); |
@@ -1290,6 +1585,9 @@ static struct pci_device_id pci_tbl[] = { | |||
1290 | MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014), | 1585 | MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0014), |
1291 | MAKE_EXTENSION_PCI(knc1spx4, 0x1894, 0x0015), | 1586 | MAKE_EXTENSION_PCI(knc1spx4, 0x1894, 0x0015), |
1292 | MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016), | 1587 | MAKE_EXTENSION_PCI(kncxs, 0x1894, 0x0016), |
1588 | MAKE_EXTENSION_PCI(knc1s2, 0x1894, 0x0018), | ||
1589 | MAKE_EXTENSION_PCI(knc1s2, 0x1894, 0x0019), | ||
1590 | MAKE_EXTENSION_PCI(sates2, 0x1894, 0x001d), | ||
1293 | MAKE_EXTENSION_PCI(satewpls, 0x1894, 0x001e), | 1591 | MAKE_EXTENSION_PCI(satewpls, 0x1894, 0x001e), |
1294 | MAKE_EXTENSION_PCI(satewpls1, 0x1894, 0x001a), | 1592 | MAKE_EXTENSION_PCI(satewpls1, 0x1894, 0x001a), |
1295 | MAKE_EXTENSION_PCI(satewps, 0x1894, 0x001b), | 1593 | MAKE_EXTENSION_PCI(satewps, 0x1894, 0x001b), |
diff --git a/drivers/media/dvb/ttpci/budget-ci.c b/drivers/media/dvb/ttpci/budget-ci.c index 0a5aad45435d..3507463fdac9 100644 --- a/drivers/media/dvb/ttpci/budget-ci.c +++ b/drivers/media/dvb/ttpci/budget-ci.c | |||
@@ -43,6 +43,11 @@ | |||
43 | #include "stv0299.h" | 43 | #include "stv0299.h" |
44 | #include "stv0297.h" | 44 | #include "stv0297.h" |
45 | #include "tda1004x.h" | 45 | #include "tda1004x.h" |
46 | #include "stb0899_drv.h" | ||
47 | #include "stb0899_reg.h" | ||
48 | #include "stb0899_cfg.h" | ||
49 | #include "stb6100.h" | ||
50 | #include "stb6100_cfg.h" | ||
46 | #include "lnbp21.h" | 51 | #include "lnbp21.h" |
47 | #include "bsbe1.h" | 52 | #include "bsbe1.h" |
48 | #include "bsru6.h" | 53 | #include "bsru6.h" |
@@ -1071,7 +1076,271 @@ static struct tda10023_config tda10023_config = { | |||
1071 | .deltaf = 0xa511, | 1076 | .deltaf = 0xa511, |
1072 | }; | 1077 | }; |
1073 | 1078 | ||
1079 | /* TT S2-3200 DVB-S (STB0899) Inittab */ | ||
1080 | static const struct stb0899_s1_reg tt3200_stb0899_s1_init_1[] = { | ||
1081 | |||
1082 | { STB0899_DEV_ID , 0x81 }, | ||
1083 | { STB0899_DISCNTRL1 , 0x32 }, | ||
1084 | { STB0899_DISCNTRL2 , 0x80 }, | ||
1085 | { STB0899_DISRX_ST0 , 0x04 }, | ||
1086 | { STB0899_DISRX_ST1 , 0x00 }, | ||
1087 | { STB0899_DISPARITY , 0x00 }, | ||
1088 | { STB0899_DISFIFO , 0x00 }, | ||
1089 | { STB0899_DISSTATUS , 0x20 }, | ||
1090 | { STB0899_DISF22 , 0x8c }, | ||
1091 | { STB0899_DISF22RX , 0x9a }, | ||
1092 | { STB0899_SYSREG , 0x0b }, | ||
1093 | { STB0899_ACRPRESC , 0x11 }, | ||
1094 | { STB0899_ACRDIV1 , 0x0a }, | ||
1095 | { STB0899_ACRDIV2 , 0x05 }, | ||
1096 | { STB0899_DACR1 , 0x00 }, | ||
1097 | { STB0899_DACR2 , 0x00 }, | ||
1098 | { STB0899_OUTCFG , 0x00 }, | ||
1099 | { STB0899_MODECFG , 0x00 }, | ||
1100 | { STB0899_IRQSTATUS_3 , 0x30 }, | ||
1101 | { STB0899_IRQSTATUS_2 , 0x00 }, | ||
1102 | { STB0899_IRQSTATUS_1 , 0x00 }, | ||
1103 | { STB0899_IRQSTATUS_0 , 0x00 }, | ||
1104 | { STB0899_IRQMSK_3 , 0xf3 }, | ||
1105 | { STB0899_IRQMSK_2 , 0xfc }, | ||
1106 | { STB0899_IRQMSK_1 , 0xff }, | ||
1107 | { STB0899_IRQMSK_0 , 0xff }, | ||
1108 | { STB0899_IRQCFG , 0x00 }, | ||
1109 | { STB0899_I2CCFG , 0x88 }, | ||
1110 | { STB0899_I2CRPT , 0x48 }, /* 12k Pullup, Repeater=16, Stop=disabled */ | ||
1111 | { STB0899_IOPVALUE5 , 0x00 }, | ||
1112 | { STB0899_IOPVALUE4 , 0x20 }, | ||
1113 | { STB0899_IOPVALUE3 , 0xc9 }, | ||
1114 | { STB0899_IOPVALUE2 , 0x90 }, | ||
1115 | { STB0899_IOPVALUE1 , 0x40 }, | ||
1116 | { STB0899_IOPVALUE0 , 0x00 }, | ||
1117 | { STB0899_GPIO00CFG , 0x82 }, | ||
1118 | { STB0899_GPIO01CFG , 0x82 }, | ||
1119 | { STB0899_GPIO02CFG , 0x82 }, | ||
1120 | { STB0899_GPIO03CFG , 0x82 }, | ||
1121 | { STB0899_GPIO04CFG , 0x82 }, | ||
1122 | { STB0899_GPIO05CFG , 0x82 }, | ||
1123 | { STB0899_GPIO06CFG , 0x82 }, | ||
1124 | { STB0899_GPIO07CFG , 0x82 }, | ||
1125 | { STB0899_GPIO08CFG , 0x82 }, | ||
1126 | { STB0899_GPIO09CFG , 0x82 }, | ||
1127 | { STB0899_GPIO10CFG , 0x82 }, | ||
1128 | { STB0899_GPIO11CFG , 0x82 }, | ||
1129 | { STB0899_GPIO12CFG , 0x82 }, | ||
1130 | { STB0899_GPIO13CFG , 0x82 }, | ||
1131 | { STB0899_GPIO14CFG , 0x82 }, | ||
1132 | { STB0899_GPIO15CFG , 0x82 }, | ||
1133 | { STB0899_GPIO16CFG , 0x82 }, | ||
1134 | { STB0899_GPIO17CFG , 0x82 }, | ||
1135 | { STB0899_GPIO18CFG , 0x82 }, | ||
1136 | { STB0899_GPIO19CFG , 0x82 }, | ||
1137 | { STB0899_GPIO20CFG , 0x82 }, | ||
1138 | { STB0899_SDATCFG , 0xb8 }, | ||
1139 | { STB0899_SCLTCFG , 0xba }, | ||
1140 | { STB0899_AGCRFCFG , 0x1c }, /* 0x11 */ | ||
1141 | { STB0899_GPIO22 , 0x82 }, /* AGCBB2CFG */ | ||
1142 | { STB0899_GPIO21 , 0x91 }, /* AGCBB1CFG */ | ||
1143 | { STB0899_DIRCLKCFG , 0x82 }, | ||
1144 | { STB0899_CLKOUT27CFG , 0x7e }, | ||
1145 | { STB0899_STDBYCFG , 0x82 }, | ||
1146 | { STB0899_CS0CFG , 0x82 }, | ||
1147 | { STB0899_CS1CFG , 0x82 }, | ||
1148 | { STB0899_DISEQCOCFG , 0x20 }, | ||
1149 | { STB0899_GPIO32CFG , 0x82 }, | ||
1150 | { STB0899_GPIO33CFG , 0x82 }, | ||
1151 | { STB0899_GPIO34CFG , 0x82 }, | ||
1152 | { STB0899_GPIO35CFG , 0x82 }, | ||
1153 | { STB0899_GPIO36CFG , 0x82 }, | ||
1154 | { STB0899_GPIO37CFG , 0x82 }, | ||
1155 | { STB0899_GPIO38CFG , 0x82 }, | ||
1156 | { STB0899_GPIO39CFG , 0x82 }, | ||
1157 | { STB0899_NCOARSE , 0x15 }, /* 0x15 = 27 Mhz Clock, F/3 = 198MHz, F/6 = 99MHz */ | ||
1158 | { STB0899_SYNTCTRL , 0x02 }, /* 0x00 = CLK from CLKI, 0x02 = CLK from XTALI */ | ||
1159 | { STB0899_FILTCTRL , 0x00 }, | ||
1160 | { STB0899_SYSCTRL , 0x00 }, | ||
1161 | { STB0899_STOPCLK1 , 0x20 }, | ||
1162 | { STB0899_STOPCLK2 , 0x00 }, | ||
1163 | { STB0899_INTBUFSTATUS , 0x00 }, | ||
1164 | { STB0899_INTBUFCTRL , 0x0a }, | ||
1165 | { 0xffff , 0xff }, | ||
1166 | }; | ||
1167 | |||
1168 | static const struct stb0899_s1_reg tt3200_stb0899_s1_init_3[] = { | ||
1169 | { STB0899_DEMOD , 0x00 }, | ||
1170 | { STB0899_RCOMPC , 0xc9 }, | ||
1171 | { STB0899_AGC1CN , 0x41 }, | ||
1172 | { STB0899_AGC1REF , 0x10 }, | ||
1173 | { STB0899_RTC , 0x7a }, | ||
1174 | { STB0899_TMGCFG , 0x4e }, | ||
1175 | { STB0899_AGC2REF , 0x34 }, | ||
1176 | { STB0899_TLSR , 0x84 }, | ||
1177 | { STB0899_CFD , 0xc7 }, | ||
1178 | { STB0899_ACLC , 0x87 }, | ||
1179 | { STB0899_BCLC , 0x94 }, | ||
1180 | { STB0899_EQON , 0x41 }, | ||
1181 | { STB0899_LDT , 0xdd }, | ||
1182 | { STB0899_LDT2 , 0xc9 }, | ||
1183 | { STB0899_EQUALREF , 0xb4 }, | ||
1184 | { STB0899_TMGRAMP , 0x10 }, | ||
1185 | { STB0899_TMGTHD , 0x30 }, | ||
1186 | { STB0899_IDCCOMP , 0xfb }, | ||
1187 | { STB0899_QDCCOMP , 0x03 }, | ||
1188 | { STB0899_POWERI , 0x3b }, | ||
1189 | { STB0899_POWERQ , 0x3d }, | ||
1190 | { STB0899_RCOMP , 0x81 }, | ||
1191 | { STB0899_AGCIQIN , 0x80 }, | ||
1192 | { STB0899_AGC2I1 , 0x04 }, | ||
1193 | { STB0899_AGC2I2 , 0xf5 }, | ||
1194 | { STB0899_TLIR , 0x25 }, | ||
1195 | { STB0899_RTF , 0x80 }, | ||
1196 | { STB0899_DSTATUS , 0x00 }, | ||
1197 | { STB0899_LDI , 0xca }, | ||
1198 | { STB0899_CFRM , 0xf1 }, | ||
1199 | { STB0899_CFRL , 0xf3 }, | ||
1200 | { STB0899_NIRM , 0x2a }, | ||
1201 | { STB0899_NIRL , 0x05 }, | ||
1202 | { STB0899_ISYMB , 0x17 }, | ||
1203 | { STB0899_QSYMB , 0xfa }, | ||
1204 | { STB0899_SFRH , 0x2f }, | ||
1205 | { STB0899_SFRM , 0x68 }, | ||
1206 | { STB0899_SFRL , 0x40 }, | ||
1207 | { STB0899_SFRUPH , 0x2f }, | ||
1208 | { STB0899_SFRUPM , 0x68 }, | ||
1209 | { STB0899_SFRUPL , 0x40 }, | ||
1210 | { STB0899_EQUAI1 , 0xfd }, | ||
1211 | { STB0899_EQUAQ1 , 0x04 }, | ||
1212 | { STB0899_EQUAI2 , 0x0f }, | ||
1213 | { STB0899_EQUAQ2 , 0xff }, | ||
1214 | { STB0899_EQUAI3 , 0xdf }, | ||
1215 | { STB0899_EQUAQ3 , 0xfa }, | ||
1216 | { STB0899_EQUAI4 , 0x37 }, | ||
1217 | { STB0899_EQUAQ4 , 0x0d }, | ||
1218 | { STB0899_EQUAI5 , 0xbd }, | ||
1219 | { STB0899_EQUAQ5 , 0xf7 }, | ||
1220 | { STB0899_DSTATUS2 , 0x00 }, | ||
1221 | { STB0899_VSTATUS , 0x00 }, | ||
1222 | { STB0899_VERROR , 0xff }, | ||
1223 | { STB0899_IQSWAP , 0x2a }, | ||
1224 | { STB0899_ECNT1M , 0x00 }, | ||
1225 | { STB0899_ECNT1L , 0x00 }, | ||
1226 | { STB0899_ECNT2M , 0x00 }, | ||
1227 | { STB0899_ECNT2L , 0x00 }, | ||
1228 | { STB0899_ECNT3M , 0x00 }, | ||
1229 | { STB0899_ECNT3L , 0x00 }, | ||
1230 | { STB0899_FECAUTO1 , 0x06 }, | ||
1231 | { STB0899_FECM , 0x01 }, | ||
1232 | { STB0899_VTH12 , 0xf0 }, | ||
1233 | { STB0899_VTH23 , 0xa0 }, | ||
1234 | { STB0899_VTH34 , 0x78 }, | ||
1235 | { STB0899_VTH56 , 0x4e }, | ||
1236 | { STB0899_VTH67 , 0x48 }, | ||
1237 | { STB0899_VTH78 , 0x38 }, | ||
1238 | { STB0899_PRVIT , 0xff }, | ||
1239 | { STB0899_VITSYNC , 0x19 }, | ||
1240 | { STB0899_RSULC , 0xb1 }, /* DVB = 0xb1, DSS = 0xa1 */ | ||
1241 | { STB0899_TSULC , 0x42 }, | ||
1242 | { STB0899_RSLLC , 0x40 }, | ||
1243 | { STB0899_TSLPL , 0x12 }, | ||
1244 | { STB0899_TSCFGH , 0x0c }, | ||
1245 | { STB0899_TSCFGM , 0x00 }, | ||
1246 | { STB0899_TSCFGL , 0x0c }, | ||
1247 | { STB0899_TSOUT , 0x0d }, /* 0x0d for CAM */ | ||
1248 | { STB0899_RSSYNCDEL , 0x00 }, | ||
1249 | { STB0899_TSINHDELH , 0x02 }, | ||
1250 | { STB0899_TSINHDELM , 0x00 }, | ||
1251 | { STB0899_TSINHDELL , 0x00 }, | ||
1252 | { STB0899_TSLLSTKM , 0x00 }, | ||
1253 | { STB0899_TSLLSTKL , 0x00 }, | ||
1254 | { STB0899_TSULSTKM , 0x00 }, | ||
1255 | { STB0899_TSULSTKL , 0xab }, | ||
1256 | { STB0899_PCKLENUL , 0x00 }, | ||
1257 | { STB0899_PCKLENLL , 0xcc }, | ||
1258 | { STB0899_RSPCKLEN , 0xcc }, | ||
1259 | { STB0899_TSSTATUS , 0x80 }, | ||
1260 | { STB0899_ERRCTRL1 , 0xb6 }, | ||
1261 | { STB0899_ERRCTRL2 , 0x96 }, | ||
1262 | { STB0899_ERRCTRL3 , 0x89 }, | ||
1263 | { STB0899_DMONMSK1 , 0x27 }, | ||
1264 | { STB0899_DMONMSK0 , 0x03 }, | ||
1265 | { STB0899_DEMAPVIT , 0x5c }, | ||
1266 | { STB0899_PLPARM , 0x1f }, | ||
1267 | { STB0899_PDELCTRL , 0x48 }, | ||
1268 | { STB0899_PDELCTRL2 , 0x00 }, | ||
1269 | { STB0899_BBHCTRL1 , 0x00 }, | ||
1270 | { STB0899_BBHCTRL2 , 0x00 }, | ||
1271 | { STB0899_HYSTTHRESH , 0x77 }, | ||
1272 | { STB0899_MATCSTM , 0x00 }, | ||
1273 | { STB0899_MATCSTL , 0x00 }, | ||
1274 | { STB0899_UPLCSTM , 0x00 }, | ||
1275 | { STB0899_UPLCSTL , 0x00 }, | ||
1276 | { STB0899_DFLCSTM , 0x00 }, | ||
1277 | { STB0899_DFLCSTL , 0x00 }, | ||
1278 | { STB0899_SYNCCST , 0x00 }, | ||
1279 | { STB0899_SYNCDCSTM , 0x00 }, | ||
1280 | { STB0899_SYNCDCSTL , 0x00 }, | ||
1281 | { STB0899_ISI_ENTRY , 0x00 }, | ||
1282 | { STB0899_ISI_BIT_EN , 0x00 }, | ||
1283 | { STB0899_MATSTRM , 0x00 }, | ||
1284 | { STB0899_MATSTRL , 0x00 }, | ||
1285 | { STB0899_UPLSTRM , 0x00 }, | ||
1286 | { STB0899_UPLSTRL , 0x00 }, | ||
1287 | { STB0899_DFLSTRM , 0x00 }, | ||
1288 | { STB0899_DFLSTRL , 0x00 }, | ||
1289 | { STB0899_SYNCSTR , 0x00 }, | ||
1290 | { STB0899_SYNCDSTRM , 0x00 }, | ||
1291 | { STB0899_SYNCDSTRL , 0x00 }, | ||
1292 | { STB0899_CFGPDELSTATUS1 , 0x10 }, | ||
1293 | { STB0899_CFGPDELSTATUS2 , 0x00 }, | ||
1294 | { STB0899_BBFERRORM , 0x00 }, | ||
1295 | { STB0899_BBFERRORL , 0x00 }, | ||
1296 | { STB0899_UPKTERRORM , 0x00 }, | ||
1297 | { STB0899_UPKTERRORL , 0x00 }, | ||
1298 | { 0xffff , 0xff }, | ||
1299 | }; | ||
1074 | 1300 | ||
1301 | static struct stb0899_config tt3200_config = { | ||
1302 | .init_dev = tt3200_stb0899_s1_init_1, | ||
1303 | .init_s2_demod = stb0899_s2_init_2, | ||
1304 | .init_s1_demod = tt3200_stb0899_s1_init_3, | ||
1305 | .init_s2_fec = stb0899_s2_init_4, | ||
1306 | .init_tst = stb0899_s1_init_5, | ||
1307 | |||
1308 | .postproc = NULL, | ||
1309 | |||
1310 | .demod_address = 0x68, | ||
1311 | |||
1312 | .xtal_freq = 27000000, | ||
1313 | .inversion = IQ_SWAP_ON, /* 1 */ | ||
1314 | |||
1315 | .lo_clk = 76500000, | ||
1316 | .hi_clk = 99000000, | ||
1317 | |||
1318 | .esno_ave = STB0899_DVBS2_ESNO_AVE, | ||
1319 | .esno_quant = STB0899_DVBS2_ESNO_QUANT, | ||
1320 | .avframes_coarse = STB0899_DVBS2_AVFRAMES_COARSE, | ||
1321 | .avframes_fine = STB0899_DVBS2_AVFRAMES_FINE, | ||
1322 | .miss_threshold = STB0899_DVBS2_MISS_THRESHOLD, | ||
1323 | .uwp_threshold_acq = STB0899_DVBS2_UWP_THRESHOLD_ACQ, | ||
1324 | .uwp_threshold_track = STB0899_DVBS2_UWP_THRESHOLD_TRACK, | ||
1325 | .uwp_threshold_sof = STB0899_DVBS2_UWP_THRESHOLD_SOF, | ||
1326 | .sof_search_timeout = STB0899_DVBS2_SOF_SEARCH_TIMEOUT, | ||
1327 | |||
1328 | .btr_nco_bits = STB0899_DVBS2_BTR_NCO_BITS, | ||
1329 | .btr_gain_shift_offset = STB0899_DVBS2_BTR_GAIN_SHIFT_OFFSET, | ||
1330 | .crl_nco_bits = STB0899_DVBS2_CRL_NCO_BITS, | ||
1331 | .ldpc_max_iter = STB0899_DVBS2_LDPC_MAX_ITER, | ||
1332 | |||
1333 | .tuner_get_frequency = stb6100_get_frequency, | ||
1334 | .tuner_set_frequency = stb6100_set_frequency, | ||
1335 | .tuner_set_bandwidth = stb6100_set_bandwidth, | ||
1336 | .tuner_get_bandwidth = stb6100_get_bandwidth, | ||
1337 | .tuner_set_rfsiggain = NULL | ||
1338 | }; | ||
1339 | |||
1340 | struct stb6100_config tt3200_stb6100_config = { | ||
1341 | .tuner_address = 0x60, | ||
1342 | .refclock = 27000000, | ||
1343 | }; | ||
1075 | 1344 | ||
1076 | static void frontend_init(struct budget_ci *budget_ci) | 1345 | static void frontend_init(struct budget_ci *budget_ci) |
1077 | { | 1346 | { |
@@ -1152,6 +1421,46 @@ static void frontend_init(struct budget_ci *budget_ci) | |||
1152 | } | 1421 | } |
1153 | } | 1422 | } |
1154 | break; | 1423 | break; |
1424 | |||
1425 | case 0x1019: // TT S2-3200 PCI | ||
1426 | /* | ||
1427 | * NOTE! on some STB0899 versions, the internal PLL takes a longer time | ||
1428 | * to settle, aka LOCK. On the older revisions of the chip, we don't see | ||
1429 | * this, as a result on the newer chips the entire clock tree, will not | ||
1430 | * be stable after a freshly POWER 'ed up situation. | ||
1431 | * In this case, we should RESET the STB0899 (Active LOW) and wait for | ||
1432 | * PLL stabilization. | ||
1433 | * | ||
1434 | * On the TT S2 3200 and clones, the STB0899 demodulator's RESETB is | ||
1435 | * connected to the SAA7146 GPIO, GPIO2, Pin 142 | ||
1436 | */ | ||
1437 | /* Reset Demodulator */ | ||
1438 | saa7146_setgpio(budget_ci->budget.dev, 2, SAA7146_GPIO_OUTLO); | ||
1439 | /* Wait for everything to die */ | ||
1440 | msleep(50); | ||
1441 | /* Pull it up out of Reset state */ | ||
1442 | saa7146_setgpio(budget_ci->budget.dev, 2, SAA7146_GPIO_OUTHI); | ||
1443 | /* Wait for PLL to stabilize */ | ||
1444 | msleep(250); | ||
1445 | /* | ||
1446 | * PLL state should be stable now. Ideally, we should check | ||
1447 | * for PLL LOCK status. But well, never mind! | ||
1448 | */ | ||
1449 | budget_ci->budget.dvb_frontend = dvb_attach(stb0899_attach, &tt3200_config, &budget_ci->budget.i2c_adap); | ||
1450 | if (budget_ci->budget.dvb_frontend) { | ||
1451 | if (dvb_attach(stb6100_attach, budget_ci->budget.dvb_frontend, &tt3200_stb6100_config, &budget_ci->budget.i2c_adap)) { | ||
1452 | if (!dvb_attach(lnbp21_attach, budget_ci->budget.dvb_frontend, &budget_ci->budget.i2c_adap, 0, 0)) { | ||
1453 | printk("%s: No LNBP21 found!\n", __FUNCTION__); | ||
1454 | dvb_frontend_detach(budget_ci->budget.dvb_frontend); | ||
1455 | budget_ci->budget.dvb_frontend = NULL; | ||
1456 | } | ||
1457 | } else { | ||
1458 | dvb_frontend_detach(budget_ci->budget.dvb_frontend); | ||
1459 | budget_ci->budget.dvb_frontend = NULL; | ||
1460 | } | ||
1461 | } | ||
1462 | break; | ||
1463 | |||
1155 | } | 1464 | } |
1156 | 1465 | ||
1157 | if (budget_ci->budget.dvb_frontend == NULL) { | 1466 | if (budget_ci->budget.dvb_frontend == NULL) { |
@@ -1242,6 +1551,7 @@ MAKE_BUDGET_INFO(ttbt2, "TT-Budget/WinTV-NOVA-T PCI", BUDGET_TT); | |||
1242 | MAKE_BUDGET_INFO(ttbtci, "TT-Budget-T-CI PCI", BUDGET_TT); | 1551 | MAKE_BUDGET_INFO(ttbtci, "TT-Budget-T-CI PCI", BUDGET_TT); |
1243 | MAKE_BUDGET_INFO(ttbcci, "TT-Budget-C-CI PCI", BUDGET_TT); | 1552 | MAKE_BUDGET_INFO(ttbcci, "TT-Budget-C-CI PCI", BUDGET_TT); |
1244 | MAKE_BUDGET_INFO(ttc1501, "TT-Budget C-1501 PCI", BUDGET_TT); | 1553 | MAKE_BUDGET_INFO(ttc1501, "TT-Budget C-1501 PCI", BUDGET_TT); |
1554 | MAKE_BUDGET_INFO(tt3200, "TT-Budget S2-3200 PCI", BUDGET_TT); | ||
1245 | 1555 | ||
1246 | static struct pci_device_id pci_tbl[] = { | 1556 | static struct pci_device_id pci_tbl[] = { |
1247 | MAKE_EXTENSION_PCI(ttbci, 0x13c2, 0x100c), | 1557 | MAKE_EXTENSION_PCI(ttbci, 0x13c2, 0x100c), |
@@ -1251,6 +1561,7 @@ static struct pci_device_id pci_tbl[] = { | |||
1251 | MAKE_EXTENSION_PCI(ttbtci, 0x13c2, 0x1012), | 1561 | MAKE_EXTENSION_PCI(ttbtci, 0x13c2, 0x1012), |
1252 | MAKE_EXTENSION_PCI(ttbs2, 0x13c2, 0x1017), | 1562 | MAKE_EXTENSION_PCI(ttbs2, 0x13c2, 0x1017), |
1253 | MAKE_EXTENSION_PCI(ttc1501, 0x13c2, 0x101a), | 1563 | MAKE_EXTENSION_PCI(ttc1501, 0x13c2, 0x101a), |
1564 | MAKE_EXTENSION_PCI(tt3200, 0x13c2, 0x1019), | ||
1254 | { | 1565 | { |
1255 | .vendor = 0, | 1566 | .vendor = 0, |
1256 | } | 1567 | } |
diff --git a/drivers/media/dvb/ttpci/budget.h b/drivers/media/dvb/ttpci/budget.h index 86435bf16260..3ad0c6789ba7 100644 --- a/drivers/media/dvb/ttpci/budget.h +++ b/drivers/media/dvb/ttpci/budget.h | |||
@@ -103,6 +103,7 @@ static struct saa7146_pci_extension_data x_var = { \ | |||
103 | #define BUDGET_CIN1200C_MK3 15 | 103 | #define BUDGET_CIN1200C_MK3 15 |
104 | #define BUDGET_KNC1C_MK3 16 | 104 | #define BUDGET_KNC1C_MK3 16 |
105 | #define BUDGET_KNC1CP_MK3 17 | 105 | #define BUDGET_KNC1CP_MK3 17 |
106 | #define BUDGET_KNC1S2 18 | ||
106 | 107 | ||
107 | #define BUDGET_VIDEO_PORTA 0 | 108 | #define BUDGET_VIDEO_PORTA 0 |
108 | #define BUDGET_VIDEO_PORTB 1 | 109 | #define BUDGET_VIDEO_PORTB 1 |