lkml.org 
[lkml]   [2021]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v4 12/22] ASoC: tegra20: spdif: Filter out unsupported rates
    On Sat, Dec 04, 2021 at 05:37:15PM +0300, Dmitry Osipenko wrote:
    > SPDIF and other SoC components share audio PLL on Tegra, thus only one
    > component may set the desired base clock rate. This creates problem for
    > HDMI audio because it uses SPDIF and audio may not work if SPDIF's clock
    > doesn't exactly match standard audio rate since some receivers may reject
    > audio in that case. Filter out audio rates which SPDIF output can't
    > support, assuming that other components won't change rate at runtime.
    >
    > Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
    > ---
    > sound/soc/tegra/tegra20_spdif.c | 61 +++++++++++++++++++++++++++++++++
    > 1 file changed, 61 insertions(+)
    >
    > diff --git a/sound/soc/tegra/tegra20_spdif.c b/sound/soc/tegra/tegra20_spdif.c
    > index a4aa5614aef4..d09cd7ee6879 100644
    > --- a/sound/soc/tegra/tegra20_spdif.c
    > +++ b/sound/soc/tegra/tegra20_spdif.c
    > @@ -79,6 +79,7 @@ static int tegra20_spdif_hw_params(struct snd_pcm_substream *substream,
    > struct tegra20_spdif *spdif = dev_get_drvdata(dai->dev);
    > unsigned int mask = 0, val = 0;
    > int ret, spdifclock;
    > + long rate;

    Perhaps we should change spdifclock to be "long" as well, even though
    they're the same on Tegra20. SND_SOC_TEGRA depends on || COMPILE_TEST,
    so technically somebody could build this on 64-bit and then these are
    no longer the same types.

    Still shouldn't be problematic given the numbers that are passed in,
    but it'd still be nice to keep consistent types for these.

    >
    > mask |= TEGRA20_SPDIF_CTRL_PACK |
    > TEGRA20_SPDIF_CTRL_BIT_MODE_MASK;
    > @@ -133,6 +134,12 @@ static int tegra20_spdif_hw_params(struct snd_pcm_substream *substream,
    > return ret;
    > }
    >
    > + rate = clk_get_rate(spdif->clk_spdif_out);
    > + if (rate != spdifclock)
    > + dev_warn_once(dai->dev,
    > + "SPDIF clock rate %d doesn't match requested rate %lu\n",

    That should be %ld since it's not unsigned.

    Otherwise, looks good. Probably not worth respinning for just these
    minor comments, so:

    Acked-by: Thierry Reding <treding@nvidia.com>
    [unhandled content-type:application/pgp-signature]
    \
     
     \ /
      Last update: 2021-12-16 16:31    [W:2.510 / U:0.312 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site