Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}