|
@@ -216,32 +216,50 @@ static void set_cs4245_dac_params(struct oxygen *chip,
|
|
struct snd_pcm_hw_params *params)
|
|
struct snd_pcm_hw_params *params)
|
|
{
|
|
{
|
|
struct dg *data = chip->model_data;
|
|
struct dg *data = chip->model_data;
|
|
- u8 value;
|
|
|
|
-
|
|
|
|
- value = data->cs4245_shadow[CS4245_DAC_CTRL_1] & ~CS4245_DAC_FM_MASK;
|
|
|
|
- if (params_rate(params) <= 50000)
|
|
|
|
- value |= CS4245_DAC_FM_SINGLE;
|
|
|
|
- else if (params_rate(params) <= 100000)
|
|
|
|
- value |= CS4245_DAC_FM_DOUBLE;
|
|
|
|
- else
|
|
|
|
- value |= CS4245_DAC_FM_QUAD;
|
|
|
|
- cs4245_write_cached(chip, CS4245_DAC_CTRL_1, value);
|
|
|
|
|
|
+ unsigned char dac_ctrl;
|
|
|
|
+ unsigned char mclk_freq;
|
|
|
|
+
|
|
|
|
+ dac_ctrl = data->cs4245_shadow[CS4245_DAC_CTRL_1] & ~CS4245_DAC_FM_MASK;
|
|
|
|
+ mclk_freq = data->cs4245_shadow[CS4245_MCLK_FREQ] & ~CS4245_MCLK1_MASK;
|
|
|
|
+ if (params_rate(params) <= 50000) {
|
|
|
|
+ dac_ctrl |= CS4245_DAC_FM_SINGLE;
|
|
|
|
+ mclk_freq |= CS4245_MCLK_1 << CS4245_MCLK1_SHIFT;
|
|
|
|
+ } else if (params_rate(params) <= 100000) {
|
|
|
|
+ dac_ctrl |= CS4245_DAC_FM_DOUBLE;
|
|
|
|
+ mclk_freq |= CS4245_MCLK_1 << CS4245_MCLK1_SHIFT;
|
|
|
|
+ } else {
|
|
|
|
+ dac_ctrl |= CS4245_DAC_FM_QUAD;
|
|
|
|
+ mclk_freq |= CS4245_MCLK_2 << CS4245_MCLK1_SHIFT;
|
|
|
|
+ }
|
|
|
|
+ data->cs4245_shadow[CS4245_DAC_CTRL_1] = dac_ctrl;
|
|
|
|
+ data->cs4245_shadow[CS4245_MCLK_FREQ] = mclk_freq;
|
|
|
|
+ cs4245_write_spi(chip, CS4245_DAC_CTRL_1);
|
|
|
|
+ cs4245_write_spi(chip, CS4245_MCLK_FREQ);
|
|
}
|
|
}
|
|
|
|
|
|
static void set_cs4245_adc_params(struct oxygen *chip,
|
|
static void set_cs4245_adc_params(struct oxygen *chip,
|
|
struct snd_pcm_hw_params *params)
|
|
struct snd_pcm_hw_params *params)
|
|
{
|
|
{
|
|
struct dg *data = chip->model_data;
|
|
struct dg *data = chip->model_data;
|
|
- u8 value;
|
|
|
|
-
|
|
|
|
- value = data->cs4245_shadow[CS4245_ADC_CTRL] & ~CS4245_ADC_FM_MASK;
|
|
|
|
- if (params_rate(params) <= 50000)
|
|
|
|
- value |= CS4245_ADC_FM_SINGLE;
|
|
|
|
- else if (params_rate(params) <= 100000)
|
|
|
|
- value |= CS4245_ADC_FM_DOUBLE;
|
|
|
|
- else
|
|
|
|
- value |= CS4245_ADC_FM_QUAD;
|
|
|
|
- cs4245_write_cached(chip, CS4245_ADC_CTRL, value);
|
|
|
|
|
|
+ unsigned char adc_ctrl;
|
|
|
|
+ unsigned char mclk_freq;
|
|
|
|
+
|
|
|
|
+ adc_ctrl = data->cs4245_shadow[CS4245_ADC_CTRL] & ~CS4245_ADC_FM_MASK;
|
|
|
|
+ mclk_freq = data->cs4245_shadow[CS4245_MCLK_FREQ] & ~CS4245_MCLK2_MASK;
|
|
|
|
+ if (params_rate(params) <= 50000) {
|
|
|
|
+ adc_ctrl |= CS4245_ADC_FM_SINGLE;
|
|
|
|
+ mclk_freq |= CS4245_MCLK_1 << CS4245_MCLK2_SHIFT;
|
|
|
|
+ } else if (params_rate(params) <= 100000) {
|
|
|
|
+ adc_ctrl |= CS4245_ADC_FM_DOUBLE;
|
|
|
|
+ mclk_freq |= CS4245_MCLK_1 << CS4245_MCLK2_SHIFT;
|
|
|
|
+ } else {
|
|
|
|
+ adc_ctrl |= CS4245_ADC_FM_QUAD;
|
|
|
|
+ mclk_freq |= CS4245_MCLK_2 << CS4245_MCLK2_SHIFT;
|
|
|
|
+ }
|
|
|
|
+ data->cs4245_shadow[CS4245_ADC_CTRL] = adc_ctrl;
|
|
|
|
+ data->cs4245_shadow[CS4245_MCLK_FREQ] = mclk_freq;
|
|
|
|
+ cs4245_write_spi(chip, CS4245_ADC_CTRL);
|
|
|
|
+ cs4245_write_spi(chip, CS4245_MCLK_FREQ);
|
|
}
|
|
}
|
|
|
|
|
|
static inline unsigned int shift_bits(unsigned int value,
|
|
static inline unsigned int shift_bits(unsigned int value,
|