diff options
-rw-r--r-- | sound/soc/fsl/fsl_easrc.c | 36 | ||||
-rw-r--r-- | sound/soc/fsl/fsl_easrc_m2m.c | 13 |
2 files changed, 39 insertions, 10 deletions
diff --git a/sound/soc/fsl/fsl_easrc.c b/sound/soc/fsl/fsl_easrc.c index 859827517797..49b7fc7e083b 100644 --- a/sound/soc/fsl/fsl_easrc.c +++ b/sound/soc/fsl/fsl_easrc.c @@ -1154,12 +1154,14 @@ int fsl_easrc_config_context(struct fsl_easrc *easrc, unsigned int ctx_id) return ret; } -void fsl_easrc_process_format(struct fsl_easrc *easrc, +static int fsl_easrc_process_format(struct fsl_easrc *easrc, struct fsl_easrc_data_fmt *fmt, snd_pcm_format_t raw_fmt) { + int ret; + if (!fmt) - return; + return -EINVAL; /* Context Input Floating Point Format * 0 - Integer Format @@ -1183,6 +1185,8 @@ void fsl_easrc_process_format(struct fsl_easrc *easrc, case 32: fmt->width = EASRC_WIDTH_32_BIT; break; + default: + return -EINVAL; } switch (raw_fmt) { @@ -1205,12 +1209,22 @@ void fsl_easrc_process_format(struct fsl_easrc *easrc, * 0 - Little-Endian * 1 - Big-Endian */ - fmt->endianness = snd_pcm_format_big_endian(raw_fmt); + ret = snd_pcm_format_big_endian(raw_fmt); + if (ret < 0) + return ret; + + fmt->endianness = ret; /* Input Data sign * 0b - Signed Format * 1b - Unsigned Format */ - fmt->unsign = snd_pcm_format_unsigned(raw_fmt) > 0 ? 1 : 0; + ret = snd_pcm_format_unsigned(raw_fmt) > 0 ? 1 : 0; + if (ret < 0) + return ret; + + fmt->unsign = ret; + + return 0; } int fsl_easrc_set_ctx_format(struct fsl_easrc_context *ctx, @@ -1223,8 +1237,11 @@ int fsl_easrc_set_ctx_format(struct fsl_easrc_context *ctx, int ret; /* get the bitfield values for input data format */ - if (in_raw_format && out_raw_format) - fsl_easrc_process_format(easrc, in_fmt, *in_raw_format); + if (in_raw_format && out_raw_format) { + ret = fsl_easrc_process_format(easrc, in_fmt, *in_raw_format); + if (ret) + return ret; + } ret = regmap_update_bits(easrc->regmap, REG_EASRC_CC(ctx->index), @@ -1261,8 +1278,11 @@ int fsl_easrc_set_ctx_format(struct fsl_easrc_context *ctx, return ret; /* get the bitfield values for input data format */ - if (in_raw_format && out_raw_format) - fsl_easrc_process_format(easrc, out_fmt, *out_raw_format); + if (in_raw_format && out_raw_format) { + ret = fsl_easrc_process_format(easrc, out_fmt, *out_raw_format); + if (ret) + return ret; + } ret = regmap_update_bits(easrc->regmap, REG_EASRC_COC(ctx->index), diff --git a/sound/soc/fsl/fsl_easrc_m2m.c b/sound/soc/fsl/fsl_easrc_m2m.c index 6acbb3b3e8d3..4a44df1e564e 100644 --- a/sound/soc/fsl/fsl_easrc_m2m.c +++ b/sound/soc/fsl/fsl_easrc_m2m.c @@ -480,10 +480,19 @@ static long fsl_easrc_ioctl_config_context(struct fsl_easrc_m2m *m2m, return ret; } - fsl_easrc_process_format(easrc, &ctx->in_params.fmt, + ret = fsl_easrc_process_format(easrc, &ctx->in_params.fmt, config.input_format); - fsl_easrc_process_format(easrc, &ctx->out_params.fmt, + if (ret) { + dev_err(dev, "input format error %d\n", ret); + return ret; + } + + ret = fsl_easrc_process_format(easrc, &ctx->out_params.fmt, config.output_format); + if (ret) { + dev_err(dev, "output format error %d\n", ret); + return ret; + } /* FIXME - fix sample position? * if the input sample is 16-bits wide and left-justified on a |