V4L/DVB (10746): sms1xxx: enable rf switch on Hauppauge Tiger devices
Signed-off-by: Michael Krufky <mkrufky@linuxtv.org> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
b72857dd45
commit
d54093afb1
@ -117,6 +117,7 @@ static struct sms_board sms_boards[] = {
|
||||
.type = SMS_NOVA_B0,
|
||||
.fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw",
|
||||
.lna_ctrl = 29,
|
||||
.rf_switch = 17,
|
||||
},
|
||||
[SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2] = {
|
||||
.name = "Hauppauge WinTV MiniCard",
|
||||
@ -199,8 +200,8 @@ int sms_board_power(struct smscore_device_t *coredev, int onoff)
|
||||
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2:
|
||||
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD:
|
||||
/* LNA */
|
||||
sms_set_gpio(coredev,
|
||||
board->lna_ctrl, onoff ? 1 : 0);
|
||||
if (!onoff)
|
||||
sms_set_gpio(coredev, board->lna_ctrl, 0);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
@ -227,3 +228,21 @@ int sms_board_led_feedback(struct smscore_device_t *coredev, int led)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sms_board_lna_control(struct smscore_device_t *coredev, int onoff)
|
||||
{
|
||||
int board_id = smscore_get_board_id(coredev);
|
||||
struct sms_board *board = sms_get_board(board_id);
|
||||
|
||||
sms_debug("%s: LNA %s", __func__, onoff ? "enabled" : "disabled");
|
||||
|
||||
switch (board_id) {
|
||||
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2:
|
||||
case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD:
|
||||
sms_set_gpio(coredev,
|
||||
board->rf_switch, onoff ? 1 : 0);
|
||||
return sms_set_gpio(coredev,
|
||||
board->lna_ctrl, onoff ? 1 : 0);
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@ struct sms_board {
|
||||
char *name, *fw[DEVICE_MODE_MAX];
|
||||
|
||||
/* gpios */
|
||||
int led_power, led_hi, led_lo, lna_ctrl;
|
||||
int led_power, led_hi, led_lo, lna_ctrl, rf_switch;
|
||||
};
|
||||
|
||||
struct sms_board *sms_get_board(int id);
|
||||
@ -52,6 +52,7 @@ int sms_board_setup(struct smscore_device_t *coredev);
|
||||
#define SMS_LED_HI 2
|
||||
int sms_board_led_feedback(struct smscore_device_t *coredev, int led);
|
||||
int sms_board_power(struct smscore_device_t *coredev, int onoff);
|
||||
int sms_board_lna_control(struct smscore_device_t *coredev, int onoff);
|
||||
|
||||
extern struct usb_device_id smsusb_id_table[];
|
||||
|
||||
|
@ -262,6 +262,7 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe,
|
||||
struct SmsMsgHdr_ST Msg;
|
||||
u32 Data[3];
|
||||
} Msg;
|
||||
int ret;
|
||||
|
||||
Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
|
||||
Msg.Msg.msgDstId = HIF_TASK;
|
||||
@ -282,6 +283,24 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe,
|
||||
default: return -EINVAL;
|
||||
}
|
||||
|
||||
/* Disable LNA, if any. An error is returned if no LNA is present */
|
||||
ret = sms_board_lna_control(client->coredev, 0);
|
||||
if (ret == 0) {
|
||||
fe_status_t status;
|
||||
|
||||
/* tune with LNA off at first */
|
||||
ret = smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
|
||||
&client->tune_done);
|
||||
|
||||
smsdvb_read_status(fe, &status);
|
||||
|
||||
if (status & FE_HAS_LOCK)
|
||||
return ret;
|
||||
|
||||
/* previous tune didnt lock - enable LNA and tune again */
|
||||
sms_board_lna_control(client->coredev, 1);
|
||||
}
|
||||
|
||||
return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
|
||||
&client->tune_done);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user