2024-09-09 08:57:42 +00:00
|
|
|
/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved.
|
2024-09-09 08:52:07 +00:00
|
|
|
*
|
|
|
|
* 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 __MDSS_HDMI_TX_H__
|
|
|
|
#define __MDSS_HDMI_TX_H__
|
|
|
|
|
|
|
|
#include <linux/switch.h>
|
|
|
|
#include "mdss_hdmi_util.h"
|
2024-09-09 08:57:42 +00:00
|
|
|
#include "mdss_cec_core.h"
|
|
|
|
|
|
|
|
#define MAX_SWITCH_NAME_SIZE 5
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
enum hdmi_tx_io_type {
|
|
|
|
HDMI_TX_CORE_IO,
|
|
|
|
HDMI_TX_QFPROM_IO,
|
2024-09-09 08:57:42 +00:00
|
|
|
HDMI_TX_HDCP_IO,
|
2024-09-09 08:52:07 +00:00
|
|
|
HDMI_TX_MAX_IO
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_tx_power_module_type {
|
|
|
|
HDMI_TX_HPD_PM,
|
|
|
|
HDMI_TX_DDC_PM,
|
|
|
|
HDMI_TX_CORE_PM,
|
|
|
|
HDMI_TX_CEC_PM,
|
|
|
|
HDMI_TX_MAX_PM
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Data filled from device tree */
|
|
|
|
struct hdmi_tx_platform_data {
|
|
|
|
bool primary;
|
2024-09-09 08:57:42 +00:00
|
|
|
bool cont_splash_enabled;
|
|
|
|
bool cond_power_on;
|
2024-09-09 08:52:07 +00:00
|
|
|
struct dss_io_data io[HDMI_TX_MAX_IO];
|
|
|
|
struct dss_module_power power_data[HDMI_TX_MAX_PM];
|
2024-09-09 08:57:42 +00:00
|
|
|
struct reg_bus_client *reg_bus_clt[HDMI_TX_MAX_PM];
|
|
|
|
/* bitfield representing each module's pin state */
|
|
|
|
u64 pin_states;
|
|
|
|
bool pluggable;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_tx_pinctrl {
|
|
|
|
struct pinctrl *pinctrl;
|
|
|
|
struct pinctrl_state *state_active;
|
|
|
|
struct pinctrl_state *state_hpd_active;
|
|
|
|
struct pinctrl_state *state_cec_active;
|
|
|
|
struct pinctrl_state *state_ddc_active;
|
|
|
|
struct pinctrl_state *state_suspend;
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_scan_info {
|
|
|
|
HDMI_SCAN_DEFAULT,
|
|
|
|
HDMI_SCAN_OVERSCAN,
|
|
|
|
HDMI_SCAN_UNDERSCAN,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_colorimetry_info {
|
|
|
|
HDMI_COLORIMETRY_SMPTE170M,
|
|
|
|
HDMI_COLORIMETRY_ITUR_BT_709,
|
|
|
|
HDMI_COLORIMETRY_ADOBE_RGB,
|
|
|
|
HDMI_COLORIMETRY_ADOBE_YCC601,
|
|
|
|
HDMI_COLORIMETRY_ITUR_BT_2020
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_quantization_range {
|
|
|
|
HDMI_QUANTIZATION_DEFAULT,
|
|
|
|
HDMI_QUANTIZATION_LIMITED_RANGE,
|
|
|
|
HDMI_QUANTIZATION_FULL_RANGE
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_scaling_info {
|
|
|
|
HDMI_SCALING_NONE,
|
|
|
|
HDMI_SCALING_HORZ,
|
|
|
|
HDMI_SCALING_VERT,
|
|
|
|
HDMI_SCALING_HORZ_VERT,
|
|
|
|
};
|
|
|
|
|
|
|
|
enum hdmi_avi_content_type {
|
|
|
|
HDMI_CONTENT_GRAPHICS,
|
|
|
|
HDMI_CONTENT_PHOTO,
|
|
|
|
HDMI_CONTENT_CINEMA,
|
|
|
|
HDMI_CONTENT_GAME,
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_avi_iframe_bar_info {
|
|
|
|
bool vert_binfo_present;
|
|
|
|
bool horz_binfo_present;
|
|
|
|
u32 end_of_top_bar;
|
|
|
|
u32 start_of_bottom_bar;
|
|
|
|
u32 end_of_left_bar;
|
|
|
|
u32 start_of_right_bar;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_avi_infoframe_config {
|
|
|
|
u32 pixel_format;
|
|
|
|
u32 scan_info;
|
|
|
|
bool act_fmt_info_present;
|
|
|
|
u32 colorimetry_info;
|
|
|
|
u32 ext_colorimetry_info;
|
|
|
|
u32 rgb_quantization_range;
|
|
|
|
u32 yuv_quantization_range;
|
|
|
|
u32 scaling_info;
|
|
|
|
bool is_it_content;
|
|
|
|
u8 content_type;
|
|
|
|
u8 pixel_rpt_factor;
|
|
|
|
struct hdmi_avi_iframe_bar_info bar_info;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_video_config {
|
|
|
|
u32 vic;
|
|
|
|
struct msm_hdmi_mode_timing_info timing;
|
|
|
|
struct hdmi_avi_infoframe_config avi_iframe;
|
2024-09-09 08:52:07 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct hdmi_tx_ctrl {
|
|
|
|
struct platform_device *pdev;
|
2024-09-09 08:57:42 +00:00
|
|
|
u32 hdmi_tx_ver;
|
|
|
|
u32 max_pclk_khz;
|
2024-09-09 08:52:07 +00:00
|
|
|
struct hdmi_tx_platform_data pdata;
|
|
|
|
struct mdss_panel_data panel_data;
|
2024-09-09 08:57:42 +00:00
|
|
|
struct mdss_util_intf *mdss_util;
|
|
|
|
|
2024-09-09 08:52:07 +00:00
|
|
|
|
2024-09-09 08:57:42 +00:00
|
|
|
struct hdmi_tx_pinctrl pin_res;
|
|
|
|
struct msm_hdmi_audio_setup_params audio_data;
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
struct mutex mutex;
|
2024-09-09 08:57:42 +00:00
|
|
|
struct mutex lut_lock;
|
|
|
|
struct mutex power_mutex;
|
|
|
|
struct mutex cable_notify_mutex;
|
|
|
|
struct list_head cable_notify_handlers;
|
2024-09-09 08:52:07 +00:00
|
|
|
struct kobject *kobj;
|
|
|
|
struct switch_dev sdev;
|
|
|
|
struct switch_dev audio_sdev;
|
|
|
|
struct workqueue_struct *workq;
|
2024-09-09 08:57:42 +00:00
|
|
|
spinlock_t hpd_state_lock;
|
2024-09-09 08:52:07 +00:00
|
|
|
|
2024-09-09 08:57:42 +00:00
|
|
|
struct hdmi_video_config vid_cfg;
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
u32 panel_power_on;
|
|
|
|
u32 panel_suspend;
|
|
|
|
|
|
|
|
u32 hpd_state;
|
|
|
|
u32 hpd_off_pending;
|
|
|
|
u32 hpd_feature_on;
|
|
|
|
u32 hpd_initialized;
|
2024-09-09 08:57:42 +00:00
|
|
|
u32 vote_hdmi_core_on;
|
2024-09-09 08:52:07 +00:00
|
|
|
u8 timing_gen_on;
|
|
|
|
u8 mhl_hpd_on;
|
2024-09-09 08:57:42 +00:00
|
|
|
u8 hdcp_status;
|
|
|
|
|
|
|
|
struct hdmi_util_ds_data ds_data;
|
|
|
|
struct completion hpd_int_done;
|
|
|
|
struct completion hpd_off_done;
|
2024-09-09 08:52:07 +00:00
|
|
|
struct work_struct hpd_int_work;
|
2024-09-09 08:57:42 +00:00
|
|
|
struct delayed_work hdcp_cb_work;
|
2024-09-09 08:52:07 +00:00
|
|
|
|
2024-09-09 08:57:42 +00:00
|
|
|
struct work_struct cable_notify_work;
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
bool hdcp_feature_on;
|
2024-09-09 08:57:42 +00:00
|
|
|
bool hpd_disabled;
|
|
|
|
bool ds_registered;
|
|
|
|
bool scrambler_enabled;
|
|
|
|
u32 hdcp14_present;
|
|
|
|
bool hdcp1_use_sw_keys;
|
|
|
|
bool audio_ack_enabled;
|
|
|
|
atomic_t audio_ack_pending;
|
|
|
|
bool hdcp14_sw_keys;
|
|
|
|
bool auth_state;
|
|
|
|
bool custom_edid;
|
|
|
|
u32 enc_lvl;
|
|
|
|
|
|
|
|
u8 spd_vendor_name[9];
|
|
|
|
u8 spd_product_description[17];
|
2024-09-09 08:52:07 +00:00
|
|
|
|
|
|
|
struct hdmi_tx_ddc_ctrl ddc_ctrl;
|
|
|
|
|
2024-09-09 08:57:42 +00:00
|
|
|
void (*hdmi_tx_hpd_done) (void *data);
|
|
|
|
void *downstream_data;
|
|
|
|
|
2024-09-09 08:52:07 +00:00
|
|
|
void *feature_data[HDMI_TX_FEAT_MAX];
|
2024-09-09 08:57:42 +00:00
|
|
|
struct hdmi_hdcp_ops *hdcp_ops;
|
|
|
|
void *hdcp_data;
|
|
|
|
bool hdcp22_present;
|
|
|
|
|
|
|
|
u8 *edid_buf;
|
|
|
|
u32 edid_buf_size;
|
|
|
|
u32 s3d_mode;
|
|
|
|
|
|
|
|
struct cec_ops hdmi_cec_ops;
|
|
|
|
struct cec_cbs hdmi_cec_cbs;
|
|
|
|
|
|
|
|
char disp_switch_name[MAX_SWITCH_NAME_SIZE];
|
2024-09-09 08:52:07 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif /* __MDSS_HDMI_TX_H__ */
|