Hi,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on asoc/for-next]
[also build test WARNING on v5.10-rc6 next-20201201]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/mdurnev-gmail-com/ASoC-rsnd-core-Check-convert-rate-in-rsnd_hw_params/20201202-191131
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git 
for-next
config: riscv-allyesconfig (attached as .config)
compiler: riscv64-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # 
https://github.com/0day-ci/linux/commit/2ffb6c8ec578fd78d5962f7bc7c38eeb5c6a4bd1
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
mdurnev-gmail-com/ASoC-rsnd-core-Check-convert-rate-in-rsnd_hw_params/20201202-191131
        git checkout 2ffb6c8ec578fd78d5962f7bc7c38eeb5c6a4bd1
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross 
ARCH=riscv 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All warnings (new ones prefixed by >>):

   sound/soc/sh/rcar/core.c: In function 'rsnd_hw_params':
>> sound/soc/sh/rcar/core.c:1442:4: warning: ISO C90 forbids mixed declarations 
>> and code [-Wdeclaration-after-statement]
    1442 |    int k_up = 6;
         |    ^~~
   sound/soc/sh/rcar/core.c:1447:56: error: 'fe_channel' undeclared (first use 
in this function); did you mean 'channel'?
    1447 |    channel = io->converted_chan ? io->converted_chan : fe_channel;
         |                                                        ^~~~~~~~~~
         |                                                        channel
   sound/soc/sh/rcar/core.c:1447:56: note: each undeclared identifier is 
reported only once for each function it appears in
>> sound/soc/sh/rcar/core.c:1460:8: warning: this statement may fall through 
>> [-Wimplicit-fallthrough=]
    1460 |     if (channel > 4) {
         |        ^
   sound/soc/sh/rcar/core.c:1464:4: note: here
    1464 |    case 0:
         |    ^~~~

vim +1442 sound/soc/sh/rcar/core.c

  1391  
  1392  /*
  1393   *              pcm ops
  1394   */
  1395  static int rsnd_hw_params(struct snd_soc_component *component,
  1396                            struct snd_pcm_substream *substream,
  1397                            struct snd_pcm_hw_params *hw_params)
  1398  {
  1399          struct snd_soc_dai *dai = rsnd_substream_to_dai(substream);
  1400          struct rsnd_dai *rdai = rsnd_dai_to_rdai(dai);
  1401          struct rsnd_dai_stream *io = rsnd_rdai_to_io(rdai, substream);
  1402          struct snd_soc_pcm_runtime *fe = 
asoc_substream_to_rtd(substream);
  1403  
  1404          /*
  1405           * rsnd assumes that it might be used under DPCM if user want 
to use
  1406           * channel / rate convert. Then, rsnd should be FE.
  1407           * And then, this function will be called *after* BE settings.
  1408           * this means, each BE already has fixuped hw_params.
  1409           * see
  1410           *      dpcm_fe_dai_hw_params()
  1411           *      dpcm_be_dai_hw_params()
  1412           */
  1413          io->converted_rate = 0;
  1414          io->converted_chan = 0;
  1415          if (fe->dai_link->dynamic) {
  1416                  struct rsnd_priv *priv = rsnd_io_to_priv(io);
  1417                  struct device *dev = rsnd_priv_to_dev(priv);
  1418                  struct snd_soc_dpcm *dpcm;
  1419                  struct snd_pcm_hw_params *be_params;
  1420                  int stream = substream->stream;
  1421  
  1422                  for_each_dpcm_be(fe, stream, dpcm) {
  1423                          be_params = &dpcm->hw_params;
  1424                          if (params_channels(hw_params) != 
params_channels(be_params))
  1425                                  io->converted_chan = 
params_channels(be_params);
  1426                          if (params_rate(hw_params) != 
params_rate(be_params))
  1427                                  io->converted_rate = 
params_rate(be_params);
  1428                  }
  1429                  if (io->converted_chan)
  1430                          dev_dbg(dev, "convert channels = %d\n", 
io->converted_chan);
  1431                  if (io->converted_rate) {
  1432                          dev_dbg(dev, "convert rate     = %d\n", 
io->converted_rate);
  1433  
  1434                          /*
  1435                           * SRC supports convert rates from 
params_rate(hw_params)/k_down
  1436                           * to params_rate(hw_params)*k_up, where k_up 
is always 6, and
  1437                           * k_down depends on number of channels and SRC 
unit.
  1438                           * So all SRC units can upsample audio up to 6 
times regardless
  1439                           * its number of channels. And all SRC units 
can downsample
  1440                           * 2 channel audio up to 6 times too.
  1441                           */
> 1442                          int k_up = 6;
  1443                          int k_down = 6;
  1444                          int channel;
  1445                          struct rsnd_mod *src_mod = 
rsnd_io_to_mod_src(io);
  1446  
  1447                          channel = io->converted_chan ? 
io->converted_chan : fe_channel;
  1448  
  1449                          switch (rsnd_mod_id(src_mod)) {
  1450                          /*
  1451                           * SRC0 can downsample 4, 6 and 8 channel audio 
up to 4 times.
  1452                           * SRC1, SRC3 and SRC4 can downsample 4 channel 
audio
  1453                           * up to 4 times.
  1454                           * SRC1, SRC3 and SRC4 can downsample 6 and 8 
channel audio
  1455                           * no more than twice.
  1456                           */
  1457                          case 1:
  1458                          case 3:
  1459                          case 4:
> 1460                                  if (channel > 4) {
  1461                                          k_down = 2;
  1462                                          break;
  1463                                  }
  1464                          case 0:
  1465                                  if (channel > 2)
  1466                                          k_down = 4;
  1467                                  break;
  1468  
  1469                          /* Other SRC units do not support more than 2 
channels */
  1470                          default:
  1471                                  if (channel > 2)
  1472                                          return -EINVAL;
  1473                          }
  1474  
  1475                          if (params_rate(hw_params) > io->converted_rate 
* k_down) {
  1476                                  hw_param_interval(hw_params, 
SNDRV_PCM_HW_PARAM_RATE)->min =
  1477                                          io->converted_rate * k_down;
  1478                                  hw_param_interval(hw_params, 
SNDRV_PCM_HW_PARAM_RATE)->max =
  1479                                          io->converted_rate * k_down;
  1480                                  hw_params->cmask |= 
SNDRV_PCM_HW_PARAM_RATE;
  1481                          } else if (params_rate(hw_params) * k_up < 
io->converted_rate) {
  1482                                  hw_param_interval(hw_params, 
SNDRV_PCM_HW_PARAM_RATE)->min =
  1483                                          (io->converted_rate + k_up - 1) 
/ k_up;
  1484                                  hw_param_interval(hw_params, 
SNDRV_PCM_HW_PARAM_RATE)->max =
  1485                                          (io->converted_rate + k_up - 1) 
/ k_up;
  1486                                  hw_params->cmask |= 
SNDRV_PCM_HW_PARAM_RATE;
  1487                          }
  1488  
  1489                          /*
  1490                           * TBD: Max SRC input and output rates also 
depend on number
  1491                           * of channels and SRC unit:
  1492                           * SRC1, SRC3 and SRC4 do not support more than 
128kHz
  1493                           * for 6 channel and 96kHz for 8 channel audio.
  1494                           * Perhaps this function should return EINVAL 
if the input or
  1495                           * the output rate exceeds the limitation.
  1496                           */
  1497                  }
  1498          }
  1499  
  1500          return rsnd_dai_call(hw_params, io, substream, hw_params);
  1501  }
  1502  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to