M7350/kernel/drivers/video/msm/hdmi_msm.h
2024-09-09 08:52:07 +00:00

136 lines
3.9 KiB
C

/* Copyright (c) 2010-2012, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef __HDMI_MSM_H__
#define __HDMI_MSM_H__
#include <mach/msm_iomap.h>
#include "external_common.h"
/* #define PORT_DEBUG */
#ifdef PORT_DEBUG
const char *hdmi_msm_name(uint32 offset);
void hdmi_outp(uint32 offset, uint32 value);
uint32 hdmi_inp(uint32 offset);
#define HDMI_OUTP_ND(offset, value) outpdw(MSM_HDMI_BASE+(offset), (value))
#define HDMI_OUTP(offset, value) hdmi_outp((offset), (value))
#define HDMI_INP_ND(offset) inpdw(MSM_HDMI_BASE+(offset))
#define HDMI_INP(offset) hdmi_inp((offset))
#else
#define HDMI_OUTP_ND(offset, value) outpdw(MSM_HDMI_BASE+(offset), (value))
#define HDMI_OUTP(offset, value) outpdw(MSM_HDMI_BASE+(offset), (value))
#define HDMI_INP_ND(offset) inpdw(MSM_HDMI_BASE+(offset))
#define HDMI_INP(offset) inpdw(MSM_HDMI_BASE+(offset))
#endif
/*
* Ref. HDMI 1.4a
* Supplement-1 CEC Section 6, 7
*/
struct hdmi_msm_cec_msg {
uint8 sender_id;
uint8 recvr_id;
uint8 opcode;
uint8 operand[15];
uint8 frame_size;
uint8 retransmit;
};
#define QFPROM_BASE ((uint32)hdmi_msm_state->qfprom_io)
#define HDMI_BASE ((uint32)hdmi_msm_state->hdmi_io)
struct hdmi_msm_state_type {
boolean panel_power_on;
boolean hpd_initialized;
#ifdef CONFIG_SUSPEND
boolean pm_suspended;
#endif
boolean full_auth_done;
boolean hpd_during_auth;
struct work_struct hpd_state_work;
struct completion ddc_sw_done;
bool hdcp_enable;
boolean hdcp_activating;
boolean reauth ;
struct work_struct hdcp_reauth_work, hdcp_work;
struct completion hdcp_success_done;
struct timer_list hdcp_timer;
#ifdef CONFIG_FB_MSM_HDMI_MSM_PANEL_CEC_SUPPORT
boolean cec_enabled;
unsigned int first_monitor;
int cec_logical_addr;
struct completion cec_frame_wr_done;
struct timer_list cec_read_timer;
#define CEC_STATUS_WR_ERROR 0x0001
#define CEC_STATUS_WR_DONE 0x0002
#define CEC_STATUS_WR_TMOUT 0x0004
uint32 cec_frame_wr_status;
struct hdmi_msm_cec_msg *cec_queue_start;
struct hdmi_msm_cec_msg *cec_queue_wr;
struct hdmi_msm_cec_msg *cec_queue_rd;
boolean cec_queue_full;
boolean fsm_reset_done;
/*
* CECT 9-5-1
*/
struct completion cec_line_latch_wait;
struct work_struct cec_latch_detect_work;
#define CEC_QUEUE_SIZE 16
#define CEC_QUEUE_END (hdmi_msm_state->cec_queue_start + CEC_QUEUE_SIZE)
#define RETRANSMIT_MAX_NUM 5
#endif /* CONFIG_FB_MSM_HDMI_MSM_PANEL_CEC_SUPPORT */
int irq;
struct msm_hdmi_platform_data *pd;
struct clk *hdmi_app_clk;
struct clk *hdmi_m_pclk;
struct clk *hdmi_s_pclk;
void __iomem *qfprom_io;
void __iomem *hdmi_io;
struct external_common_state_type common;
boolean is_mhl_enabled;
struct completion hpd_event_processed;
};
extern struct hdmi_msm_state_type *hdmi_msm_state;
uint32 hdmi_msm_get_io_base(void);
#ifdef CONFIG_FB_MSM_HDMI_COMMON
void hdmi_msm_set_mode(boolean power_on);
int hdmi_msm_clk(int on);
void hdmi_phy_reset(void);
void hdmi_msm_reset_core(void);
void hdmi_msm_init_phy(int video_format);
void hdmi_msm_powerdown_phy(void);
void hdmi_frame_ctrl_cfg(const struct hdmi_disp_mode_timing_type *timing);
void hdmi_msm_phy_status_poll(void);
#endif
#ifdef CONFIG_FB_MSM_HDMI_MSM_PANEL_CEC_SUPPORT
void hdmi_msm_cec_init(void);
void hdmi_msm_cec_write_logical_addr(int addr);
void hdmi_msm_cec_msg_recv(void);
void hdmi_msm_cec_one_touch_play(void);
void hdmi_msm_cec_msg_send(struct hdmi_msm_cec_msg *msg);
#endif /* CONFIG_FB_MSM_HDMI_MSM_PANEL_CEC_SUPPORT */
void mhl_connect_api(boolean on);
#endif /* __HDMI_MSM_H__ */