video/exynos: dp: Add reporter to log dp errors
[cascardo/linux.git] / drivers / video / exynos / exynos_dp_core.h
index 90ceaca..f31593d 100644 (file)
 #ifndef _EXYNOS_DP_CORE_H
 #define _EXYNOS_DP_CORE_H
 
+enum dp_irq_type {
+       DP_IRQ_TYPE_HP_CABLE_IN,
+       DP_IRQ_TYPE_HP_CABLE_OUT,
+       DP_IRQ_TYPE_HP_CHANGE,
+       DP_IRQ_TYPE_UNKNOWN,
+};
+
 struct link_train {
        int eq_loop;
        int cr_loop[4];
@@ -32,7 +39,10 @@ struct exynos_dp_device {
        void __iomem            *reg_base;
 
        struct video_info       *video_info;
+       enum link_training_type training_type;
        struct link_train       link_train;
+       struct work_struct      hotplug_work;
+       struct delayed_work     error_reporter_work;
 };
 
 /* exynos_dp_reg.c */
@@ -41,14 +51,15 @@ void exynos_dp_stop_video(struct exynos_dp_device *dp);
 void exynos_dp_lane_swap(struct exynos_dp_device *dp, bool enable);
 void exynos_dp_init_interrupt(struct exynos_dp_device *dp);
 void exynos_dp_reset(struct exynos_dp_device *dp);
-void exynos_dp_config_interrupt(struct exynos_dp_device *dp);
-u32 exynos_dp_get_pll_lock_status(struct exynos_dp_device *dp);
+enum pll_status exynos_dp_get_pll_lock_status(struct exynos_dp_device *dp);
 void exynos_dp_set_pll_power_down(struct exynos_dp_device *dp, bool enable);
 void exynos_dp_set_analog_power_down(struct exynos_dp_device *dp,
                                enum analog_power_block block,
                                bool enable);
 void exynos_dp_init_analog_func(struct exynos_dp_device *dp);
 void exynos_dp_init_hpd(struct exynos_dp_device *dp);
+enum dp_irq_type exynos_dp_get_irq_type(struct exynos_dp_device *dp);
+void exynos_dp_clear_hotplug_interrupts(struct exynos_dp_device *dp);
 void exynos_dp_reset_aux(struct exynos_dp_device *dp);
 void exynos_dp_init_aux(struct exynos_dp_device *dp);
 int exynos_dp_get_plug_in_status(struct exynos_dp_device *dp);
@@ -110,11 +121,7 @@ u32 exynos_dp_get_lane3_link_training(struct exynos_dp_device *dp);
 void exynos_dp_reset_macro(struct exynos_dp_device *dp);
 int exynos_dp_init_video(struct exynos_dp_device *dp);
 
-void exynos_dp_set_video_color_format(struct exynos_dp_device *dp,
-                               u32 color_depth,
-                               u32 color_space,
-                               u32 dynamic_range,
-                               u32 ycbcr_coeff);
+void exynos_dp_set_video_color_format(struct exynos_dp_device *dp);
 int exynos_dp_is_slave_video_stream_clock_on(struct exynos_dp_device *dp);
 void exynos_dp_set_video_cr_mn(struct exynos_dp_device *dp,
                        enum clock_recovery_m_value_type type,
@@ -124,11 +131,12 @@ void exynos_dp_set_video_timing_mode(struct exynos_dp_device *dp, u32 type);
 void exynos_dp_enable_video_master(struct exynos_dp_device *dp, bool enable);
 void exynos_dp_start_video(struct exynos_dp_device *dp);
 int exynos_dp_is_video_stream_on(struct exynos_dp_device *dp);
-void exynos_dp_config_video_slave_mode(struct exynos_dp_device *dp,
-                       struct video_info *video_info);
+void exynos_dp_config_video_slave_mode(struct exynos_dp_device *dp);
 void exynos_dp_enable_scrambling(struct exynos_dp_device *dp);
 void exynos_dp_disable_scrambling(struct exynos_dp_device *dp);
 
+int exynos_dp_enable_hw_link_training(struct exynos_dp_device *dp);
+
 /* I2C EDID Chip ID, Slave Address */
 #define I2C_EDID_DEVICE_ADDR                   0x50
 #define I2C_E_EDID_DEVICE_ADDR                 0x30
@@ -150,6 +158,10 @@ void exynos_dp_disable_scrambling(struct exynos_dp_device *dp);
 #define DPCD_ADDR_LANE_ALIGN__STATUS_UPDATED   0x0204
 #define DPCD_ADDR_ADJUST_REQUEST_LANE0_1       0x0206
 #define DPCD_ADDR_ADJUST_REQUEST_LANE2_3       0x0207
+#define DPCD_ADDR_SYMBOL_ERROR_COUNT_LANE0     0x0210
+#define DPCD_ADDR_SYMBOL_ERROR_COUNT_LANE1     0x0212
+#define DPCD_ADDR_SYMBOL_ERROR_COUNT_LANE2     0x0214
+#define DPCD_ADDR_SYMBOL_ERROR_COUNT_LANE3     0x0216
 #define DPCD_ADDR_TEST_REQUEST                 0x0218
 #define DPCD_ADDR_TEST_RESPONSE                        0x0260
 #define DPCD_ADDR_TEST_EDID_CHECKSUM           0x0261