
Add support for external mclk configuration based on input sample clock. Change-Id: I90b40636e6c3877c5ab9d2c2a60c4d61a83b149e Signed-off-by: Nirav Khatri <khatri@codeaurora.org>
160 linhas
5.7 KiB
C
160 linhas
5.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __EP92_H__
|
|
#define __EP92_H__
|
|
|
|
/* EP92 register addresses */
|
|
/* BI = Basic Info */
|
|
#define EP92_BI_VENDOR_ID_0 0x00
|
|
#define EP92_BI_VENDOR_ID_1 0x01
|
|
#define EP92_BI_DEVICE_ID_0 0x02
|
|
#define EP92_BI_DEVICE_ID_1 0x03
|
|
#define EP92_BI_VERSION_NUM 0x04
|
|
#define EP92_BI_VERSION_YEAR 0x05
|
|
#define EP92_BI_VERSION_MONTH 0x06
|
|
#define EP92_BI_VERSION_DATE 0x07
|
|
#define EP92_BI_GENERAL_INFO_0 0x08
|
|
#define EP92_BI_GENERAL_INFO_1 0x09
|
|
#define EP92_BI_GENERAL_INFO_2 0x0A
|
|
#define EP92_BI_GENERAL_INFO_3 0x0B
|
|
#define EP92_BI_GENERAL_INFO_4 0x0C
|
|
#define EP92_BI_GENERAL_INFO_5 0x0D
|
|
#define EP92_BI_GENERAL_INFO_6 0x0E
|
|
|
|
#define EP92_ISP_MODE_ENTER_ISP 0x0F
|
|
|
|
#define EP92_GENERAL_CONTROL_0 0x10
|
|
#define EP92_GENERAL_CONTROL_1 0x11
|
|
#define EP92_GENERAL_CONTROL_2 0x12
|
|
#define EP92_GENERAL_CONTROL_3 0x13
|
|
#define EP92_GENERAL_CONTROL_4 0x14
|
|
|
|
#define EP92_CEC_EVENT_CODE 0x15
|
|
#define EP92_CEC_EVENT_PARAM_1 0x16
|
|
#define EP92_CEC_EVENT_PARAM_2 0x17
|
|
#define EP92_CEC_EVENT_PARAM_3 0x18
|
|
#define EP92_CEC_EVENT_PARAM_4 0x19
|
|
/* RESERVED 0x1A */
|
|
/* ... ... */
|
|
/* RESERVED 0x1F */
|
|
#define EP92_AUDIO_INFO_SYSTEM_STATUS_0 0x20
|
|
#define EP92_AUDIO_INFO_SYSTEM_STATUS_1 0x21
|
|
#define EP92_AUDIO_INFO_AUDIO_STATUS 0x22
|
|
#define EP92_AUDIO_INFO_CHANNEL_STATUS_0 0x23
|
|
#define EP92_AUDIO_INFO_CHANNEL_STATUS_1 0x24
|
|
#define EP92_AUDIO_INFO_CHANNEL_STATUS_2 0x25
|
|
#define EP92_AUDIO_INFO_CHANNEL_STATUS_3 0x26
|
|
#define EP92_AUDIO_INFO_CHANNEL_STATUS_4 0x27
|
|
#define EP92_AUDIO_INFO_ADO_INFO_FRAME_0 0x28
|
|
#define EP92_AUDIO_INFO_ADO_INFO_FRAME_1 0x29
|
|
#define EP92_AUDIO_INFO_ADO_INFO_FRAME_2 0x2A
|
|
#define EP92_AUDIO_INFO_ADO_INFO_FRAME_3 0x2B
|
|
#define EP92_AUDIO_INFO_ADO_INFO_FRAME_4 0x2C
|
|
#define EP92_AUDIO_INFO_ADO_INFO_FRAME_5 0x2D
|
|
|
|
#define EP92_OTHER_PACKETS_HDMI_VS_0 0x2E
|
|
#define EP92_OTHER_PACKETS_HDMI_VS_1 0x2F
|
|
#define EP92_OTHER_PACKETS_ACP_PACKET 0x30
|
|
#define EP92_OTHER_PACKETS_AVI_INFO_FRAME_0 0x31
|
|
#define EP92_OTHER_PACKETS_AVI_INFO_FRAME_1 0x32
|
|
#define EP92_OTHER_PACKETS_AVI_INFO_FRAME_2 0x33
|
|
#define EP92_OTHER_PACKETS_AVI_INFO_FRAME_3 0x34
|
|
#define EP92_OTHER_PACKETS_AVI_INFO_FRAME_4 0x35
|
|
#define EP92_OTHER_PACKETS_GC_PACKET_0 0x36
|
|
#define EP92_OTHER_PACKETS_GC_PACKET_1 0x37
|
|
#define EP92_OTHER_PACKETS_GC_PACKET_2 0x38
|
|
|
|
#define EP92_MAX_REGISTER_ADDR EP92_OTHER_PACKETS_GC_PACKET_2
|
|
|
|
/* shift/masks for register bits
|
|
* GI = General Info
|
|
* GC = General Control
|
|
* AI = Audio Info
|
|
*/
|
|
#define EP92_GI_ADO_CHF_MASK 0x01
|
|
#define EP92_GI_CEC_ECF_MASK 0x02
|
|
#define EP92_GI_TX_HOT_PLUG_SHIFT 7
|
|
#define EP92_GI_TX_HOT_PLUG_MASK 0x80
|
|
#define EP92_GI_VIDEO_LATENCY_SHIFT 0
|
|
#define EP92_GI_VIDEO_LATENCY_MASK 0xff
|
|
|
|
#define EP92_GC_POWER_SHIFT 7
|
|
#define EP92_GC_POWER_MASK 0x80
|
|
#define EP92_GC_AUDIO_PATH_SHIFT 5
|
|
#define EP92_GC_AUDIO_PATH_MASK 0x20
|
|
#define EP92_GC_CEC_MUTE_SHIFT 1
|
|
#define EP92_GC_CEC_MUTE_MASK 0x02
|
|
#define EP92_GC_ARC_EN_SHIFT 0
|
|
#define EP92_GC_ARC_EN_MASK 0x01
|
|
#define EP92_GC_ARC_DIS_SHIFT 6
|
|
#define EP92_GC_ARC_DIS_MASK 0x40
|
|
#define EP92_GC_RX_SEL_SHIFT 0
|
|
#define EP92_GC_RX_SEL_MASK 0x07
|
|
#define EP92_GC_CEC_VOLUME_SHIFT 0
|
|
#define EP92_GC_CEC_VOLUME_MASK 0xff
|
|
#define EP92_GC_LINK_ON0_SHIFT 0
|
|
#define EP92_GC_LINK_ON0_MASK 0x01
|
|
#define EP92_GC_LINK_ON1_SHIFT 1
|
|
#define EP92_GC_LINK_ON1_MASK 0x02
|
|
#define EP92_GC_LINK_ON2_SHIFT 2
|
|
#define EP92_GC_LINK_ON2_MASK 0x04
|
|
|
|
#define EP92_AI_MCLK_ON_SHIFT 6
|
|
#define EP92_AI_MCLK_ON_MASK 0x40
|
|
#define EP92_AI_AVMUTE_SHIFT 5
|
|
#define EP92_AI_AVMUTE_MASK 0x20
|
|
#define EP92_AI_LAYOUT_SHIFT 0
|
|
#define EP92_AI_LAYOUT_MASK 0x01
|
|
#define EP92_AI_HBR_ADO_SHIFT 5
|
|
#define EP92_AI_HBR_ADO_MASK 0x20
|
|
#define EP92_AI_STD_ADO_SHIFT 3
|
|
#define EP92_AI_STD_ADO_MASK 0x08
|
|
#define EP92_AI_RATE_MASK 0x07
|
|
#define EP92_AI_NPCM_MASK 0x02
|
|
#define EP92_AI_PREEMPH_SHIFT 3
|
|
#define EP92_AI_PREEMPH_MASK 0x38
|
|
#define EP92_AI_CH_COUNT_MASK 0x07
|
|
#define EP92_AI_CH_ALLOC_MASK 0xff
|
|
#define EP92_AI_DSD_ADO_SHIFT 4
|
|
#define EP92_AI_DSD_ADO_MASK 0x10
|
|
#define EP92_AI_DSD_RATE_SHIFT 4
|
|
#define EP92_AI_DSD_RATE_MASK 0x30
|
|
|
|
#define EP92_2CHOICE_MASK 1
|
|
#define EP92_GC_CEC_VOLUME_MIN 0
|
|
#define EP92_GC_CEC_VOLUME_MAX 100
|
|
#define EP92_AI_RATE_MIN 0
|
|
#define EP92_AI_RATE_MAX 768000
|
|
#define EP92_AI_CH_COUNT_MIN 0
|
|
#define EP92_AI_CH_COUNT_MAX 8
|
|
#define EP92_AI_CH_ALLOC_MIN 0
|
|
#define EP92_AI_CH_ALLOC_MAX 0xff
|
|
|
|
#define EP92_STATUS_NO_SIGNAL 0
|
|
#define EP92_STATUS_AUDIO_ACTIVE 1
|
|
|
|
/* kcontrol storage indices */
|
|
enum {
|
|
EP92_KCTL_POWER = 0,
|
|
EP92_KCTL_AUDIO_PATH,
|
|
EP92_KCTL_CEC_MUTE,
|
|
EP92_KCTL_ARC_EN,
|
|
EP92_KCTL_RX_SEL,
|
|
EP92_KCTL_CEC_VOLUME,
|
|
EP92_KCTL_STATE,
|
|
EP92_KCTL_AVMUTE,
|
|
EP92_KCTL_LAYOUT,
|
|
EP92_KCTL_MODE,
|
|
EP92_KCTL_RATE,
|
|
EP92_KCTL_CH_COUNT,
|
|
EP92_KCTL_CH_ALLOC,
|
|
EP92_KCTL_MAX
|
|
};
|
|
|
|
int ep92_set_ext_mclk(struct snd_soc_codec *codec, uint32_t mclk_freq);
|
|
|
|
#endif /* __EP92_H__ */
|