Esempio n. 1
0
int dib7000p_enable_vbg_voltage(struct dibFrontend *fe)
{
    struct dib7000p_state *state = fe->demod_priv;
    dbgpl(&dib7000p_dbg, "enabling VBG voltage in the ADC");
    /* P_dual_adc_cfg0 */
    dib7000p_write_word(state, 908, (state->cfg.enable_current_mirror & 1) << 7);
    /* P_dual_adc_cfg1 = 3, P_sar_adc_cfg = 2 */
    dib7000p_write_word(state, 909, ((state->cfg.disable_sample_and_hold & 1) << 4) | (3 << 2) | (2 << 0));
    return 0;
}
//static int dib7000p_cfg_gpio(struct dib7000p_state *st, uint8_t num, uint8_t dir, uint8_t val)
int dib7000p_cfg_gpio(struct dib7000p_state *st, uint8_t num, uint8_t dir, uint8_t val)
{
	st->gpio_dir = dib7000p_read_word(st, 1029);
	st->gpio_dir &= ~(1 << num);         /* reset the direction bit */
	st->gpio_dir |=  (dir & 0x1) << num; /* set the new direction */
	dib7000p_write_word(st, 1029, st->gpio_dir);

	st->gpio_val = dib7000p_read_word(st, 1030);
	st->gpio_val &= ~(1 << num);          /* reset the direction bit */
	st->gpio_val |=  (val & 0x01) << num; /* set the new value */
	dib7000p_write_word(st, 1030, st->gpio_val);

	return DIB_RETURN_SUCCESS;
}
Esempio n. 3
0
int dib7000p_reset_gpio(struct dib7000p_state *st)
{
    /* reset the GPIOs */
    dbgpl(&dib7000p_dbg, "gpio dir: %x: val: %x, pwm_pos: %x",st->gpio_dir, st->gpio_val,st->cfg.gpio_pwm_pos);

    dib7000p_write_word(st, 1029, st->gpio_dir);
    dib7000p_write_word(st, 1030, st->gpio_val);

    /* TODO 1031 is P_gpio_od */

    dib7000p_write_word(st, 1032, st->cfg.gpio_pwm_pos);

    dib7000p_write_word(st, 1037, st->cfg.pwm_freq_div);
    return DIB_RETURN_SUCCESS;
}
Esempio n. 4
0
int dib7000p_set_power_mode(struct dib7000p_state *state, enum dib7000p_power_mode mode)
{
    /* by default everything is powered off */
    uint16_t reg_774 = 0x3fff, reg_775 = 0xffff, reg_776 = 0x0007, reg_899  = 0x0003,
        //reg_1280 = (0xfe00) | (dib7000p_read_word(state, 1280) & 0x01ff);
        reg_1280, read_reg_1280;

    read_reg_1280 = dib7000p_read_word(state, 1280);
    read_reg_1280 = read_reg_1280 & 0x01ff;
    reg_1280      = 0xfe00 | read_reg_1280;


    /* now, depending on the requested mode, we power on */
    switch (mode) {
        /* power up everything in the demod */
        case DIB7000P_POWER_ALL:
            reg_774 = 0x0000; reg_775 = 0x0000; reg_776 = 0x0; reg_899 = 0x0; reg_1280 &= 0x01ff;
            break;

        case DIB7000P_POWER_ANALOG_ADC:
            /* dem, cfg, iqc, sad, agc */
            reg_774 &= ~((1 << 15) | (1 << 14) | (1 << 11) | (1 << 10) | (1 << 9));
            /* nud */
            reg_776 &= ~((1 << 0));
            /* Dout */
            reg_1280 &= ~((1 << 11));
            /* fall through wanted to enable the interfaces */

        /* just leave power on the control-interfaces: GPIO and (I2C or SDIO) */
        case DIB7000P_POWER_INTERFACE_ONLY: /* TODO power up either SDIO or I2C */
            reg_1280 &= ~((1 << 14) | (1 << 13) | (1 << 12) | (1 << 10));
            break;

/* TODO following stuff is just converted from the dib7000-driver - check when is used what */
#if 0
        case DIB7000_POWER_LEVEL_INTERF_ANALOG_AGC:
            /* dem, cfg, iqc, sad, agc */
            reg_774  &= ~((1 << 15) | (1 << 14) | (1 << 11) | (1 << 10) | (1 << 9));
            /* sdio, i2c, gpio */
            reg_1280 &= ~((1 << 13) | (1 << 12) | (1 << 10));
            break;
        case DIB7000_POWER_LEVEL_DOWN_COR4_DINTLV_ICIRM_EQUAL_CFROD:
            reg_774   = 0;
            /* power down: cor4 dintlv equal */
            reg_775   = (1 << 15) | (1 << 6) | (1 << 5);
            reg_776   = 0;
            reg_899   = 0;
            reg_1280 &= 0x01ff;
            break;
        case DIB7000_POWER_LEVEL_DOWN_COR4_CRY_ESRAM_MOUT_NUD:
            reg_774   = 0;
            /* power down: cor4 */
            reg_775   = (1 << 15);
            /* nud */
            reg_776   = (1 <<  0);
            reg_899   = 0;
            reg_1280 &= 0x01ff;
            break;
#endif
    }

    dib7000p_write_word(state,  774,  reg_774);
    dib7000p_write_word(state,  775,  reg_775);
    dib7000p_write_word(state,  776,  reg_776);
    dib7000p_write_word(state,  899,  reg_899);
    dib7000p_write_word(state, 1280, reg_1280);

    return DIB_RETURN_SUCCESS;
}