cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

q6afe.h (9275B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3#ifndef __Q6AFE_H__
      4#define __Q6AFE_H__
      5
      6#include <dt-bindings/sound/qcom,q6afe.h>
      7
      8#define AFE_PORT_MAX		129
      9
     10#define MSM_AFE_PORT_TYPE_RX 0
     11#define MSM_AFE_PORT_TYPE_TX 1
     12#define AFE_MAX_PORTS AFE_PORT_MAX
     13
     14#define Q6AFE_MAX_MI2S_LINES	4
     15
     16#define AFE_MAX_CHAN_COUNT	8
     17#define AFE_PORT_MAX_AUDIO_CHAN_CNT	0x8
     18
     19#define Q6AFE_LPASS_CLK_SRC_INTERNAL 1
     20#define Q6AFE_LPASS_CLK_ROOT_DEFAULT 0
     21
     22#define LPAIF_DIG_CLK	1
     23#define LPAIF_BIT_CLK	2
     24#define LPAIF_OSR_CLK	3
     25
     26/* Clock ID for Primary I2S IBIT */
     27#define Q6AFE_LPASS_CLK_ID_PRI_MI2S_IBIT                          0x100
     28/* Clock ID for Primary I2S EBIT */
     29#define Q6AFE_LPASS_CLK_ID_PRI_MI2S_EBIT                          0x101
     30/* Clock ID for Secondary I2S IBIT */
     31#define Q6AFE_LPASS_CLK_ID_SEC_MI2S_IBIT                          0x102
     32/* Clock ID for Secondary I2S EBIT */
     33#define Q6AFE_LPASS_CLK_ID_SEC_MI2S_EBIT                          0x103
     34/* Clock ID for Tertiary I2S IBIT */
     35#define Q6AFE_LPASS_CLK_ID_TER_MI2S_IBIT                          0x104
     36/* Clock ID for Tertiary I2S EBIT */
     37#define Q6AFE_LPASS_CLK_ID_TER_MI2S_EBIT                          0x105
     38/* Clock ID for Quartnery I2S IBIT */
     39#define Q6AFE_LPASS_CLK_ID_QUAD_MI2S_IBIT                         0x106
     40/* Clock ID for Quartnery I2S EBIT */
     41#define Q6AFE_LPASS_CLK_ID_QUAD_MI2S_EBIT                         0x107
     42/* Clock ID for Speaker I2S IBIT */
     43#define Q6AFE_LPASS_CLK_ID_SPEAKER_I2S_IBIT                       0x108
     44/* Clock ID for Speaker I2S EBIT */
     45#define Q6AFE_LPASS_CLK_ID_SPEAKER_I2S_EBIT                       0x109
     46/* Clock ID for Speaker I2S OSR */
     47#define Q6AFE_LPASS_CLK_ID_SPEAKER_I2S_OSR                        0x10A
     48
     49/* Clock ID for QUINARY  I2S IBIT */
     50#define Q6AFE_LPASS_CLK_ID_QUI_MI2S_IBIT			0x10B
     51/* Clock ID for QUINARY  I2S EBIT */
     52#define Q6AFE_LPASS_CLK_ID_QUI_MI2S_EBIT			0x10C
     53/* Clock ID for SENARY  I2S IBIT */
     54#define Q6AFE_LPASS_CLK_ID_SEN_MI2S_IBIT			0x10D
     55/* Clock ID for SENARY  I2S EBIT */
     56#define Q6AFE_LPASS_CLK_ID_SEN_MI2S_EBIT			0x10E
     57/* Clock ID for INT0 I2S IBIT  */
     58#define Q6AFE_LPASS_CLK_ID_INT0_MI2S_IBIT                       0x10F
     59/* Clock ID for INT1 I2S IBIT  */
     60#define Q6AFE_LPASS_CLK_ID_INT1_MI2S_IBIT                       0x110
     61/* Clock ID for INT2 I2S IBIT  */
     62#define Q6AFE_LPASS_CLK_ID_INT2_MI2S_IBIT                       0x111
     63/* Clock ID for INT3 I2S IBIT  */
     64#define Q6AFE_LPASS_CLK_ID_INT3_MI2S_IBIT                       0x112
     65/* Clock ID for INT4 I2S IBIT  */
     66#define Q6AFE_LPASS_CLK_ID_INT4_MI2S_IBIT                       0x113
     67/* Clock ID for INT5 I2S IBIT  */
     68#define Q6AFE_LPASS_CLK_ID_INT5_MI2S_IBIT                       0x114
     69/* Clock ID for INT6 I2S IBIT  */
     70#define Q6AFE_LPASS_CLK_ID_INT6_MI2S_IBIT                       0x115
     71
     72/* Clock ID for QUINARY MI2S OSR CLK  */
     73#define Q6AFE_LPASS_CLK_ID_QUI_MI2S_OSR                         0x116
     74
     75/* Clock ID for Primary PCM IBIT */
     76#define Q6AFE_LPASS_CLK_ID_PRI_PCM_IBIT                           0x200
     77/* Clock ID for Primary PCM EBIT */
     78#define Q6AFE_LPASS_CLK_ID_PRI_PCM_EBIT                           0x201
     79/* Clock ID for Secondary PCM IBIT */
     80#define Q6AFE_LPASS_CLK_ID_SEC_PCM_IBIT                           0x202
     81/* Clock ID for Secondary PCM EBIT */
     82#define Q6AFE_LPASS_CLK_ID_SEC_PCM_EBIT                           0x203
     83/* Clock ID for Tertiary PCM IBIT */
     84#define Q6AFE_LPASS_CLK_ID_TER_PCM_IBIT                           0x204
     85/* Clock ID for Tertiary PCM EBIT */
     86#define Q6AFE_LPASS_CLK_ID_TER_PCM_EBIT                           0x205
     87/* Clock ID for Quartery PCM IBIT */
     88#define Q6AFE_LPASS_CLK_ID_QUAD_PCM_IBIT                          0x206
     89/* Clock ID for Quartery PCM EBIT */
     90#define Q6AFE_LPASS_CLK_ID_QUAD_PCM_EBIT                          0x207
     91/* Clock ID for Quinary PCM IBIT */
     92#define Q6AFE_LPASS_CLK_ID_QUIN_PCM_IBIT                          0x208
     93/* Clock ID for Quinary PCM EBIT */
     94#define Q6AFE_LPASS_CLK_ID_QUIN_PCM_EBIT                          0x209
     95/* Clock ID for QUINARY PCM OSR  */
     96#define Q6AFE_LPASS_CLK_ID_QUI_PCM_OSR                            0x20A
     97
     98/** Clock ID for Primary TDM IBIT */
     99#define Q6AFE_LPASS_CLK_ID_PRI_TDM_IBIT                           0x200
    100/** Clock ID for Primary TDM EBIT */
    101#define Q6AFE_LPASS_CLK_ID_PRI_TDM_EBIT                           0x201
    102/** Clock ID for Secondary TDM IBIT */
    103#define Q6AFE_LPASS_CLK_ID_SEC_TDM_IBIT                           0x202
    104/** Clock ID for Secondary TDM EBIT */
    105#define Q6AFE_LPASS_CLK_ID_SEC_TDM_EBIT                           0x203
    106/** Clock ID for Tertiary TDM IBIT */
    107#define Q6AFE_LPASS_CLK_ID_TER_TDM_IBIT                           0x204
    108/** Clock ID for Tertiary TDM EBIT */
    109#define Q6AFE_LPASS_CLK_ID_TER_TDM_EBIT                           0x205
    110/** Clock ID for Quartery TDM IBIT */
    111#define Q6AFE_LPASS_CLK_ID_QUAD_TDM_IBIT                          0x206
    112/** Clock ID for Quartery TDM EBIT */
    113#define Q6AFE_LPASS_CLK_ID_QUAD_TDM_EBIT                          0x207
    114/** Clock ID for Quinary TDM IBIT */
    115#define Q6AFE_LPASS_CLK_ID_QUIN_TDM_IBIT                          0x208
    116/** Clock ID for Quinary TDM EBIT */
    117#define Q6AFE_LPASS_CLK_ID_QUIN_TDM_EBIT                          0x209
    118/** Clock ID for Quinary TDM OSR */
    119#define Q6AFE_LPASS_CLK_ID_QUIN_TDM_OSR                           0x20A
    120
    121/* Clock ID for MCLK1 */
    122#define Q6AFE_LPASS_CLK_ID_MCLK_1                                 0x300
    123/* Clock ID for MCLK2 */
    124#define Q6AFE_LPASS_CLK_ID_MCLK_2                                 0x301
    125/* Clock ID for MCLK3 */
    126#define Q6AFE_LPASS_CLK_ID_MCLK_3                                 0x302
    127/* Clock ID for MCLK4 */
    128#define Q6AFE_LPASS_CLK_ID_MCLK_4                                 0x304
    129/* Clock ID for Internal Digital Codec Core */
    130#define Q6AFE_LPASS_CLK_ID_INTERNAL_DIGITAL_CODEC_CORE            0x303
    131/* Clock ID for INT MCLK0 */
    132#define Q6AFE_LPASS_CLK_ID_INT_MCLK_0                             0x305
    133/* Clock ID for INT MCLK1 */
    134#define Q6AFE_LPASS_CLK_ID_INT_MCLK_1                             0x306
    135
    136#define Q6AFE_LPASS_CLK_ID_WSA_CORE_MCLK			0x309
    137#define Q6AFE_LPASS_CLK_ID_WSA_CORE_NPL_MCLK			0x30a
    138#define Q6AFE_LPASS_CLK_ID_TX_CORE_MCLK				0x30c
    139#define Q6AFE_LPASS_CLK_ID_TX_CORE_NPL_MCLK			0x30d
    140#define Q6AFE_LPASS_CLK_ID_RX_CORE_MCLK				0x30e
    141#define Q6AFE_LPASS_CLK_ID_RX_CORE_NPL_MCLK			0x30f
    142#define Q6AFE_LPASS_CLK_ID_VA_CORE_MCLK				0x30b
    143#define Q6AFE_LPASS_CLK_ID_VA_CORE_2X_MCLK			0x310
    144
    145#define Q6AFE_LPASS_CORE_AVTIMER_BLOCK			0x2
    146#define Q6AFE_LPASS_CORE_HW_MACRO_BLOCK			0x3
    147#define Q6AFE_LPASS_CORE_HW_DCODEC_BLOCK		0x4
    148
    149/* Clock attribute for invalid use (reserved for internal usage) */
    150#define Q6AFE_LPASS_CLK_ATTRIBUTE_INVALID		0x0
    151/* Clock attribute for no couple case */
    152#define Q6AFE_LPASS_CLK_ATTRIBUTE_COUPLE_NO		0x1
    153/* Clock attribute for dividend couple case */
    154#define Q6AFE_LPASS_CLK_ATTRIBUTE_COUPLE_DIVIDEND	0x2
    155/* Clock attribute for divisor couple case */
    156#define Q6AFE_LPASS_CLK_ATTRIBUTE_COUPLE_DIVISOR	0x3
    157/* Clock attribute for invert and no couple case */
    158#define Q6AFE_LPASS_CLK_ATTRIBUTE_INVERT_COUPLE_NO	0x4
    159
    160#define Q6AFE_CMAP_INVALID		0xFFFF
    161
    162struct q6afe_hdmi_cfg {
    163	u16                  datatype;
    164	u16                  channel_allocation;
    165	u32                  sample_rate;
    166	u16                  bit_width;
    167};
    168
    169struct q6afe_slim_cfg {
    170	u32	sample_rate;
    171	u16	bit_width;
    172	u16	data_format;
    173	u16	num_channels;
    174	u8	ch_mapping[AFE_MAX_CHAN_COUNT];
    175};
    176
    177struct q6afe_i2s_cfg {
    178	u32	sample_rate;
    179	u16	bit_width;
    180	u16	data_format;
    181	u16	num_channels;
    182	u32	sd_line_mask;
    183	int fmt;
    184};
    185
    186struct q6afe_tdm_cfg {
    187	u16	num_channels;
    188	u32	sample_rate;
    189	u16	bit_width;
    190	u16	data_format;
    191	u16	sync_mode;
    192	u16	sync_src;
    193	u16	nslots_per_frame;
    194	u16	slot_width;
    195	u16	slot_mask;
    196	u32	data_align_type;
    197	u16	ch_mapping[AFE_MAX_CHAN_COUNT];
    198};
    199
    200struct q6afe_cdc_dma_cfg {
    201	u16	sample_rate;
    202	u16	bit_width;
    203	u16	data_format;
    204	u16	num_channels;
    205	u16	active_channels_mask;
    206};
    207
    208
    209struct q6afe_port_config {
    210	struct q6afe_hdmi_cfg hdmi;
    211	struct q6afe_slim_cfg slim;
    212	struct q6afe_i2s_cfg i2s_cfg;
    213	struct q6afe_tdm_cfg tdm;
    214	struct q6afe_cdc_dma_cfg dma_cfg;
    215};
    216
    217struct q6afe_port;
    218
    219struct q6afe_port *q6afe_port_get_from_id(struct device *dev, int id);
    220int q6afe_port_start(struct q6afe_port *port);
    221int q6afe_port_stop(struct q6afe_port *port);
    222void q6afe_port_put(struct q6afe_port *port);
    223int q6afe_get_port_id(int index);
    224void q6afe_hdmi_port_prepare(struct q6afe_port *port,
    225			    struct q6afe_hdmi_cfg *cfg);
    226void q6afe_slim_port_prepare(struct q6afe_port *port,
    227			  struct q6afe_slim_cfg *cfg);
    228int q6afe_i2s_port_prepare(struct q6afe_port *port, struct q6afe_i2s_cfg *cfg);
    229void q6afe_tdm_port_prepare(struct q6afe_port *port, struct q6afe_tdm_cfg *cfg);
    230void q6afe_cdc_dma_port_prepare(struct q6afe_port *port,
    231				struct q6afe_cdc_dma_cfg *cfg);
    232
    233int q6afe_port_set_sysclk(struct q6afe_port *port, int clk_id,
    234			  int clk_src, int clk_root,
    235			  unsigned int freq, int dir);
    236int q6afe_set_lpass_clock(struct device *dev, int clk_id, int attri,
    237			  int clk_root, unsigned int freq);
    238int q6afe_vote_lpass_core_hw(struct device *dev, uint32_t hw_block_id,
    239			     const char *client_name, uint32_t *client_handle);
    240int q6afe_unvote_lpass_core_hw(struct device *dev, uint32_t hw_block_id,
    241			       uint32_t client_handle);
    242#endif /* __Q6AFE_H__ */