mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-24 02:01:36 +03:00
Earlier hardcoded pll base rates were leading to fractional divider values for i2s multichannel config while deriving i2s bclk. Hence updated clock rates and logic for >2 channel configs for t186ref and higher boards such that the dynamic range between max plla and min plla is < 35 MHz. Also, if desired bclk is above limit, the case will be declared as not supported. Note that new facility will be used only in l4t machine driver. Bug 200702569 Change-Id: I83aba425f6dde30a1f29f85b16a1bbbebba14198 Signed-off-by: Asha Talambedu <atalambedu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2491744 (cherry picked from commit e0fe51d5e7ced073eb618e19836f88a023f70bdc) Reviewed-on: https://git-master.nvidia.com/r/c/linux-5.10/+/2613507 Tested-by: mobile promotions <svcmobile_promotions@nvidia.com> Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com> Reviewed-by: Mohan Kumar D <mkumard@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> GVS: Gerrit_Virtual_Submit
53 lines
1.5 KiB
C
53 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* tegra_asoc_utils.h - Definitions for Tegra DAS driver
|
|
*
|
|
* Author: Stephen Warren <swarren@nvidia.com>
|
|
* Copyright (c) 2010,2012-2021, NVIDIA CORPORATION. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __TEGRA_ASOC_UTILS_H__
|
|
#define __TEGRA_ASOC_UTILS_H__
|
|
|
|
struct clk;
|
|
struct device;
|
|
|
|
enum tegra_asoc_utils_soc {
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA20,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA30,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA114,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA124,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA210,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA186,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA194,
|
|
TEGRA_ASOC_UTILS_SOC_TEGRA234,
|
|
};
|
|
|
|
struct tegra_asoc_utils_data {
|
|
struct device *dev;
|
|
enum tegra_asoc_utils_soc soc;
|
|
struct clk *clk_pll_a;
|
|
struct clk *clk_pll_a_out0;
|
|
struct clk *clk_cdev1;
|
|
int set_baseclock;
|
|
int set_mclk;
|
|
unsigned int set_pll_out;
|
|
unsigned int *pll_base_rate;
|
|
unsigned int mclk_fs;
|
|
bool fixed_pll;
|
|
};
|
|
|
|
int tegra_asoc_utils_set_rate(struct tegra_asoc_utils_data *data, int srate,
|
|
int mclk);
|
|
int tegra_asoc_utils_set_ac97_rate(struct tegra_asoc_utils_data *data);
|
|
int tegra_asoc_utils_set_tegra210_rate(struct tegra_asoc_utils_data *data,
|
|
unsigned int sample_rate,
|
|
unsigned int channels,
|
|
unsigned int sample_size);
|
|
int tegra_asoc_utils_clk_enable(struct tegra_asoc_utils_data *data);
|
|
void tegra_asoc_utils_clk_disable(struct tegra_asoc_utils_data *data);
|
|
int tegra_asoc_utils_init(struct tegra_asoc_utils_data *data,
|
|
struct device *dev);
|
|
|
|
#endif
|