aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/virtuoso.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2008-05-13 03:22:43 -0400
committerJaroslav Kysela <perex@perex.cz>2008-05-19 07:19:17 -0400
commit75146fc0f9368ea41419792ac8bfdd19273b4473 (patch)
tree73d3280052d0a1e63a38c3eaf42fe80cbd616a0c /sound/pci/oxygen/virtuoso.c
parentbbbfb5526650cb9d01c5c230a4e3cbbc18474c41 (diff)
[ALSA] oxygen: separate out hardware initialization code
Create separate functions for the code that initializes the hardware, as opposed to initializing internal driver state, so that they can be reused for resume support. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
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);