static int tda18271_set_analog_params(struct dvb_frontend *fe, struct analog_parameters *params) { struct tda18271_priv *priv = fe->tuner_priv; struct tda18271_std_map *std_map = &priv->std; struct tda18271_std_map_item *map; char *mode; int ret; u32 freq = params->frequency * 125 * ((params->mode == V4L2_TUNER_RADIO) ? 1 : 1000) / 2; priv->mode = TDA18271_ANALOG; if (params->mode == V4L2_TUNER_RADIO) { map = &std_map->fm_radio; mode = "fm"; } else if (params->std & V4L2_STD_MN) { map = &std_map->atv_mn; mode = "MN"; } else if (params->std & V4L2_STD_B) { map = &std_map->atv_b; mode = "B"; } else if (params->std & V4L2_STD_GH) { map = &std_map->atv_gh; mode = "GH"; } else if (params->std & V4L2_STD_PAL_I) { map = &std_map->atv_i; mode = "I"; } else if (params->std & V4L2_STD_DK) { map = &std_map->atv_dk; mode = "DK"; } else if (params->std & V4L2_STD_SECAM_L) { map = &std_map->atv_l; mode = "L"; } else if (params->std & V4L2_STD_SECAM_LC) { map = &std_map->atv_lc; mode = "L'"; } else { map = &std_map->atv_i; mode = "xx"; } tda_dbg("setting tda18271 to system %s\n", mode); ret = tda18271_tune(fe, map, freq, 0); if (tda_fail(ret)) goto fail; priv->if_freq = map->if_freq; priv->frequency = freq; priv->bandwidth = 0; fail: return ret; }
static int tda18271_set_params(struct dvb_frontend *fe) { struct dtv_frontend_properties *c = &fe->dtv_property_cache; u32 delsys = c->delivery_system; u32 bw = c->bandwidth_hz; u32 freq = c->frequency; struct tda18271_priv *priv = fe->tuner_priv; struct tda18271_std_map *std_map = &priv->std; struct tda18271_std_map_item *map; int ret; priv->mode = TDA18271_DIGITAL; switch (delsys) { case SYS_ATSC: map = &std_map->atsc_6; bw = 6000000; break; case SYS_ISDBT: case SYS_DVBT: case SYS_DVBT2: if (bw <= 6000000) { map = &std_map->dvbt_6; } else if (bw <= 7000000) { map = &std_map->dvbt_7; } else { map = &std_map->dvbt_8; } break; case SYS_DVBC_ANNEX_B: bw = 6000000; /* falltrough */ case SYS_DVBC_ANNEX_A: case SYS_DVBC_ANNEX_C: if (bw <= 6000000) { map = &std_map->qam_6; } else if (bw <= 7000000) { map = &std_map->qam_7; } else { map = &std_map->qam_8; } break; default: tda_warn("modulation type not supported!\n"); return -EINVAL; } /* When tuning digital, the analog demod must be tri-stated */ if (fe->ops.analog_ops.standby) fe->ops.analog_ops.standby(fe); ret = tda18271_tune(fe, map, freq, bw); if (tda_fail(ret)) goto fail; priv->if_freq = map->if_freq; priv->frequency = freq; priv->bandwidth = bw; fail: return ret; }
static int tda18271_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params) { struct tda18271_priv *priv = fe->tuner_priv; struct tda18271_std_map *std_map = &priv->std; struct tda18271_std_map_item *map; int ret; u32 bw, freq = params->frequency; priv->mode = TDA18271_DIGITAL; if (fe->ops.info.type == FE_ATSC) { switch (params->u.vsb.modulation) { case VSB_8: case VSB_16: map = &std_map->atsc_6; break; case QAM_64: case QAM_256: map = &std_map->qam_6; break; default: tda_warn("modulation not set!\n"); return -EINVAL; } #if 0 /* keep */ /* userspace request is already center adjusted */ freq += 1750000; /* Adjust to center (+1.75MHZ) */ #endif bw = 6000000; } else if (fe->ops.info.type == FE_OFDM) { switch (params->u.ofdm.bandwidth) { case BANDWIDTH_6_MHZ: bw = 6000000; map = &std_map->dvbt_6; break; case BANDWIDTH_7_MHZ: bw = 7000000; map = &std_map->dvbt_7; break; case BANDWIDTH_8_MHZ: bw = 8000000; map = &std_map->dvbt_8; break; default: tda_warn("bandwidth not set!\n"); return -EINVAL; } } else { tda_warn("modulation type not supported!\n"); return -EINVAL; } /* When tuning digital, the analog demod must be tri-stated */ if (fe->ops.analog_ops.standby) fe->ops.analog_ops.standby(fe); ret = tda18271_tune(fe, map, freq, bw); if (tda_fail(ret)) goto fail; priv->frequency = freq; priv->bandwidth = (fe->ops.info.type == FE_OFDM) ? params->u.ofdm.bandwidth : 0; fail: return ret; }