diff options
Diffstat (limited to 'drivers/video/fbdev/msm/mdss_dp.h')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_dp.h | 69 |
1 files changed, 59 insertions, 10 deletions
diff --git a/drivers/video/fbdev/msm/mdss_dp.h b/drivers/video/fbdev/msm/mdss_dp.h index 8d5af4dc5bf3..a5fb91557f20 100644 --- a/drivers/video/fbdev/msm/mdss_dp.h +++ b/drivers/video/fbdev/msm/mdss_dp.h @@ -70,8 +70,6 @@ #define EDP_INTR_ACK_SHIFT 1 #define EDP_INTR_MASK_SHIFT 2 -#define EDP_MAX_LANE 4 - /* isr */ #define EDP_INTR_HPD BIT(0) #define EDP_INTR_AUX_I2C_DONE BIT(3) @@ -105,7 +103,7 @@ EDP_INTR_FRAME_END | EDP_INTR_CRC_UPDATED) #define EDP_INTR_MASK2 (EDP_INTR_STATUS2 << 2) -#define EV_EVENT_STR(x) #x +#define DP_ENUM_STR(x) #x struct edp_buf { char *start; /* buffer start addr */ @@ -256,6 +254,13 @@ struct dpcd_link_status { char req_pre_emphasis[4]; }; +struct dpcd_test_request { + u32 test_requested; + u32 test_link_rate; + u32 test_lane_count; + u32 response; +}; + struct display_timing_desc { u32 pclk; u32 h_addressable; /* addressable + boder = active */ @@ -401,6 +406,7 @@ struct mdss_dp_drv_pdata { struct completion idle_comp; struct completion video_comp; struct completion audio_comp; + struct completion irq_comp; struct mutex aux_mutex; struct mutex train_mutex; struct mutex pd_msg_mutex; @@ -426,6 +432,8 @@ struct mdss_dp_drv_pdata { u32 bpp; struct dp_statistic dp_stat; bool wait_for_audio_comp; + bool hpd_irq_on; + bool hpd_irq_toggled; /* event */ struct workqueue_struct *workq; @@ -443,8 +451,46 @@ struct mdss_dp_drv_pdata { void *hdcp_data; struct hdcp_ops *hdcp_ops; + struct dpcd_test_request test_data; +}; + +enum dp_lane_count { + DP_LANE_COUNT_1 = 1, + DP_LANE_COUNT_2 = 2, + DP_LANE_COUNT_4 = 4, +}; + +enum test_response { + TEST_NACK = 0x0, + TEST_ACK = 0x1, +}; + +static inline char *mdss_dp_get_test_response(u32 test_response) +{ + switch (test_response) { + case TEST_NACK: return DP_ENUM_STR(TEST_NACK); + case TEST_ACK: return DP_ENUM_STR(TEST_ACK); + default: return "unknown"; + } +} + +enum test_type { + UNKNOWN_TEST = 0, + TEST_LINK_TRAINING = BIT(0), + TEST_PATTERN = BIT(1), + TEST_EDID_READ = BIT(2), }; +static inline char *mdss_dp_get_test_name(u32 test_requested) +{ + switch (test_requested) { + case TEST_LINK_TRAINING: return DP_ENUM_STR(TEST_LINK_TRAINING); + case TEST_PATTERN: return DP_ENUM_STR(TEST_PATTERN); + case TEST_EDID_READ: return DP_ENUM_STR(TEST_EDID_READ); + default: return "unknown"; + } +} + static inline const char *__mdss_dp_pm_name(enum dp_pm_type module) { switch (module) { @@ -470,19 +516,19 @@ static inline char *mdss_dp_ev_event_to_string(int event) { switch (event) { case EV_EDP_AUX_SETUP: - return EV_EVENT_STR(EV_EDP_AUX_SETUP); + return DP_ENUM_STR(EV_EDP_AUX_SETUP); case EV_EDID_READ: - return EV_EVENT_STR(EV_EDID_READ); + return DP_ENUM_STR(EV_EDID_READ); case EV_DPCD_CAP_READ: - return EV_EVENT_STR(EV_DPCD_CAP_READ); + return DP_ENUM_STR(EV_DPCD_CAP_READ); case EV_DPCD_STATUS_READ: - return EV_EVENT_STR(EV_DPCD_STATUS_READ); + return DP_ENUM_STR(EV_DPCD_STATUS_READ); case EV_LINK_TRAIN: - return EV_EVENT_STR(EV_LINK_TRAIN); + return DP_ENUM_STR(EV_LINK_TRAIN); case EV_IDLE_PATTERNS_SENT: - return EV_EVENT_STR(EV_IDLE_PATTERNS_SENT); + return DP_ENUM_STR(EV_IDLE_PATTERNS_SENT); case EV_VIDEO_READY: - return EV_EVENT_STR(EV_VIDEO_READY); + return DP_ENUM_STR(EV_VIDEO_READY); default: return "unknown"; } @@ -492,6 +538,7 @@ void mdss_dp_phy_initialize(struct mdss_dp_drv_pdata *dp); void mdss_dp_dpcd_cap_read(struct mdss_dp_drv_pdata *dp); int mdss_dp_dpcd_status_read(struct mdss_dp_drv_pdata *dp); +void mdss_dp_aux_parse_test_request(struct mdss_dp_drv_pdata *dp); int mdss_dp_edid_read(struct mdss_dp_drv_pdata *dp); int mdss_dp_link_train(struct mdss_dp_drv_pdata *dp); void dp_aux_i2c_handler(struct mdss_dp_drv_pdata *dp, u32 isr); @@ -503,5 +550,7 @@ void mdss_dp_sink_power_down(struct mdss_dp_drv_pdata *ep); void mdss_dp_lane_power_ctrl(struct mdss_dp_drv_pdata *ep, int up); void mdss_dp_config_ctrl(struct mdss_dp_drv_pdata *ep); char mdss_dp_gen_link_clk(struct mdss_panel_info *pinfo, char lane_cnt); +int mdss_dp_aux_set_sink_power_state(struct mdss_dp_drv_pdata *ep, char state); +void mdss_dp_aux_send_test_response(struct mdss_dp_drv_pdata *ep); #endif /* MDSS_DP_H */ |
