ASoC: fsl_asrc: Fix the issue about unsupported rate [Linux 4.14.128]

ASoC: fsl_asrc: Fix the issue about unsupported rate [Linux 4.14.128]

This Linux kernel change "ASoC: fsl_asrc: Fix the issue about unsupported rate" is included in the Linux 4.14.128 release. This change is authored by S.j. Wang <shengjiu.wang [at] nxp.com> on Wed May 15 06:42:18 2019 +0000. The commit for this change in Linux stable tree is 03da939 (patch) which is from upstream commit b06c58c. The same Linux upstream change may have been applied to various maintained Linux releases and you can find all Linux releases containing changes from upstream b06c58c.

ASoC: fsl_asrc: Fix the issue about unsupported rate

commit b06c58c2a1eed571ea2a6640fdb85b7b00196b1e upstream.

When the output sample rate is [8kHz, 30kHz], the limitation
of the supported ratio range is [1/24, 8]. In the driver
we use (8kHz, 30kHz) instead of [8kHz, 30kHz].
So this patch is to fix this issue and the potential rounding
issue with divider.

Fixes: fff6e03c7b65 ("ASoC: fsl_asrc: add support for 8-30kHz
output sample rate")
Cc: <stable@vger.kernel.org>
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

There are 4 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 sound/soc/fsl/fsl_asrc.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c
index 806d399..eeaeffb 100644
--- a/sound/soc/fsl/fsl_asrc.c
+++ b/sound/soc/fsl/fsl_asrc.c
@@ -286,8 +286,8 @@ static int fsl_asrc_config_pair(struct fsl_asrc_pair *pair)
        return -EINVAL;
    }

-   if ((outrate > 8000 && outrate < 30000) &&
-       (outrate/inrate > 24 || inrate/outrate > 8)) {
+   if ((outrate >= 8000 && outrate <= 30000) &&
+       (outrate > 24 * inrate || inrate > 8 * outrate)) {
        pair_err("exceed supported ratio range [1/24, 8] for \
                inrate/outrate: %d/%d\n", inrate, outrate);
        return -EINVAL;

Leave a Reply

Your email address will not be published. Required fields are marked *