aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2013-03-09 10:05:58 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-21 06:46:56 -0400
commiteab0fa0f04317c7bb50f87d6b410d8ad6e2c2888 (patch)
tree84101cca94de0605b5c0eed9ab1bea73854507dc
parent80ccb51a0f970ab0935a8be70b677ecbcdf74e3e (diff)
[media] siano: split get_frontend into per-std functions
Instead of handling both DVB-T and ISDB-T at the same get_frontend function, break it intow one function per-delivery system. That makes the code clearer as we start to add support for DVBv5 statistics, and for ISDB-T get frontend stuff. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/common/siano/smsdvb.c229
1 files changed, 124 insertions, 105 deletions
diff --git a/drivers/media/common/siano/smsdvb.c b/drivers/media/common/siano/smsdvb.c
index 6335574e9342..1d6b8dfa0808 100644
--- a/drivers/media/common/siano/smsdvb.c
+++ b/drivers/media/common/siano/smsdvb.c
@@ -863,131 +863,150 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe)
863 } 863 }
864} 864}
865 865
866static int smsdvb_get_frontend(struct dvb_frontend *fe) 866static int smsdvb_get_frontend_dvb(struct dvb_frontend *fe)
867{ 867{
868 struct dtv_frontend_properties *fep = &fe->dtv_property_cache; 868 struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
869 struct smsdvb_client_t *client = 869 struct smsdvb_client_t *client =
870 container_of(fe, struct smsdvb_client_t, frontend); 870 container_of(fe, struct smsdvb_client_t, frontend);
871 struct smscore_device_t *coredev = client->coredev;
872 struct TRANSMISSION_STATISTICS_S *td = 871 struct TRANSMISSION_STATISTICS_S *td =
873 &client->sms_stat_dvb.TransmissionData; 872 &client->sms_stat_dvb.TransmissionData;
874 873
875 switch (smscore_get_device_mode(coredev)) { 874 fep->frequency = td->Frequency;
876 case DEVICE_MODE_DVBT:
877 case DEVICE_MODE_DVBT_BDA:
878 fep->frequency = td->Frequency;
879
880 switch (td->Bandwidth) {
881 case 6:
882 fep->bandwidth_hz = 6000000;
883 break;
884 case 7:
885 fep->bandwidth_hz = 7000000;
886 break;
887 case 8:
888 fep->bandwidth_hz = 8000000;
889 break;
890 }
891 875
892 switch (td->TransmissionMode) { 876 switch (td->Bandwidth) {
893 case 2: 877 case 6:
894 fep->transmission_mode = TRANSMISSION_MODE_2K; 878 fep->bandwidth_hz = 6000000;
895 break; 879 break;
896 case 8: 880 case 7:
897 fep->transmission_mode = TRANSMISSION_MODE_8K; 881 fep->bandwidth_hz = 7000000;
898 } 882 break;
883 case 8:
884 fep->bandwidth_hz = 8000000;
885 break;
886 }
899 887
900 switch (td->GuardInterval) { 888 switch (td->TransmissionMode) {
901 case 0: 889 case 2:
902 fep->guard_interval = GUARD_INTERVAL_1_32; 890 fep->transmission_mode = TRANSMISSION_MODE_2K;
903 break; 891 break;
904 case 1: 892 case 8:
905 fep->guard_interval = GUARD_INTERVAL_1_16; 893 fep->transmission_mode = TRANSMISSION_MODE_8K;
906 break; 894 }
907 case 2:
908 fep->guard_interval = GUARD_INTERVAL_1_8;
909 break;
910 case 3:
911 fep->guard_interval = GUARD_INTERVAL_1_4;
912 break;
913 }
914 895
915 switch (td->CodeRate) { 896 switch (td->GuardInterval) {
916 case 0: 897 case 0:
917 fep->code_rate_HP = FEC_1_2; 898 fep->guard_interval = GUARD_INTERVAL_1_32;
918 break; 899 break;
919 case 1: 900 case 1:
920 fep->code_rate_HP = FEC_2_3; 901 fep->guard_interval = GUARD_INTERVAL_1_16;
921 break; 902 break;
922 case 2: 903 case 2:
923 fep->code_rate_HP = FEC_3_4; 904 fep->guard_interval = GUARD_INTERVAL_1_8;
924 break; 905 break;
925 case 3: 906 case 3:
926 fep->code_rate_HP = FEC_5_6; 907 fep->guard_interval = GUARD_INTERVAL_1_4;
927 break; 908 break;
928 case 4: 909 }
929 fep->code_rate_HP = FEC_7_8;
930 break;
931 }
932 910
933 switch (td->LPCodeRate) { 911 switch (td->CodeRate) {
934 case 0: 912 case 0:
935 fep->code_rate_LP = FEC_1_2; 913 fep->code_rate_HP = FEC_1_2;
936 break; 914 break;
937 case 1: 915 case 1:
938 fep->code_rate_LP = FEC_2_3; 916 fep->code_rate_HP = FEC_2_3;
939 break; 917 break;
940 case 2: 918 case 2:
941 fep->code_rate_LP = FEC_3_4; 919 fep->code_rate_HP = FEC_3_4;
942 break; 920 break;
943 case 3: 921 case 3:
944 fep->code_rate_LP = FEC_5_6; 922 fep->code_rate_HP = FEC_5_6;
945 break; 923 break;
946 case 4: 924 case 4:
947 fep->code_rate_LP = FEC_7_8; 925 fep->code_rate_HP = FEC_7_8;
948 break; 926 break;
949 } 927 }
950 928
951 switch (td->Constellation) { 929 switch (td->LPCodeRate) {
952 case 0: 930 case 0:
953 fep->modulation = QPSK; 931 fep->code_rate_LP = FEC_1_2;
954 break; 932 break;
955 case 1: 933 case 1:
956 fep->modulation = QAM_16; 934 fep->code_rate_LP = FEC_2_3;
957 break; 935 break;
958 case 2: 936 case 2:
959 fep->modulation = QAM_64; 937 fep->code_rate_LP = FEC_3_4;
960 break; 938 break;
961 } 939 case 3:
940 fep->code_rate_LP = FEC_5_6;
941 break;
942 case 4:
943 fep->code_rate_LP = FEC_7_8;
944 break;
945 }
962 946
963 switch (td->Hierarchy) { 947 switch (td->Constellation) {
964 case 0: 948 case 0:
965 fep->hierarchy = HIERARCHY_NONE; 949 fep->modulation = QPSK;
966 break; 950 break;
967 case 1: 951 case 1:
968 fep->hierarchy = HIERARCHY_1; 952 fep->modulation = QAM_16;
969 break; 953 break;
970 case 2: 954 case 2:
971 fep->hierarchy = HIERARCHY_2; 955 fep->modulation = QAM_64;
972 break; 956 break;
973 case 3: 957 }
974 fep->hierarchy = HIERARCHY_4;
975 break;
976 }
977 958
978 fep->inversion = INVERSION_AUTO; 959 switch (td->Hierarchy) {
960 case 0:
961 fep->hierarchy = HIERARCHY_NONE;
979 break; 962 break;
963 case 1:
964 fep->hierarchy = HIERARCHY_1;
965 break;
966 case 2:
967 fep->hierarchy = HIERARCHY_2;
968 break;
969 case 3:
970 fep->hierarchy = HIERARCHY_4;
971 break;
972 }
973
974 fep->inversion = INVERSION_AUTO;
975
976 return 0;
977}
978
979static int smsdvb_get_frontend_isdb(struct dvb_frontend *fe)
980{
981 struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
982 struct smsdvb_client_t *client =
983 container_of(fe, struct smsdvb_client_t, frontend);
984 struct TRANSMISSION_STATISTICS_S *td =
985 &client->sms_stat_dvb.TransmissionData;
986
987 fep->frequency = td->Frequency;
988 fep->bandwidth_hz = 6000000;
989 /* todo: retrive the other parameters */
990
991 return 0;
992}
993
994static int smsdvb_get_frontend(struct dvb_frontend *fe)
995{
996 struct smsdvb_client_t *client =
997 container_of(fe, struct smsdvb_client_t, frontend);
998 struct smscore_device_t *coredev = client->coredev;
999
1000 switch (smscore_get_device_mode(coredev)) {
1001 case DEVICE_MODE_DVBT:
1002 case DEVICE_MODE_DVBT_BDA:
1003 return smsdvb_get_frontend_dvb(fe);
980 case DEVICE_MODE_ISDBT: 1004 case DEVICE_MODE_ISDBT:
981 case DEVICE_MODE_ISDBT_BDA: 1005 case DEVICE_MODE_ISDBT_BDA:
982 fep->frequency = td->Frequency; 1006 return smsdvb_get_frontend_isdb(fe);
983 fep->bandwidth_hz = 6000000;
984 /* todo: retrive the other parameters */
985 break;
986 default: 1007 default:
987 return -EINVAL; 1008 return -EINVAL;
988 } 1009 }
989
990 return 0;
991} 1010}
992 1011
993static int smsdvb_init(struct dvb_frontend *fe) 1012static int smsdvb_init(struct dvb_frontend *fe)