diff options
Diffstat (limited to 'sound/pci/ice1712')
-rw-r--r-- | sound/pci/ice1712/ice1724.c | 8 | ||||
-rw-r--r-- | sound/pci/ice1712/juli.c | 17 |
2 files changed, 25 insertions, 0 deletions
diff --git a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c index f533850ec6e7..3bfd70577d7a 100644 --- a/sound/pci/ice1712/ice1724.c +++ b/sound/pci/ice1712/ice1724.c | |||
@@ -970,6 +970,8 @@ static int snd_vt1724_playback_spdif_open(struct snd_pcm_substream *substream) | |||
970 | VT1724_BUFFER_ALIGN); | 970 | VT1724_BUFFER_ALIGN); |
971 | snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, | 971 | snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, |
972 | VT1724_BUFFER_ALIGN); | 972 | VT1724_BUFFER_ALIGN); |
973 | if (ice->spdif.ops.open) | ||
974 | ice->spdif.ops.open(ice, substream); | ||
973 | return 0; | 975 | return 0; |
974 | } | 976 | } |
975 | 977 | ||
@@ -980,6 +982,8 @@ static int snd_vt1724_playback_spdif_close(struct snd_pcm_substream *substream) | |||
980 | if (PRO_RATE_RESET) | 982 | if (PRO_RATE_RESET) |
981 | snd_vt1724_set_pro_rate(ice, PRO_RATE_DEFAULT, 0); | 983 | snd_vt1724_set_pro_rate(ice, PRO_RATE_DEFAULT, 0); |
982 | ice->playback_con_substream = NULL; | 984 | ice->playback_con_substream = NULL; |
985 | if (ice->spdif.ops.close) | ||
986 | ice->spdif.ops.close(ice, substream); | ||
983 | 987 | ||
984 | return 0; | 988 | return 0; |
985 | } | 989 | } |
@@ -1002,6 +1006,8 @@ static int snd_vt1724_capture_spdif_open(struct snd_pcm_substream *substream) | |||
1002 | VT1724_BUFFER_ALIGN); | 1006 | VT1724_BUFFER_ALIGN); |
1003 | snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, | 1007 | snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, |
1004 | VT1724_BUFFER_ALIGN); | 1008 | VT1724_BUFFER_ALIGN); |
1009 | if (ice->spdif.ops.open) | ||
1010 | ice->spdif.ops.open(ice, substream); | ||
1005 | return 0; | 1011 | return 0; |
1006 | } | 1012 | } |
1007 | 1013 | ||
@@ -1012,6 +1018,8 @@ static int snd_vt1724_capture_spdif_close(struct snd_pcm_substream *substream) | |||
1012 | if (PRO_RATE_RESET) | 1018 | if (PRO_RATE_RESET) |
1013 | snd_vt1724_set_pro_rate(ice, PRO_RATE_DEFAULT, 0); | 1019 | snd_vt1724_set_pro_rate(ice, PRO_RATE_DEFAULT, 0); |
1014 | ice->capture_con_substream = NULL; | 1020 | ice->capture_con_substream = NULL; |
1021 | if (ice->spdif.ops.close) | ||
1022 | ice->spdif.ops.close(ice, substream); | ||
1015 | 1023 | ||
1016 | return 0; | 1024 | return 0; |
1017 | } | 1025 | } |
diff --git a/sound/pci/ice1712/juli.c b/sound/pci/ice1712/juli.c index e8038c0ceb72..4550609b4d47 100644 --- a/sound/pci/ice1712/juli.c +++ b/sound/pci/ice1712/juli.c | |||
@@ -77,6 +77,22 @@ static unsigned char juli_ak4114_read(void *private_data, unsigned char reg) | |||
77 | return snd_vt1724_read_i2c((struct snd_ice1712 *)private_data, AK4114_ADDR, reg); | 77 | return snd_vt1724_read_i2c((struct snd_ice1712 *)private_data, AK4114_ADDR, reg); |
78 | } | 78 | } |
79 | 79 | ||
80 | static void juli_spdif_in_open(struct snd_ice1712 *ice, | ||
81 | struct snd_pcm_substream *substream) | ||
82 | { | ||
83 | struct juli_spec *spec = ice->spec; | ||
84 | struct snd_pcm_runtime *runtime = substream->runtime; | ||
85 | int rate; | ||
86 | |||
87 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | ||
88 | return; | ||
89 | rate = snd_ak4114_external_rate(spec->ak4114); | ||
90 | if (rate >= runtime->hw.rate_min && rate <= runtime->hw.rate_max) { | ||
91 | runtime->hw.rate_min = rate; | ||
92 | runtime->hw.rate_max = rate; | ||
93 | } | ||
94 | } | ||
95 | |||
80 | /* | 96 | /* |
81 | * AK4358 section | 97 | * AK4358 section |
82 | */ | 98 | */ |
@@ -210,6 +226,7 @@ static int __devinit juli_init(struct snd_ice1712 *ice) | |||
210 | return err; | 226 | return err; |
211 | } | 227 | } |
212 | 228 | ||
229 | ice->spdif.ops.open = juli_spdif_in_open; | ||
213 | return 0; | 230 | return 0; |
214 | } | 231 | } |
215 | 232 | ||