aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/virtuoso.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/oxygen/virtuoso.c')
-rw-r--r--sound/pci/oxygen/virtuoso.c54
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
207static void xonar_d2_init(struct oxygen *chip) 207static 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
221static 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
275static void xonar_dx_init(struct oxygen *chip) 282static 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
309static 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);