lkml.org 
[lkml]   [2020]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 02/23] ASoC: tegra: Add support for CIF programming
    Date
    Audio Client Interface (CIF) is a proprietary interface employed to route
    audio samples through Audio Hub (AHUB) components by inter connecting the
    various modules.

    This patch exports an inline function tegra_set_cif() which can be used,
    for now, to program CIF on Tegra210 and later Tegra generations. Later it
    can be extended to include helpers for legacy chips as well.

    Signed-off-by: Sameer Pujar <spujar@nvidia.com>
    Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
    Reviewed-by: Dmitry Osipenko <digetx@gmail.com>
    ---
    sound/soc/tegra/tegra_cif.h | 65 +++++++++++++++++++++++++++++++++++++++++++++
    1 file changed, 65 insertions(+)
    create mode 100644 sound/soc/tegra/tegra_cif.h

    diff --git a/sound/soc/tegra/tegra_cif.h b/sound/soc/tegra/tegra_cif.h
    new file mode 100644
    index 0000000..7cca806
    --- /dev/null
    +++ b/sound/soc/tegra/tegra_cif.h
    @@ -0,0 +1,65 @@
    +/* SPDX-License-Identifier: GPL-2.0-only */
    +/*
    + * tegra_cif.h - TEGRA Audio CIF Programming
    + *
    + * Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved.
    + *
    + */
    +
    +#ifndef __TEGRA_CIF_H__
    +#define __TEGRA_CIF_H__
    +
    +#include <linux/regmap.h>
    +
    +#define TEGRA_ACIF_CTRL_FIFO_TH_SHIFT 24
    +#define TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT 20
    +#define TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT 16
    +#define TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT 12
    +#define TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT 8
    +#define TEGRA_ACIF_CTRL_EXPAND_SHIFT 6
    +#define TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT 4
    +#define TEGRA_ACIF_CTRL_REPLICATE_SHIFT 3
    +#define TEGRA_ACIF_CTRL_TRUNCATE_SHIFT 1
    +#define TEGRA_ACIF_CTRL_MONO_CONV_SHIFT 0
    +
    +/* AUDIO/CLIENT_BITS values */
    +#define TEGRA_ACIF_BITS_8 1
    +#define TEGRA_ACIF_BITS_16 3
    +#define TEGRA_ACIF_BITS_24 5
    +#define TEGRA_ACIF_BITS_32 7
    +
    +#define TEGRA_ACIF_UPDATE_MASK 0x3ffffffb
    +
    +struct tegra_cif_conf {
    + unsigned int threshold;
    + unsigned int audio_ch;
    + unsigned int client_ch;
    + unsigned int audio_bits;
    + unsigned int client_bits;
    + unsigned int expand;
    + unsigned int stereo_conv;
    + unsigned int replicate;
    + unsigned int truncate;
    + unsigned int mono_conv;
    +};
    +
    +static inline void tegra_set_cif(struct regmap *regmap, unsigned int reg,
    + struct tegra_cif_conf *conf)
    +{
    + unsigned int value;
    +
    + value = (conf->threshold << TEGRA_ACIF_CTRL_FIFO_TH_SHIFT) |
    + ((conf->audio_ch - 1) << TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT) |
    + ((conf->client_ch - 1) << TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT) |
    + (conf->audio_bits << TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT) |
    + (conf->client_bits << TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT) |
    + (conf->expand << TEGRA_ACIF_CTRL_EXPAND_SHIFT) |
    + (conf->stereo_conv << TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT) |
    + (conf->replicate << TEGRA_ACIF_CTRL_REPLICATE_SHIFT) |
    + (conf->truncate << TEGRA_ACIF_CTRL_TRUNCATE_SHIFT) |
    + (conf->mono_conv << TEGRA_ACIF_CTRL_MONO_CONV_SHIFT);
    +
    + regmap_update_bits(regmap, reg, TEGRA_ACIF_UPDATE_MASK, value);
    +}
    +
    +#endif
    --
    2.7.4
    \
     
     \ /
      Last update: 2020-06-27 06:55    [W:4.388 / U:0.456 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site