diff options
author | Clemens Ladisch <clemens@ladisch.de> | 2008-05-13 03:22:43 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@perex.cz> | 2008-05-19 07:19:17 -0400 |
commit | 75146fc0f9368ea41419792ac8bfdd19273b4473 (patch) | |
tree | 73d3280052d0a1e63a38c3eaf42fe80cbd616a0c /sound/pci/oxygen/virtuoso.c | |
parent | bbbfb5526650cb9d01c5c230a4e3cbbc18474c41 (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.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); |