diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/media/dvb/bt8xx/dst.c | 89 | ||||
-rw-r--r-- | drivers/media/dvb/bt8xx/dst_common.h | 4 |
2 files changed, 90 insertions, 3 deletions
diff --git a/drivers/media/dvb/bt8xx/dst.c b/drivers/media/dvb/bt8xx/dst.c index 39835edba1d9..eef34481d535 100644 --- a/drivers/media/dvb/bt8xx/dst.c +++ b/drivers/media/dvb/bt8xx/dst.c | |||
@@ -673,7 +673,7 @@ struct dst_types dst_tlist[] = { | |||
673 | .offset = 1, | 673 | .offset = 1, |
674 | .dst_type = DST_TYPE_IS_CABLE, | 674 | .dst_type = DST_TYPE_IS_CABLE, |
675 | .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1 | 675 | .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_1 |
676 | | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD, | 676 | | DST_TYPE_HAS_FW_2, |
677 | .dst_feature = DST_TYPE_HAS_CA | 677 | .dst_feature = DST_TYPE_HAS_CA |
678 | }, | 678 | }, |
679 | 679 | ||
@@ -681,7 +681,7 @@ struct dst_types dst_tlist[] = { | |||
681 | .device_id = "DCTNEW", | 681 | .device_id = "DCTNEW", |
682 | .offset = 1, | 682 | .offset = 1, |
683 | .dst_type = DST_TYPE_IS_CABLE, | 683 | .dst_type = DST_TYPE_IS_CABLE, |
684 | .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_3, | 684 | .type_flags = DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_3 | DST_TYPE_HAS_FW_BUILD, |
685 | .dst_feature = 0 | 685 | .dst_feature = 0 |
686 | }, | 686 | }, |
687 | 687 | ||
@@ -689,7 +689,7 @@ struct dst_types dst_tlist[] = { | |||
689 | .device_id = "DTT-CI", | 689 | .device_id = "DTT-CI", |
690 | .offset = 1, | 690 | .offset = 1, |
691 | .dst_type = DST_TYPE_IS_TERR, | 691 | .dst_type = DST_TYPE_IS_TERR, |
692 | .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_FW_BUILD, | 692 | .type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_2, |
693 | .dst_feature = 0 | 693 | .dst_feature = 0 |
694 | }, | 694 | }, |
695 | 695 | ||
@@ -729,6 +729,71 @@ struct dst_types dst_tlist[] = { | |||
729 | 729 | ||
730 | }; | 730 | }; |
731 | 731 | ||
732 | static int dst_get_mac(struct dst_state *state) | ||
733 | { | ||
734 | u8 get_mac[] = { 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; | ||
735 | get_mac[7] = dst_check_sum(get_mac, 7); | ||
736 | if (dst_command(state, get_mac, 8) < 0) { | ||
737 | dprintk(verbose, DST_INFO, 1, "Unsupported Command"); | ||
738 | return -1; | ||
739 | } | ||
740 | memset(&state->mac_address, '\0', 8); | ||
741 | memcpy(&state->mac_address, &state->rxbuffer, 6); | ||
742 | dprintk(verbose, DST_ERROR, 1, "MAC Address=[%02x:%02x:%02x:%02x:%02x:%02x]", | ||
743 | state->mac_address[0], state->mac_address[1], state->mac_address[2], | ||
744 | state->mac_address[4], state->mac_address[5], state->mac_address[6]); | ||
745 | |||
746 | return 0; | ||
747 | } | ||
748 | |||
749 | static int dst_fw_ver(struct dst_state *state) | ||
750 | { | ||
751 | u8 get_ver[] = { 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; | ||
752 | get_ver[7] = dst_check_sum(get_ver, 7); | ||
753 | if (dst_command(state, get_ver, 8) < 0) { | ||
754 | dprintk(verbose, DST_INFO, 1, "Unsupported Command"); | ||
755 | return -1; | ||
756 | } | ||
757 | memset(&state->fw_version, '\0', 8); | ||
758 | memcpy(&state->fw_version, &state->rxbuffer, 8); | ||
759 | dprintk(verbose, DST_ERROR, 1, "Firmware Ver = %x.%x Build = %02x, on %x:%x, %x-%x-20%02x", | ||
760 | state->fw_version[0] >> 4, state->fw_version[0] & 0x0f, | ||
761 | state->fw_version[1], | ||
762 | state->fw_version[5], state->fw_version[6], | ||
763 | state->fw_version[4], state->fw_version[3], state->fw_version[2]); | ||
764 | |||
765 | return 0; | ||
766 | } | ||
767 | |||
768 | static int dst_card_type(struct dst_state *state) | ||
769 | { | ||
770 | u8 get_type[] = { 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; | ||
771 | get_type[7] = dst_check_sum(get_type, 7); | ||
772 | if (dst_command(state, get_type, 8) < 0) { | ||
773 | dprintk(verbose, DST_INFO, 1, "Unsupported Command"); | ||
774 | return -1; | ||
775 | } | ||
776 | memset(&state->card_info, '\0', 8); | ||
777 | memcpy(&state->card_info, &state->rxbuffer, 8); | ||
778 | dprintk(verbose, DST_ERROR, 1, "Device Model=[%s]", &state->card_info[0]); | ||
779 | |||
780 | return 0; | ||
781 | } | ||
782 | |||
783 | static int dst_get_vendor(struct dst_state *state) | ||
784 | { | ||
785 | u8 get_vendor[] = { 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; | ||
786 | get_vendor[7] = dst_check_sum(get_vendor, 7); | ||
787 | if (dst_command(state, get_vendor, 8) < 0) { | ||
788 | dprintk(verbose, DST_INFO, 1, "Unsupported Command"); | ||
789 | return -1; | ||
790 | } | ||
791 | memset(&state->vendor, '\0', 8); | ||
792 | memcpy(&state->vendor, &state->rxbuffer, 8); | ||
793 | dprintk(verbose, DST_ERROR, 1, "Vendor=[%s]", &state->vendor[0]); | ||
794 | |||
795 | return 0; | ||
796 | } | ||
732 | 797 | ||
733 | static int dst_get_device_id(struct dst_state *state) | 798 | static int dst_get_device_id(struct dst_state *state) |
734 | { | 799 | { |
@@ -816,6 +881,24 @@ static int dst_probe(struct dst_state *state) | |||
816 | dprintk(verbose, DST_ERROR, 1, "unknown device."); | 881 | dprintk(verbose, DST_ERROR, 1, "unknown device."); |
817 | return -1; | 882 | return -1; |
818 | } | 883 | } |
884 | if (dst_get_mac(state) < 0) { | ||
885 | dprintk(verbose, DST_INFO, 1, "MAC: Unsupported command"); | ||
886 | return 0; | ||
887 | } | ||
888 | if (state->type_flags & DST_TYPE_HAS_FW_BUILD) { | ||
889 | if (dst_fw_ver(state) < 0) { | ||
890 | dprintk(verbose, DST_INFO, 1, "FW: Unsupported command"); | ||
891 | return 0; | ||
892 | } | ||
893 | if (dst_card_type(state) < 0) { | ||
894 | dprintk(verbose, DST_INFO, 1, "Card: Unsupported command"); | ||
895 | return 0; | ||
896 | } | ||
897 | if (dst_get_vendor(state) < 0) { | ||
898 | dprintk(verbose, DST_INFO, 1, "Vendor: Unsupported command"); | ||
899 | return 0; | ||
900 | } | ||
901 | } | ||
819 | 902 | ||
820 | return 0; | 903 | return 0; |
821 | } | 904 | } |
diff --git a/drivers/media/dvb/bt8xx/dst_common.h b/drivers/media/dvb/bt8xx/dst_common.h index c0ee0b197bb8..3281a6ca3685 100644 --- a/drivers/media/dvb/bt8xx/dst_common.h +++ b/drivers/media/dvb/bt8xx/dst_common.h | |||
@@ -113,6 +113,10 @@ struct dst_state { | |||
113 | fe_sec_mini_cmd_t minicmd; | 113 | fe_sec_mini_cmd_t minicmd; |
114 | fe_modulation_t modulation; | 114 | fe_modulation_t modulation; |
115 | u8 messages[256]; | 115 | u8 messages[256]; |
116 | u8 mac_address[8]; | ||
117 | u8 fw_version[8]; | ||
118 | u8 card_info[8]; | ||
119 | u8 vendor[8]; | ||
116 | }; | 120 | }; |
117 | 121 | ||
118 | struct dst_types { | 122 | struct dst_types { |