aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/ice1712
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/ice1712')
-rw-r--r--sound/pci/ice1712/ice1724.c8
-rw-r--r--sound/pci/ice1712/juli.c17
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
80static 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