diff options
Diffstat (limited to 'sound/pci/ice1712/juli.c')
-rw-r--r-- | sound/pci/ice1712/juli.c | 58 |
1 files changed, 35 insertions, 23 deletions
diff --git a/sound/pci/ice1712/juli.c b/sound/pci/ice1712/juli.c index fd948bfd9aef..98bc3b7681b5 100644 --- a/sound/pci/ice1712/juli.c +++ b/sound/pci/ice1712/juli.c | |||
@@ -380,7 +380,7 @@ static struct snd_kcontrol_new juli_mute_controls[] __devinitdata = { | |||
380 | * inputs) are fed from Xilinx. | 380 | * inputs) are fed from Xilinx. |
381 | * | 381 | * |
382 | * I even checked traces on board and coded a support in driver for | 382 | * I even checked traces on board and coded a support in driver for |
383 | * an alternative possiblity - the unused I2S ICE output channels | 383 | * an alternative possibility - the unused I2S ICE output channels |
384 | * switched to HW-IN/SPDIF-IN and providing the monitoring signal to | 384 | * switched to HW-IN/SPDIF-IN and providing the monitoring signal to |
385 | * the DAC - to no avail. The I2S outputs seem to be unconnected. | 385 | * the DAC - to no avail. The I2S outputs seem to be unconnected. |
386 | * | 386 | * |
@@ -412,25 +412,6 @@ static struct snd_kcontrol_new juli_mute_controls[] __devinitdata = { | |||
412 | }, | 412 | }, |
413 | }; | 413 | }; |
414 | 414 | ||
415 | |||
416 | static void ak4358_proc_regs_read(struct snd_info_entry *entry, | ||
417 | struct snd_info_buffer *buffer) | ||
418 | { | ||
419 | struct snd_ice1712 *ice = (struct snd_ice1712 *)entry->private_data; | ||
420 | int reg, val; | ||
421 | for (reg = 0; reg <= 0xf; reg++) { | ||
422 | val = snd_akm4xxx_get(ice->akm, 0, reg); | ||
423 | snd_iprintf(buffer, "0x%02x = 0x%02x\n", reg, val); | ||
424 | } | ||
425 | } | ||
426 | |||
427 | static void ak4358_proc_init(struct snd_ice1712 *ice) | ||
428 | { | ||
429 | struct snd_info_entry *entry; | ||
430 | if (!snd_card_proc_new(ice->card, "ak4358_codec", &entry)) | ||
431 | snd_info_set_text_ops(entry, ice, ak4358_proc_regs_read); | ||
432 | } | ||
433 | |||
434 | static char *slave_vols[] __devinitdata = { | 415 | static char *slave_vols[] __devinitdata = { |
435 | PCM_VOLUME, | 416 | PCM_VOLUME, |
436 | MONITOR_AN_IN_VOLUME, | 417 | MONITOR_AN_IN_VOLUME, |
@@ -496,14 +477,37 @@ static int __devinit juli_add_controls(struct snd_ice1712 *ice) | |||
496 | /* only capture SPDIF over AK4114 */ | 477 | /* only capture SPDIF over AK4114 */ |
497 | err = snd_ak4114_build(spec->ak4114, NULL, | 478 | err = snd_ak4114_build(spec->ak4114, NULL, |
498 | ice->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream); | 479 | ice->pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream); |
499 | |||
500 | ak4358_proc_init(ice); | ||
501 | if (err < 0) | 480 | if (err < 0) |
502 | return err; | 481 | return err; |
503 | return 0; | 482 | return 0; |
504 | } | 483 | } |
505 | 484 | ||
506 | /* | 485 | /* |
486 | * suspend/resume | ||
487 | * */ | ||
488 | |||
489 | #ifdef CONFIG_PM | ||
490 | static int juli_resume(struct snd_ice1712 *ice) | ||
491 | { | ||
492 | struct snd_akm4xxx *ak = ice->akm; | ||
493 | struct juli_spec *spec = ice->spec; | ||
494 | /* akm4358 un-reset, un-mute */ | ||
495 | snd_akm4xxx_reset(ak, 0); | ||
496 | /* reinit ak4114 */ | ||
497 | snd_ak4114_reinit(spec->ak4114); | ||
498 | return 0; | ||
499 | } | ||
500 | |||
501 | static int juli_suspend(struct snd_ice1712 *ice) | ||
502 | { | ||
503 | struct snd_akm4xxx *ak = ice->akm; | ||
504 | /* akm4358 reset and soft-mute */ | ||
505 | snd_akm4xxx_reset(ak, 1); | ||
506 | return 0; | ||
507 | } | ||
508 | #endif | ||
509 | |||
510 | /* | ||
507 | * initialize the chip | 511 | * initialize the chip |
508 | */ | 512 | */ |
509 | 513 | ||
@@ -550,13 +554,14 @@ static inline unsigned char juli_set_mclk(struct snd_ice1712 *ice, | |||
550 | } | 554 | } |
551 | 555 | ||
552 | /* setting clock to external - SPDIF */ | 556 | /* setting clock to external - SPDIF */ |
553 | static void juli_set_spdif_clock(struct snd_ice1712 *ice) | 557 | static int juli_set_spdif_clock(struct snd_ice1712 *ice, int type) |
554 | { | 558 | { |
555 | unsigned int old; | 559 | unsigned int old; |
556 | old = ice->gpio.get_data(ice); | 560 | old = ice->gpio.get_data(ice); |
557 | /* external clock (= 0), multiply 1x, 48kHz */ | 561 | /* external clock (= 0), multiply 1x, 48kHz */ |
558 | ice->gpio.set_data(ice, (old & ~GPIO_RATE_MASK) | GPIO_MULTI_1X | | 562 | ice->gpio.set_data(ice, (old & ~GPIO_RATE_MASK) | GPIO_MULTI_1X | |
559 | GPIO_FREQ_48KHZ); | 563 | GPIO_FREQ_48KHZ); |
564 | return 0; | ||
560 | } | 565 | } |
561 | 566 | ||
562 | /* Called when ak4114 detects change in the input SPDIF stream */ | 567 | /* Called when ak4114 detects change in the input SPDIF stream */ |
@@ -646,6 +651,13 @@ static int __devinit juli_init(struct snd_ice1712 *ice) | |||
646 | ice->set_spdif_clock = juli_set_spdif_clock; | 651 | ice->set_spdif_clock = juli_set_spdif_clock; |
647 | 652 | ||
648 | ice->spdif.ops.open = juli_spdif_in_open; | 653 | ice->spdif.ops.open = juli_spdif_in_open; |
654 | |||
655 | #ifdef CONFIG_PM | ||
656 | ice->pm_resume = juli_resume; | ||
657 | ice->pm_suspend = juli_suspend; | ||
658 | ice->pm_suspend_enabled = 1; | ||
659 | #endif | ||
660 | |||
649 | return 0; | 661 | return 0; |
650 | } | 662 | } |
651 | 663 | ||