summaryrefslogtreecommitdiff
path: root/drivers/media/usb/as102/as102_fe.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/usb/as102/as102_fe.c')
-rw-r--r--drivers/media/usb/as102/as102_fe.c117
1 files changed, 55 insertions, 62 deletions
diff --git a/drivers/media/usb/as102/as102_fe.c b/drivers/media/usb/as102/as102_fe.c
index 7ec1c67ba119..975ad638ee41 100644
--- a/drivers/media/usb/as102/as102_fe.c
+++ b/drivers/media/usb/as102/as102_fe.c
@@ -156,144 +156,137 @@ static uint8_t as102_fe_get_code_rate(fe_code_rate_t arg)
return c;
}
-static void as102_fe_copy_tune_parameters(struct as10x_tune_args *tune_args,
- struct dtv_frontend_properties *params)
+static int as102_fe_set_frontend(struct dvb_frontend *fe)
{
+ struct as102_state *state = fe->demodulator_priv;
+ struct dtv_frontend_properties *c = &fe->dtv_property_cache;
+ int ret = 0;
+ struct as10x_tune_args tune_args = { 0 };
/* set frequency */
- tune_args->freq = params->frequency / 1000;
+ tune_args.freq = c->frequency / 1000;
/* fix interleaving_mode */
- tune_args->interleaving_mode = INTLV_NATIVE;
+ tune_args.interleaving_mode = INTLV_NATIVE;
- switch (params->bandwidth_hz) {
+ switch (c->bandwidth_hz) {
case 8000000:
- tune_args->bandwidth = BW_8_MHZ;
+ tune_args.bandwidth = BW_8_MHZ;
break;
case 7000000:
- tune_args->bandwidth = BW_7_MHZ;
+ tune_args.bandwidth = BW_7_MHZ;
break;
case 6000000:
- tune_args->bandwidth = BW_6_MHZ;
+ tune_args.bandwidth = BW_6_MHZ;
break;
default:
- tune_args->bandwidth = BW_8_MHZ;
+ tune_args.bandwidth = BW_8_MHZ;
}
- switch (params->guard_interval) {
+ switch (c->guard_interval) {
case GUARD_INTERVAL_1_32:
- tune_args->guard_interval = GUARD_INT_1_32;
+ tune_args.guard_interval = GUARD_INT_1_32;
break;
case GUARD_INTERVAL_1_16:
- tune_args->guard_interval = GUARD_INT_1_16;
+ tune_args.guard_interval = GUARD_INT_1_16;
break;
case GUARD_INTERVAL_1_8:
- tune_args->guard_interval = GUARD_INT_1_8;
+ tune_args.guard_interval = GUARD_INT_1_8;
break;
case GUARD_INTERVAL_1_4:
- tune_args->guard_interval = GUARD_INT_1_4;
+ tune_args.guard_interval = GUARD_INT_1_4;
break;
case GUARD_INTERVAL_AUTO:
default:
- tune_args->guard_interval = GUARD_UNKNOWN;
+ tune_args.guard_interval = GUARD_UNKNOWN;
break;
}
- switch (params->modulation) {
+ switch (c->modulation) {
case QPSK:
- tune_args->modulation = CONST_QPSK;
+ tune_args.modulation = CONST_QPSK;
break;
case QAM_16:
- tune_args->modulation = CONST_QAM16;
+ tune_args.modulation = CONST_QAM16;
break;
case QAM_64:
- tune_args->modulation = CONST_QAM64;
+ tune_args.modulation = CONST_QAM64;
break;
default:
- tune_args->modulation = CONST_UNKNOWN;
+ tune_args.modulation = CONST_UNKNOWN;
break;
}
- switch (params->transmission_mode) {
+ switch (c->transmission_mode) {
case TRANSMISSION_MODE_2K:
- tune_args->transmission_mode = TRANS_MODE_2K;
+ tune_args.transmission_mode = TRANS_MODE_2K;
break;
case TRANSMISSION_MODE_8K:
- tune_args->transmission_mode = TRANS_MODE_8K;
+ tune_args.transmission_mode = TRANS_MODE_8K;
break;
default:
- tune_args->transmission_mode = TRANS_MODE_UNKNOWN;
+ tune_args.transmission_mode = TRANS_MODE_UNKNOWN;
}
- switch (params->hierarchy) {
+ switch (c->hierarchy) {
case HIERARCHY_NONE:
- tune_args->hierarchy = HIER_NONE;
+ tune_args.hierarchy = HIER_NONE;
break;
case HIERARCHY_1:
- tune_args->hierarchy = HIER_ALPHA_1;
+ tune_args.hierarchy = HIER_ALPHA_1;
break;
case HIERARCHY_2:
- tune_args->hierarchy = HIER_ALPHA_2;
+ tune_args.hierarchy = HIER_ALPHA_2;
break;
case HIERARCHY_4:
- tune_args->hierarchy = HIER_ALPHA_4;
+ tune_args.hierarchy = HIER_ALPHA_4;
break;
case HIERARCHY_AUTO:
- tune_args->hierarchy = HIER_UNKNOWN;
+ tune_args.hierarchy = HIER_UNKNOWN;
break;
}
pr_debug("as102: tuner parameters: freq: %d bw: 0x%02x gi: 0x%02x\n",
- params->frequency,
- tune_args->bandwidth,
- tune_args->guard_interval);
+ c->frequency,
+ tune_args.bandwidth,
+ tune_args.guard_interval);
/*
* Detect a hierarchy selection
* if HP/LP are both set to FEC_NONE, HP will be selected.
*/
- if ((tune_args->hierarchy != HIER_NONE) &&
- ((params->code_rate_LP == FEC_NONE) ||
- (params->code_rate_HP == FEC_NONE))) {
-
- if (params->code_rate_LP == FEC_NONE) {
- tune_args->hier_select = HIER_HIGH_PRIORITY;
- tune_args->code_rate =
- as102_fe_get_code_rate(params->code_rate_HP);
+ if ((tune_args.hierarchy != HIER_NONE) &&
+ ((c->code_rate_LP == FEC_NONE) ||
+ (c->code_rate_HP == FEC_NONE))) {
+
+ if (c->code_rate_LP == FEC_NONE) {
+ tune_args.hier_select = HIER_HIGH_PRIORITY;
+ tune_args.code_rate =
+ as102_fe_get_code_rate(c->code_rate_HP);
}
- if (params->code_rate_HP == FEC_NONE) {
- tune_args->hier_select = HIER_LOW_PRIORITY;
- tune_args->code_rate =
- as102_fe_get_code_rate(params->code_rate_LP);
+ if (c->code_rate_HP == FEC_NONE) {
+ tune_args.hier_select = HIER_LOW_PRIORITY;
+ tune_args.code_rate =
+ as102_fe_get_code_rate(c->code_rate_LP);
}
pr_debug("as102: \thierarchy: 0x%02x selected: %s code_rate_%s: 0x%02x\n",
- tune_args->hierarchy,
- tune_args->hier_select == HIER_HIGH_PRIORITY ?
+ tune_args.hierarchy,
+ tune_args.hier_select == HIER_HIGH_PRIORITY ?
"HP" : "LP",
- tune_args->hier_select == HIER_HIGH_PRIORITY ?
+ tune_args.hier_select == HIER_HIGH_PRIORITY ?
"HP" : "LP",
- tune_args->code_rate);
+ tune_args.code_rate);
} else {
- tune_args->code_rate =
- as102_fe_get_code_rate(params->code_rate_HP);
+ tune_args.code_rate =
+ as102_fe_get_code_rate(c->code_rate_HP);
}
-}
-
-static int as102_fe_set_frontend(struct dvb_frontend *fe)
-{
- struct as102_state *state = fe->demodulator_priv;
- struct dtv_frontend_properties *p = &fe->dtv_property_cache;
- int ret = 0;
- struct as10x_tune_args tune_args = { 0 };
+ /* Set frontend arguments */
if (mutex_lock_interruptible(&state->bus_adap->lock))
return -EBUSY;
- as102_fe_copy_tune_parameters(&tune_args, p);
-
- /* send abilis command: SET_TUNE */
ret = as10x_cmd_set_tune(state->bus_adap, &tune_args);
if (ret != 0)
dev_dbg(&state->bus_adap->usb_dev->dev,