Esempio n. 1
0
static void update_pcm1796_volume(struct oxygen *chip)
{
    unsigned int i;

    for (i = 0; i < 4; ++i) {
        pcm1796_write(chip, i, 16, chip->dac_volume[i * 2]);
        pcm1796_write(chip, i, 17, chip->dac_volume[i * 2 + 1]);
    }
}
Esempio n. 2
0
static void update_pcm1796_volume(struct oxygen *chip)
{
    struct xonar_data *data = chip->model_data;
    unsigned int i;

    for (i = 0; i < data->dacs; ++i) {
        pcm1796_write(chip, i, 16, chip->dac_volume[i * 2]);
        pcm1796_write(chip, i, 17, chip->dac_volume[i * 2 + 1]);
    }
}
Esempio n. 3
0
static void pcm1796_init(struct oxygen *chip)
{
    struct xonar_data *data = chip->model_data;
    unsigned int i;

    for (i = 0; i < data->dacs; ++i) {
        pcm1796_write(chip, i, 19, PCM1796_FLT_SHARP | PCM1796_ATS_1);
        pcm1796_write(chip, i, 20, data->pcm1796_oversampling);
        pcm1796_write(chip, i, 21, 0);
    }
    update_pcm1796_mute(chip); /* set ATLD before ATL/ATR */
    update_pcm1796_volume(chip);
}
Esempio n. 4
0
static void pcm1796_write_cached(struct oxygen *chip, unsigned int codec,
				 u8 reg, u8 value)
{
	struct xonar_pcm179x *data = chip->model_data;

	if (value != data->pcm1796_regs[codec][reg - PCM1796_REG_BASE])
		pcm1796_write(chip, codec, reg, value);
}
Esempio n. 5
0
static void set_pcm1796_params(struct oxygen *chip,
                   struct snd_pcm_hw_params *params)
{
    unsigned int i;
    u8 value;

    value = params_rate(params) >= 96000 ? PCM1796_OS_32 : PCM1796_OS_64;
    for (i = 0; i < 4; ++i)
        pcm1796_write(chip, i, 20, value);
}
Esempio n. 6
0
static void set_pcm1796_params(struct oxygen *chip,
                               struct snd_pcm_hw_params *params)
{
    struct xonar_data *data = chip->model_data;
    unsigned int i;

    data->pcm1796_oversampling =
        params_rate(params) >= 96000 ? PCM1796_OS_32 : PCM1796_OS_64;
    for (i = 0; i < data->dacs; ++i)
        pcm1796_write(chip, i, 20, data->pcm1796_oversampling);
}
Esempio n. 7
0
static void update_pcm1796_mute(struct oxygen *chip)
{
    unsigned int i;
    u8 value;

    value = PCM1796_FMT_24_LJUST | PCM1796_ATLD;
    if (chip->dac_mute)
        value |= PCM1796_MUTE;
    for (i = 0; i < 4; ++i)
        pcm1796_write(chip, i, 18, value);
}
Esempio n. 8
0
static void update_pcm1796_mute(struct oxygen *chip)
{
    struct xonar_data *data = chip->model_data;
    unsigned int i;
    u8 value;

    value = PCM1796_DMF_DISABLED | PCM1796_FMT_24_LJUST | PCM1796_ATLD;
    if (chip->dac_mute)
        value |= PCM1796_MUTE;
    for (i = 0; i < data->dacs; ++i)
        pcm1796_write(chip, i, 18, value);
}
Esempio n. 9
0
static void xonar_d2_init(struct oxygen *chip)
{
    struct xonar_data *data = chip->model_data;
    unsigned int i;

    data->anti_pop_delay = 300;
    data->output_enable_bit = GPIO_D2_OUTPUT_ENABLE;

    for (i = 0; i < 4; ++i) {
        pcm1796_write(chip, i, 18, PCM1796_MUTE | PCM1796_DMF_DISABLED |
                  PCM1796_FMT_24_LJUST | PCM1796_ATLD);
        pcm1796_write(chip, i, 19, PCM1796_FLT_SHARP | PCM1796_ATS_1);
        pcm1796_write(chip, i, 20, PCM1796_OS_64);
        pcm1796_write(chip, i, 21, 0);
        pcm1796_write(chip, i, 16, 0x0f); /* set ATL/ATR after ATLD */
        pcm1796_write(chip, i, 17, 0x0f);
    }

    oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, GPIO_D2_ALT);
    oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, GPIO_D2_ALT);

    xonar_common_init(chip);

    snd_component_add(chip->card, "PCM1796");
    snd_component_add(chip->card, "CS5381");
}
Esempio n. 10
0
static int rolloff_put(struct snd_kcontrol *ctl,
		       struct snd_ctl_elem_value *value)
{
	struct oxygen *chip = ctl->private_data;
	struct xonar_pcm179x *data = chip->model_data;
	unsigned int i;
	int changed;
	u8 reg;

	mutex_lock(&chip->mutex);
	reg = data->pcm1796_regs[0][19 - PCM1796_REG_BASE];
	reg &= ~PCM1796_FLT_MASK;
	if (!value->value.enumerated.item[0])
		reg |= PCM1796_FLT_SHARP;
	else
		reg |= PCM1796_FLT_SLOW;
	changed = reg != data->pcm1796_regs[0][19 - PCM1796_REG_BASE];
	if (changed) {
		for (i = 0; i < data->dacs; ++i)
			pcm1796_write(chip, i, 19, reg);
	}
	mutex_unlock(&chip->mutex);
	return changed;
}
Esempio n. 11
0
static void pcm1796_registers_init(struct oxygen *chip)
{
	struct xonar_pcm179x *data = chip->model_data;
	unsigned int i;
	s8 gain_offset;

	gain_offset = data->hp_active ? data->hp_gain_offset : 0;
	for (i = 0; i < data->dacs; ++i) {
		/* set ATLD before ATL/ATR */
		pcm1796_write(chip, i, 18,
			      data->pcm1796_regs[0][18 - PCM1796_REG_BASE]);
		pcm1796_write(chip, i, 16, chip->dac_volume[i * 2]
			      + gain_offset);
		pcm1796_write(chip, i, 17, chip->dac_volume[i * 2 + 1]
			      + gain_offset);
		pcm1796_write(chip, i, 19,
			      data->pcm1796_regs[0][19 - PCM1796_REG_BASE]);
		pcm1796_write(chip, i, 20,
			      data->pcm1796_regs[0][20 - PCM1796_REG_BASE]);
		pcm1796_write(chip, i, 21, 0);
	}
}