Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
  4 */
  5
  6#ifndef _DP_CATALOG_H_
  7#define _DP_CATALOG_H_
  8
  9#include <drm/drm_modes.h>
 10
 11#include "dp_utils.h"
 12#include "disp/msm_disp_snapshot.h"
 13
 14/* interrupts */
 15#define DP_INTR_HPD		BIT(0)
 16#define DP_INTR_AUX_XFER_DONE	BIT(3)
 17#define DP_INTR_WRONG_ADDR	BIT(6)
 18#define DP_INTR_TIMEOUT		BIT(9)
 19#define DP_INTR_NACK_DEFER	BIT(12)
 20#define DP_INTR_WRONG_DATA_CNT	BIT(15)
 21#define DP_INTR_I2C_NACK	BIT(18)
 22#define DP_INTR_I2C_DEFER	BIT(21)
 23#define DP_INTR_PLL_UNLOCKED	BIT(24)
 24#define DP_INTR_AUX_ERROR	BIT(27)
 25
 26#define DP_INTR_READY_FOR_VIDEO		BIT(0)
 27#define DP_INTR_IDLE_PATTERN_SENT	BIT(3)
 28#define DP_INTR_FRAME_END		BIT(6)
 29#define DP_INTR_CRC_UPDATED		BIT(9)
 30
 31#define DP_HW_VERSION_1_0	0x10000000
 32#define DP_HW_VERSION_1_2	0x10020000
 33
 34enum msm_dp_catalog_audio_sdp_type {
 35	DP_AUDIO_SDP_STREAM,
 36	DP_AUDIO_SDP_TIMESTAMP,
 37	DP_AUDIO_SDP_INFOFRAME,
 38	DP_AUDIO_SDP_COPYMANAGEMENT,
 39	DP_AUDIO_SDP_ISRC,
 40	DP_AUDIO_SDP_MAX,
 41};
 42
 43enum msm_dp_catalog_audio_header_type {
 44	DP_AUDIO_SDP_HEADER_1,
 45	DP_AUDIO_SDP_HEADER_2,
 46	DP_AUDIO_SDP_HEADER_3,
 47	DP_AUDIO_SDP_HEADER_MAX,
 48};
 49
 50struct msm_dp_catalog {
 51	bool wide_bus_en;
 52};
 53
 54/* Debug module */
 55void msm_dp_catalog_snapshot(struct msm_dp_catalog *msm_dp_catalog, struct msm_disp_state *disp_state);
 56
 57/* AUX APIs */
 58u32 msm_dp_catalog_aux_read_data(struct msm_dp_catalog *msm_dp_catalog);
 59int msm_dp_catalog_aux_write_data(struct msm_dp_catalog *msm_dp_catalog, u32 data);
 60int msm_dp_catalog_aux_write_trans(struct msm_dp_catalog *msm_dp_catalog, u32 data);
 61int msm_dp_catalog_aux_clear_trans(struct msm_dp_catalog *msm_dp_catalog, bool read);
 62int msm_dp_catalog_aux_clear_hw_interrupts(struct msm_dp_catalog *msm_dp_catalog);
 63void msm_dp_catalog_aux_reset(struct msm_dp_catalog *msm_dp_catalog);
 64void msm_dp_catalog_aux_enable(struct msm_dp_catalog *msm_dp_catalog, bool enable);
 65int msm_dp_catalog_aux_wait_for_hpd_connect_state(struct msm_dp_catalog *msm_dp_catalog,
 66					      unsigned long wait_us);
 67u32 msm_dp_catalog_aux_get_irq(struct msm_dp_catalog *msm_dp_catalog);
 68
 69/* DP Controller APIs */
 70void msm_dp_catalog_ctrl_state_ctrl(struct msm_dp_catalog *msm_dp_catalog, u32 state);
 71void msm_dp_catalog_ctrl_config_ctrl(struct msm_dp_catalog *msm_dp_catalog, u32 config);
 72void msm_dp_catalog_ctrl_lane_mapping(struct msm_dp_catalog *msm_dp_catalog);
 73void msm_dp_catalog_ctrl_mainlink_ctrl(struct msm_dp_catalog *msm_dp_catalog, bool enable);
 74void msm_dp_catalog_ctrl_psr_mainlink_enable(struct msm_dp_catalog *msm_dp_catalog, bool enable);
 75void msm_dp_catalog_setup_peripheral_flush(struct msm_dp_catalog *msm_dp_catalog);
 76void msm_dp_catalog_ctrl_config_misc(struct msm_dp_catalog *msm_dp_catalog, u32 cc, u32 tb);
 77void msm_dp_catalog_ctrl_config_msa(struct msm_dp_catalog *msm_dp_catalog, u32 rate,
 78				u32 stream_rate_khz, bool is_ycbcr_420);
 79int msm_dp_catalog_ctrl_set_pattern_state_bit(struct msm_dp_catalog *msm_dp_catalog, u32 pattern);
 80u32 msm_dp_catalog_hw_revision(const struct msm_dp_catalog *msm_dp_catalog);
 81void msm_dp_catalog_ctrl_reset(struct msm_dp_catalog *msm_dp_catalog);
 82bool msm_dp_catalog_ctrl_mainlink_ready(struct msm_dp_catalog *msm_dp_catalog);
 83void msm_dp_catalog_ctrl_enable_irq(struct msm_dp_catalog *msm_dp_catalog, bool enable);
 84void msm_dp_catalog_hpd_config_intr(struct msm_dp_catalog *msm_dp_catalog,
 85			u32 intr_mask, bool en);
 86void msm_dp_catalog_ctrl_hpd_enable(struct msm_dp_catalog *msm_dp_catalog);
 87void msm_dp_catalog_ctrl_hpd_disable(struct msm_dp_catalog *msm_dp_catalog);
 88void msm_dp_catalog_ctrl_config_psr(struct msm_dp_catalog *msm_dp_catalog);
 89void msm_dp_catalog_ctrl_set_psr(struct msm_dp_catalog *msm_dp_catalog, bool enter);
 90u32 msm_dp_catalog_link_is_connected(struct msm_dp_catalog *msm_dp_catalog);
 91u32 msm_dp_catalog_hpd_get_intr_status(struct msm_dp_catalog *msm_dp_catalog);
 92void msm_dp_catalog_ctrl_phy_reset(struct msm_dp_catalog *msm_dp_catalog);
 93int msm_dp_catalog_ctrl_get_interrupt(struct msm_dp_catalog *msm_dp_catalog);
 94u32 msm_dp_catalog_ctrl_read_psr_interrupt_status(struct msm_dp_catalog *msm_dp_catalog);
 95void msm_dp_catalog_ctrl_update_transfer_unit(struct msm_dp_catalog *msm_dp_catalog,
 96				u32 msm_dp_tu, u32 valid_boundary,
 97				u32 valid_boundary2);
 98void msm_dp_catalog_ctrl_send_phy_pattern(struct msm_dp_catalog *msm_dp_catalog,
 99				u32 pattern);
100u32 msm_dp_catalog_ctrl_read_phy_pattern(struct msm_dp_catalog *msm_dp_catalog);
101
102/* DP Panel APIs */
103int msm_dp_catalog_panel_timing_cfg(struct msm_dp_catalog *msm_dp_catalog, u32 total,
104				u32 sync_start, u32 width_blanking, u32 msm_dp_active);
105void msm_dp_catalog_panel_enable_vsc_sdp(struct msm_dp_catalog *msm_dp_catalog, struct dp_sdp *vsc_sdp);
106void msm_dp_catalog_panel_disable_vsc_sdp(struct msm_dp_catalog *msm_dp_catalog);
107void msm_dp_catalog_dump_regs(struct msm_dp_catalog *msm_dp_catalog);
108void msm_dp_catalog_panel_tpg_enable(struct msm_dp_catalog *msm_dp_catalog,
109				struct drm_display_mode *drm_mode);
110void msm_dp_catalog_panel_tpg_disable(struct msm_dp_catalog *msm_dp_catalog);
111
112struct msm_dp_catalog *msm_dp_catalog_get(struct device *dev);
113
114/* DP Audio APIs */
115u32 msm_dp_catalog_audio_get_header(struct msm_dp_catalog *msm_dp_catalog,
116				enum msm_dp_catalog_audio_sdp_type sdp,
117				enum msm_dp_catalog_audio_header_type header);
118void msm_dp_catalog_audio_set_header(struct msm_dp_catalog *msm_dp_catalog,
119				 enum msm_dp_catalog_audio_sdp_type sdp,
120				 enum msm_dp_catalog_audio_header_type header,
121				 u32 data);
122void msm_dp_catalog_audio_config_acr(struct msm_dp_catalog *catalog, u32 select);
123void msm_dp_catalog_audio_enable(struct msm_dp_catalog *catalog, bool enable);
124void msm_dp_catalog_audio_config_sdp(struct msm_dp_catalog *catalog);
125void msm_dp_catalog_audio_init(struct msm_dp_catalog *catalog);
126void msm_dp_catalog_audio_sfe_level(struct msm_dp_catalog *catalog, u32 safe_to_exit_level);
127
128#endif /* _DP_CATALOG_H_ */