Code Review
/
kvmfornfv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git]
/
kernel
/
sound
/
pci
/
rme9652
/
hdspm.c
diff --git
a/kernel/sound/pci/rme9652/hdspm.c
b/kernel/sound/pci/rme9652/hdspm.c
index
cb666c7
..
a4a999a
100644
(file)
--- a/
kernel/sound/pci/rme9652/hdspm.c
+++ b/
kernel/sound/pci/rme9652/hdspm.c
@@
-1601,6
+1601,9
@@
static void hdspm_set_dds_value(struct hdspm *hdspm, int rate)
{
u64 n;
{
u64 n;
+ if (snd_BUG_ON(rate <= 0))
+ return;
+
if (rate >= 112000)
rate /= 4;
else if (rate >= 56000)
if (rate >= 112000)
rate /= 4;
else if (rate >= 56000)
@@
-2215,6
+2218,8
@@
static int hdspm_get_system_sample_rate(struct hdspm *hdspm)
} else {
/* slave mode, return external sample rate */
rate = hdspm_external_sample_rate(hdspm);
} else {
/* slave mode, return external sample rate */
rate = hdspm_external_sample_rate(hdspm);
+ if (!rate)
+ rate = hdspm->system_sample_rate;
}
}
}
}
@@
-2260,8
+2265,11
@@
static int snd_hdspm_put_system_sample_rate(struct snd_kcontrol *kcontrol,
ucontrol)
{
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
ucontrol)
{
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
+ int rate = ucontrol->value.integer.value[0];
- hdspm_set_dds_value(hdspm, ucontrol->value.enumerated.item[0]);
+ if (rate < 27000 || rate > 207000)
+ return -EINVAL;
+ hdspm_set_dds_value(hdspm, ucontrol->value.integer.value[0]);
return 0;
}
return 0;
}
@@
-4449,7
+4457,7
@@
static int snd_hdspm_get_tco_word_term(struct snd_kcontrol *kcontrol,
{
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
{
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
- ucontrol->value.
enumerated.item
[0] = hdspm->tco->term;
+ ucontrol->value.
integer.value
[0] = hdspm->tco->term;
return 0;
}
return 0;
}
@@
-4460,8
+4468,8
@@
static int snd_hdspm_put_tco_word_term(struct snd_kcontrol *kcontrol,
{
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
{
struct hdspm *hdspm = snd_kcontrol_chip(kcontrol);
- if (hdspm->tco->term != ucontrol->value.
enumerated.item
[0]) {
- hdspm->tco->term = ucontrol->value.
enumerated.item
[0];
+ if (hdspm->tco->term != ucontrol->value.
integer.value
[0]) {
+ hdspm->tco->term = ucontrol->value.
integer.value
[0];
hdspm_tco_write(hdspm);
hdspm_tco_write(hdspm);
@@
-6080,18
+6088,17
@@
static int snd_hdspm_open(struct snd_pcm_substream *substream)
SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
32, 4096);
/* RayDAT & AIO have a fixed buffer of 16384 samples per channel */
SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
32, 4096);
/* RayDAT & AIO have a fixed buffer of 16384 samples per channel */
- snd_pcm_hw_constraint_
minmax
(runtime,
+ snd_pcm_hw_constraint_
single
(runtime,
SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
SNDRV_PCM_HW_PARAM_BUFFER_SIZE,
- 16384
, 16384
);
+ 16384);
break;
default:
snd_pcm_hw_constraint_minmax(runtime,
SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
64, 8192);
break;
default:
snd_pcm_hw_constraint_minmax(runtime,
SNDRV_PCM_HW_PARAM_PERIOD_SIZE,
64, 8192);
- snd_pcm_hw_constraint_minmax(runtime,
- SNDRV_PCM_HW_PARAM_PERIODS,
- 2, 2);
+ snd_pcm_hw_constraint_single(runtime,
+ SNDRV_PCM_HW_PARAM_PERIODS, 2);
break;
}
break;
}