diff options
Diffstat (limited to 'sound/pci/oxygen/virtuoso.c')
-rw-r--r-- | sound/pci/oxygen/virtuoso.c | 54 |
1 files changed, 34 insertions, 20 deletions
diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c index bd9e28583518..e95dc5717ed7 100644 --- a/sound/pci/oxygen/virtuoso.c +++ b/sound/pci/oxygen/virtuoso.c | |||
@@ -204,15 +204,11 @@ static void update_pcm1796_mute(struct oxygen *chip) | |||
204 | pcm1796_write(chip, i, 18, value); | 204 | pcm1796_write(chip, i, 18, value); |
205 | } | 205 | } |
206 | 206 | ||
207 | static void xonar_d2_init(struct oxygen *chip) | 207 | static void pcm1796_init(struct oxygen *chip) |
208 | { | 208 | { |
209 | struct xonar_data *data = chip->model_data; | 209 | struct xonar_data *data = chip->model_data; |
210 | unsigned int i; | 210 | unsigned int i; |
211 | 211 | ||
212 | data->anti_pop_delay = 300; | ||
213 | data->output_enable_bit = GPIO_D2_OUTPUT_ENABLE; | ||
214 | data->pcm1796_oversampling = PCM1796_OS_64; | ||
215 | |||
216 | for (i = 0; i < 4; ++i) { | 212 | for (i = 0; i < 4; ++i) { |
217 | pcm1796_write(chip, i, 19, PCM1796_FLT_SHARP | PCM1796_ATS_1); | 213 | pcm1796_write(chip, i, 19, PCM1796_FLT_SHARP | PCM1796_ATS_1); |
218 | pcm1796_write(chip, i, 20, data->pcm1796_oversampling); | 214 | pcm1796_write(chip, i, 20, data->pcm1796_oversampling); |
@@ -220,6 +216,17 @@ static void xonar_d2_init(struct oxygen *chip) | |||
220 | } | 216 | } |
221 | update_pcm1796_mute(chip); /* set ATLD before ATL/ATR */ | 217 | update_pcm1796_mute(chip); /* set ATLD before ATL/ATR */ |
222 | update_pcm1796_volume(chip); | 218 | update_pcm1796_volume(chip); |
219 | } | ||
220 | |||
221 | static void xonar_d2_init(struct oxygen *chip) | ||
222 | { | ||
223 | struct xonar_data *data = chip->model_data; | ||
224 | |||
225 | data->anti_pop_delay = 300; | ||
226 | data->output_enable_bit = GPIO_D2_OUTPUT_ENABLE; | ||
227 | data->pcm1796_oversampling = PCM1796_OS_64; | ||
228 | |||
229 | pcm1796_init(chip); | ||
223 | 230 | ||
224 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, GPIO_D2_ALT); | 231 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, GPIO_D2_ALT); |
225 | oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, GPIO_D2_ALT); | 232 | oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, GPIO_D2_ALT); |
@@ -272,24 +279,10 @@ static void update_cs43xx_mute(struct oxygen *chip) | |||
272 | update_cs4362a_volumes(chip); | 279 | update_cs4362a_volumes(chip); |
273 | } | 280 | } |
274 | 281 | ||
275 | static void xonar_dx_init(struct oxygen *chip) | 282 | static void cs43xx_init(struct oxygen *chip) |
276 | { | 283 | { |
277 | struct xonar_data *data = chip->model_data; | 284 | struct xonar_data *data = chip->model_data; |
278 | 285 | ||
279 | data->anti_pop_delay = 800; | ||
280 | data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE; | ||
281 | data->ext_power_reg = OXYGEN_GPI_DATA; | ||
282 | data->ext_power_int_reg = OXYGEN_GPI_INTERRUPT_MASK; | ||
283 | data->ext_power_bit = GPI_DX_EXT_POWER; | ||
284 | data->cs4398_fm = CS4398_FM_SINGLE | CS4398_DEM_NONE | CS4398_DIF_LJUST; | ||
285 | data->cs4362a_fm = CS4362A_FM_SINGLE | | ||
286 | CS4362A_ATAPI_B_R | CS4362A_ATAPI_A_L; | ||
287 | |||
288 | oxygen_write16(chip, OXYGEN_2WIRE_BUS_STATUS, | ||
289 | OXYGEN_2WIRE_LENGTH_8 | | ||
290 | OXYGEN_2WIRE_INTERRUPT_MASK | | ||
291 | OXYGEN_2WIRE_SPEED_FAST); | ||
292 | |||
293 | /* set CPEN (control port mode) and power down */ | 286 | /* set CPEN (control port mode) and power down */ |
294 | cs4398_write(chip, 8, CS4398_CPEN | CS4398_PDN); | 287 | cs4398_write(chip, 8, CS4398_CPEN | CS4398_PDN); |
295 | cs4362a_write(chip, 0x01, CS4362A_PDN | CS4362A_CPEN); | 288 | cs4362a_write(chip, 0x01, CS4362A_PDN | CS4362A_CPEN); |
@@ -311,6 +304,27 @@ static void xonar_dx_init(struct oxygen *chip) | |||
311 | /* clear power down */ | 304 | /* clear power down */ |
312 | cs4398_write(chip, 8, CS4398_CPEN); | 305 | cs4398_write(chip, 8, CS4398_CPEN); |
313 | cs4362a_write(chip, 0x01, CS4362A_CPEN); | 306 | cs4362a_write(chip, 0x01, CS4362A_CPEN); |
307 | } | ||
308 | |||
309 | static void xonar_dx_init(struct oxygen *chip) | ||
310 | { | ||
311 | struct xonar_data *data = chip->model_data; | ||
312 | |||
313 | data->anti_pop_delay = 800; | ||
314 | data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE; | ||
315 | data->ext_power_reg = OXYGEN_GPI_DATA; | ||
316 | data->ext_power_int_reg = OXYGEN_GPI_INTERRUPT_MASK; | ||
317 | data->ext_power_bit = GPI_DX_EXT_POWER; | ||
318 | data->cs4398_fm = CS4398_FM_SINGLE | CS4398_DEM_NONE | CS4398_DIF_LJUST; | ||
319 | data->cs4362a_fm = CS4362A_FM_SINGLE | | ||
320 | CS4362A_ATAPI_B_R | CS4362A_ATAPI_A_L; | ||
321 | |||
322 | oxygen_write16(chip, OXYGEN_2WIRE_BUS_STATUS, | ||
323 | OXYGEN_2WIRE_LENGTH_8 | | ||
324 | OXYGEN_2WIRE_INTERRUPT_MASK | | ||
325 | OXYGEN_2WIRE_SPEED_FAST); | ||
326 | |||
327 | cs43xx_init(chip); | ||
314 | 328 | ||
315 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, | 329 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, |
316 | GPIO_DX_FRONT_PANEL | GPIO_DX_INPUT_ROUTE); | 330 | GPIO_DX_FRONT_PANEL | GPIO_DX_INPUT_ROUTE); |