blob: 6579debab04e63c26baa83585e24311617b68177 [file] [log] [blame]
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
*/
#ifndef __HDMI_TX_DDC_H__
#define __HDMI_TX_DDC_H__
#include <linux/types.h>
#include <linux/amlogic/media/vout/hdmi_tx/hdmi_tx_module.h>
#define EDID_SLAVE 0x50
#define EDIDSEG_ADR 0x30
#define HDCP_SLAVE 0x3a
#define SCDC_SLAVE 0x54
/* Little-Endian format */
enum scdc_addr {
SINK_VER = 0x01,
SOURCE_VER, /* RW */
UPDATE_0 = 0x10, /* RW */
#define STATUS_UPDATE BIT(0)
#define CED_UPDATE BIT(1)
#define RR_TEST BIT(2)
UPDATE_1, /* RW */
TMDS_CFG = 0x20, /* RW */
SCRAMBLER_ST,
CONFIG_0 = 0x30, /* RW */
STATUS_FLAGS_0 = 0x40,
STATUS_FLAGS_1,
ERR_DET_0_L = 0x50,
ERR_DET_0_H,
ERR_DET_1_L,
ERR_DET_1_H,
ERR_DET_2_L,
ERR_DET_2_H,
ERR_DET_CHKSUM,
TEST_CONFIG_0 = 0xC0, /* RW */
MANUFACT_IEEE_OUI_2 = 0xD0,
MANUFACT_IEEE_OUI_1,
MANUFACT_IEEE_OUI_0,
DEVICE_ID = 0xD3, /* 0xD3 ~ 0xDD */
/* RW 0xDE ~ 0xFF */
MANUFACT_SPECIFIC = 0xDE,
};
enum hdcp_addr {
HDCP14_BKSV = 0x00,
HDCP14_RI_ = 0x08,
HDCP14_PJ_ = 0x0a,
HDCP14_AKSV = 0x10,
HDCP14_AINFO = 0x15,
HDCP14_AN = 0x18,
HDCP14_V_H0 = 0x20,
HDCP14_V_H1 = 0x24,
HDCP14_V_H2 = 0x28,
HDCP14_V_H3 = 0x2C,
HDCP14_V_H4 = 0x30,
HDCP14_BCAPS = 0x40,
HDCP14_BSTATUS = 0x41,
HDCP14_KSV_FIFO = 0x43,
HDCP2_VERSION = 0x50,
HDCP2_WR_MSG = 0x60,
HDCP2_RXSTATUS = 0x70,
HDCP2_RD_MSG = 0x80,
HDCP2_DBG = 0xC0,
};
int hdmitx_ddc_hw_op(enum ddc_op cmd);
void scdc_rd_sink(u8 adr, u8 *val);
void scdc_wr_sink(u8 adr, u8 val);
uint32_t hdcp_rd_hdcp14_ver(void);
uint32_t hdcp_rd_hdcp22_ver(void);
void scdc_config(struct hdmitx_dev *hdev);
void edid_read_head_8bytes(void);
int scdc_status_flags(struct hdmitx_dev *hdev);
void hdmitx_read_edid(unsigned char *rx_edid);
#endif /* __HDMI_TX_SCDC_H__ */