66 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * tegra_cif.h - TEGRA Audio CIF Programming4 *5 * Copyright (c) 2020 NVIDIA CORPORATION. All rights reserved.6 *7 */8 9#ifndef __TEGRA_CIF_H__10#define __TEGRA_CIF_H__11 12#include <linux/regmap.h>13 14#define TEGRA_ACIF_CTRL_FIFO_TH_SHIFT 2415#define TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT 2016#define TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT 1617#define TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT 1218#define TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT 819#define TEGRA_ACIF_CTRL_EXPAND_SHIFT 620#define TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT 421#define TEGRA_ACIF_CTRL_REPLICATE_SHIFT 322#define TEGRA_ACIF_CTRL_TRUNCATE_SHIFT 123#define TEGRA_ACIF_CTRL_MONO_CONV_SHIFT 024 25/* AUDIO/CLIENT_BITS values */26#define TEGRA_ACIF_BITS_8 127#define TEGRA_ACIF_BITS_16 328#define TEGRA_ACIF_BITS_24 529#define TEGRA_ACIF_BITS_32 730 31#define TEGRA_ACIF_UPDATE_MASK 0x3ffffffb32 33struct tegra_cif_conf {34 unsigned int threshold;35 unsigned int audio_ch;36 unsigned int client_ch;37 unsigned int audio_bits;38 unsigned int client_bits;39 unsigned int expand;40 unsigned int stereo_conv;41 unsigned int replicate;42 unsigned int truncate;43 unsigned int mono_conv;44};45 46static inline void tegra_set_cif(struct regmap *regmap, unsigned int reg,47 struct tegra_cif_conf *conf)48{49 unsigned int value;50 51 value = (conf->threshold << TEGRA_ACIF_CTRL_FIFO_TH_SHIFT) |52 ((conf->audio_ch - 1) << TEGRA_ACIF_CTRL_AUDIO_CH_SHIFT) |53 ((conf->client_ch - 1) << TEGRA_ACIF_CTRL_CLIENT_CH_SHIFT) |54 (conf->audio_bits << TEGRA_ACIF_CTRL_AUDIO_BITS_SHIFT) |55 (conf->client_bits << TEGRA_ACIF_CTRL_CLIENT_BITS_SHIFT) |56 (conf->expand << TEGRA_ACIF_CTRL_EXPAND_SHIFT) |57 (conf->stereo_conv << TEGRA_ACIF_CTRL_STEREO_CONV_SHIFT) |58 (conf->replicate << TEGRA_ACIF_CTRL_REPLICATE_SHIFT) |59 (conf->truncate << TEGRA_ACIF_CTRL_TRUNCATE_SHIFT) |60 (conf->mono_conv << TEGRA_ACIF_CTRL_MONO_CONV_SHIFT);61 62 regmap_update_bits(regmap, reg, TEGRA_ACIF_UPDATE_MASK, value);63}64 65#endif66