提交 29b2f784 编写于 作者: M Manu Abraham 提交者: Linus Torvalds

[PATCH] dvb: dst: Correcty Identify Tuner and Daughterboards

- Identify Tuner, Daughterboards correctly
- Added partial support for
  VP-10320A (DVB-S), VP-20210 (DVB-C), VP-3040 (DVB-T)
Signed-off-by: NManu Abraham <manu@linuxtv.org>
Signed-off-by: NMichael Krufky <mkrufky@linuxtv.org>
Cc: Johannes Stezenbach <js@linuxtv.org>
Signed-off-by: NAndrew Morton <akpm@osdl.org>
Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
上级 b05a581d
......@@ -690,8 +690,8 @@ struct dst_types dst_tlist[] = {
.device_id = "DTT-CI",
.offset = 1,
.dst_type = DST_TYPE_IS_TERR,
.type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_FW_2,
.dst_feature = 0
.type_flags = DST_TYPE_HAS_TS204 | DST_TYPE_HAS_NEWTUNE | DST_TYPE_HAS_FW_2 | DST_TYPE_HAS_MULTI_FE,
.dst_feature = DST_TYPE_HAS_CA
},
{
......@@ -796,6 +796,56 @@ static int dst_get_vendor(struct dst_state *state)
return 0;
}
static int dst_get_tuner_info(struct dst_state *state)
{
u8 get_tuner_1[] = { 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
u8 get_tuner_2[] = { 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
get_tuner_1[7] = dst_check_sum(get_tuner_1, 7);
get_tuner_2[7] = dst_check_sum(get_tuner_2, 7);
if (state->type_flags & DST_TYPE_HAS_MULTI_FE) {
if (dst_command(state, get_tuner_2, 8) < 0) {
dprintk(verbose, DST_INFO, 1, "Unsupported Command");
return -1;
}
} else {
if (dst_command(state, get_tuner_1, 8) < 0) {
dprintk(verbose, DST_INFO, 1, "Unsupported Command");
return -1;
}
}
memset(&state->board_info, '\0', 8);
memcpy(&state->board_info, &state->rxbuffer, 8);
if (state->type_flags & DST_TYPE_HAS_MULTI_FE) {
if (state->board_info[1] == 0x0b) {
if (state->type_flags & DST_TYPE_HAS_TS204)
state->type_flags &= ~DST_TYPE_HAS_TS204;
state->type_flags |= DST_TYPE_HAS_NEWTUNE;
dprintk(verbose, DST_INFO, 1, "DST type has TS=188");
} else {
if (state->type_flags & DST_TYPE_HAS_NEWTUNE)
state->type_flags &= ~DST_TYPE_HAS_NEWTUNE;
state->type_flags |= DST_TYPE_HAS_TS204;
dprintk(verbose, DST_INFO, 1, "DST type has TS=204");
}
} else {
if (state->board_info[0] == 0xbc) {
if (state->type_flags & DST_TYPE_HAS_TS204)
state->type_flags &= ~DST_TYPE_HAS_TS204;
state->type_flags |= DST_TYPE_HAS_NEWTUNE;
dprintk(verbose, DST_INFO, 1, "DST type has TS=188, Daughterboard=[%d]", state->board_info[1]);
} else if (state->board_info[0] == 0xcc) {
if (state->type_flags & DST_TYPE_HAS_NEWTUNE)
state->type_flags &= ~DST_TYPE_HAS_NEWTUNE;
state->type_flags |= DST_TYPE_HAS_TS204;
dprintk(verbose, DST_INFO, 1, "DST type has TS=204 Daughterboard=[%d]", state->board_info[1]);
}
}
return 0;
}
static int dst_get_device_id(struct dst_state *state)
{
u8 reply;
......@@ -886,6 +936,10 @@ static int dst_probe(struct dst_state *state)
dprintk(verbose, DST_INFO, 1, "MAC: Unsupported command");
return 0;
}
if ((state->type_flags & DST_TYPE_HAS_MULTI_FE) || (state->type_flags & DST_TYPE_HAS_FW_BUILD)) {
if (dst_get_tuner_info(state) < 0)
dprintk(verbose, DST_INFO, 1, "Tuner: Unsupported command");
}
if (state->type_flags & DST_TYPE_HAS_FW_BUILD) {
if (dst_fw_ver(state) < 0) {
dprintk(verbose, DST_INFO, 1, "FW: Unsupported command");
......
......@@ -49,6 +49,7 @@
#define DST_TYPE_HAS_FW_BUILD 64
#define DST_TYPE_HAS_OBS_REGS 128
#define DST_TYPE_HAS_INC_COUNT 256
#define DST_TYPE_HAS_MULTI_FE 512
/* Card capability list */
......@@ -117,6 +118,7 @@ struct dst_state {
u8 fw_version[8];
u8 card_info[8];
u8 vendor[8];
u8 board_info[8];
};
struct dst_types {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册