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]); } }
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]); } }
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); }
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); }
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); }
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); }
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); }
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); }
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"); }
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; }
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); } }