diff --git a/sys/dev/sound/pcm/vchan.c b/sys/dev/sound/pcm/vchan.c --- a/sys/dev/sound/pcm/vchan.c +++ b/sys/dev/sound/pcm/vchan.c @@ -193,12 +193,11 @@ { struct vchan_info *info; struct pcm_channel *c; - uint32_t pformat, pspeed, pflags, i; + uint32_t pformat, pflags, i; info = data; c = info->channel; pformat = c->parentchannel->format; - pspeed = c->parentchannel->speed; pflags = c->parentchannel->flags; CHN_LOCKASSERT(c); @@ -213,11 +212,6 @@ } info->caps.fmtlist[i] = pformat; } - if (c->format & AFMT_PASSTHROUGH) - info->caps.minspeed = c->speed; - else - info->caps.minspeed = pspeed; - info->caps.maxspeed = info->caps.minspeed; } else { info->caps.fmtlist = info->fmtlist + FMTLIST_OFFSET; if (pformat & AFMT_VCHAN) @@ -228,8 +222,13 @@ __func__, pformat); info->caps.fmtlist[0] = VCHAN_DEFAULT_FORMAT; } - info->caps.minspeed = pspeed; - info->caps.maxspeed = info->caps.minspeed; + } + if (feeder_rate_round) { + info->caps.minspeed = chn_getcaps(c->parentchannel)->minspeed; + info->caps.maxspeed = chn_getcaps(c->parentchannel)->maxspeed; + } else { + info->caps.minspeed = feeder_rate_min; + info->caps.maxspeed = feeder_rate_max; } return (&info->caps);