18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2020 The Linux Foundation. All rights reserved.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * lpass_hdmi.h - Definitions for the QTi LPASS HDMI
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci#ifndef __LPASS_HDMI_H__
98c2ecf20Sopenharmony_ci#define __LPASS_HDMI_H__
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#include <linux/regmap.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#define LPASS_HDMITX_LEGACY_DISABLE		0x0
148c2ecf20Sopenharmony_ci#define LPASS_HDMITX_LEGACY_ENABLE		0x1
158c2ecf20Sopenharmony_ci#define LPASS_DP_AUDIO_BITWIDTH16		0x0
168c2ecf20Sopenharmony_ci#define LPASS_DP_AUDIO_BITWIDTH24		0xb
178c2ecf20Sopenharmony_ci#define LPASS_DATA_FORMAT_SHIFT			0x1
188c2ecf20Sopenharmony_ci#define LPASS_FREQ_BIT_SHIFT			24
198c2ecf20Sopenharmony_ci#define LPASS_DATA_FORMAT_LINEAR		0x0
208c2ecf20Sopenharmony_ci#define LPASS_DATA_FORMAT_NON_LINEAR	0x1
218c2ecf20Sopenharmony_ci#define LPASS_SAMPLING_FREQ32			0x3
228c2ecf20Sopenharmony_ci#define LPASS_SAMPLING_FREQ44			0x0
238c2ecf20Sopenharmony_ci#define LPASS_SAMPLING_FREQ48			0x2
248c2ecf20Sopenharmony_ci#define LPASS_TX_CTL_RESET				0x1
258c2ecf20Sopenharmony_ci#define LPASS_TX_CTL_CLEAR				0x0
268c2ecf20Sopenharmony_ci#define LPASS_SSTREAM_ENABLE			1
278c2ecf20Sopenharmony_ci#define LPASS_SSTREAM_DISABLE			0
288c2ecf20Sopenharmony_ci#define LPASS_LAYOUT_SP_DEFAULT			0xf
298c2ecf20Sopenharmony_ci#define LPASS_SSTREAM_DEFAULT_ENABLE	1
308c2ecf20Sopenharmony_ci#define LPASS_SSTREAM_DEFAULT_DISABLE	0
318c2ecf20Sopenharmony_ci#define LPASS_MUTE_ENABLE				1
328c2ecf20Sopenharmony_ci#define LPASS_MUTE_DISABLE				0
338c2ecf20Sopenharmony_ci#define LPASS_META_DEFAULT_VAL			0
348c2ecf20Sopenharmony_ci#define HW_MODE							1
358c2ecf20Sopenharmony_ci#define SW_MODE							0
368c2ecf20Sopenharmony_ci#define LEGACY_LPASS_LPAIF				1
378c2ecf20Sopenharmony_ci#define LEGACY_LPASS_HDMI				0
388c2ecf20Sopenharmony_ci#define REPLACE_VBIT					0x1
398c2ecf20Sopenharmony_ci#define LINEAR_PCM_DATA					0x0
408c2ecf20Sopenharmony_ci#define NON_LINEAR_PCM_DATA				0x1
418c2ecf20Sopenharmony_ci#define HDMITX_PARITY_CALC_EN			0x1
428c2ecf20Sopenharmony_ci#define HDMITX_PARITY_CALC_DIS			0x0
438c2ecf20Sopenharmony_ci#define LPASS_DATA_FORMAT_MASK			GENMASK(1, 1)
448c2ecf20Sopenharmony_ci#define LPASS_WORDLENGTH_MASK			GENMASK(3, 0)
458c2ecf20Sopenharmony_ci#define LPASS_FREQ_BIT_MASK				GENMASK(27, 24)
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_CTL_ADDR(v)		(v->hdmi_tx_ctl_addr)
488c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_LEGACY_ADDR(v)	(v->hdmi_legacy_addr)
498c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_VBIT_CTL_ADDR(v)	(v->hdmi_vbit_addr)
508c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_PARITY_ADDR(v)	(v->hdmi_parity_addr)
518c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_DP_ADDR(v)		(v->hdmi_DP_addr)
528c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_SSTREAM_ADDR(v)	(v->hdmi_sstream_addr)
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_CH_LSB_ADDR(v, port) \
558c2ecf20Sopenharmony_ci		(v->hdmi_ch_lsb_addr + v->ch_stride * (port))
568c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_CH_MSB_ADDR(v, port) \
578c2ecf20Sopenharmony_ci		(v->hdmi_ch_msb_addr + v->ch_stride * (port))
588c2ecf20Sopenharmony_ci#define LPASS_HDMI_TX_DMA_ADDR(v, port) \
598c2ecf20Sopenharmony_ci		(v->hdmi_dmactl_addr + v->hdmi_dma_stride * (port))
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_cistruct lpass_sstream_ctl {
628c2ecf20Sopenharmony_ci	struct regmap_field *sstream_en;
638c2ecf20Sopenharmony_ci	struct regmap_field *dma_sel;
648c2ecf20Sopenharmony_ci	struct regmap_field *auto_bbit_en;
658c2ecf20Sopenharmony_ci	struct regmap_field *layout;
668c2ecf20Sopenharmony_ci	struct regmap_field *layout_sp;
678c2ecf20Sopenharmony_ci	struct regmap_field *set_sp_on_en;
688c2ecf20Sopenharmony_ci	struct regmap_field *dp_audio;
698c2ecf20Sopenharmony_ci	struct regmap_field *dp_staffing_en;
708c2ecf20Sopenharmony_ci	struct regmap_field *dp_sp_b_hw_en;
718c2ecf20Sopenharmony_ci};
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_cistruct lpass_dp_metadata_ctl {
748c2ecf20Sopenharmony_ci	struct regmap_field *mute;
758c2ecf20Sopenharmony_ci	struct regmap_field *as_sdp_cc;
768c2ecf20Sopenharmony_ci	struct regmap_field *as_sdp_ct;
778c2ecf20Sopenharmony_ci	struct regmap_field *aif_db4;
788c2ecf20Sopenharmony_ci	struct regmap_field *frequency;
798c2ecf20Sopenharmony_ci	struct regmap_field *mst_index;
808c2ecf20Sopenharmony_ci	struct regmap_field *dptx_index;
818c2ecf20Sopenharmony_ci};
828c2ecf20Sopenharmony_ci
838c2ecf20Sopenharmony_cistruct lpass_hdmi_tx_ctl {
848c2ecf20Sopenharmony_ci	struct regmap_field *soft_reset;
858c2ecf20Sopenharmony_ci	struct regmap_field *force_reset;
868c2ecf20Sopenharmony_ci};
878c2ecf20Sopenharmony_ci
888c2ecf20Sopenharmony_cistruct lpass_hdmitx_dmactl {
898c2ecf20Sopenharmony_ci	struct regmap_field *use_hw_chs;
908c2ecf20Sopenharmony_ci	struct regmap_field *use_hw_usr;
918c2ecf20Sopenharmony_ci	struct regmap_field *hw_chs_sel;
928c2ecf20Sopenharmony_ci	struct regmap_field *hw_usr_sel;
938c2ecf20Sopenharmony_ci};
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_cistruct lpass_vbit_ctrl {
968c2ecf20Sopenharmony_ci		struct regmap_field *replace_vbit;
978c2ecf20Sopenharmony_ci		struct regmap_field *vbit_stream;
988c2ecf20Sopenharmony_ci};
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ciextern const struct snd_soc_dai_ops asoc_qcom_lpass_hdmi_dai_ops;
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_ci#endif /* __LPASS_HDMI_H__ */
103