drm/vc4: add extcon hdmi connection uevent
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / vc4 / vc4_hdmi.h
index dab7839..2c599db 100644 (file)
@@ -12,6 +12,10 @@ struct vc4_hdmi;
 struct vc4_hdmi_register;
 struct vc4_hdmi_connector_state;
 
+#ifdef CONFIG_EXTCON
+struct extcon_dev;
+#endif
+
 enum vc4_hdmi_phy_channel {
        PHY_LANE_0 = 0,
        PHY_LANE_1,
@@ -111,6 +115,7 @@ struct vc4_hdmi_audio {
 };
 
 enum vc4_hdmi_output_format {
+       VC4_HDMI_OUTPUT_AUTO,
        VC4_HDMI_OUTPUT_RGB,
        VC4_HDMI_OUTPUT_YUV422,
        VC4_HDMI_OUTPUT_YUV444,
@@ -130,6 +135,7 @@ struct vc4_hdmi {
        struct delayed_work scrambling_work;
 
        struct drm_property *broadcast_rgb_property;
+       struct drm_property *output_format_property;
 
        struct i2c_adapter *ddc;
        void __iomem *hdmicore_regs;
@@ -158,14 +164,6 @@ struct vc4_hdmi {
         */
        bool disable_wifi_frequencies;
 
-       /*
-        * Even if HDMI0 on the RPi4 can output modes requiring a pixel
-        * rate higher than 297MHz, it needs some adjustments in the
-        * config.txt file to be able to do so and thus won't always be
-        * available.
-        */
-       bool disable_4kp60;
-
        struct cec_adapter *cec_adap;
        struct cec_msg cec_rx_msg;
        bool cec_tx_ok;
@@ -222,6 +220,11 @@ struct vc4_hdmi {
         * for use outside of KMS hooks. Protected by @mutex.
         */
        enum vc4_hdmi_output_format output_format;
+       /**
+        * @requested_output_format: Copy of @vc4_connector_state.requested_output_format
+        * for use outside of KMS hooks. Protected by @mutex.
+        */
+       enum vc4_hdmi_output_format requested_output_format;
 
        /**
         * @broadcast_rgb: Copy of @vc4_connector_state.broadcast_rgb
@@ -236,6 +239,11 @@ struct vc4_hdmi {
        struct debugfs_regset32 phy_regset;
        struct debugfs_regset32 ram_regset;
        struct debugfs_regset32 rm_regset;
+
+#ifdef CONFIG_EXTCON
+       enum drm_connector_status status;
+       struct extcon_dev *edev;
+#endif
 };
 
 static inline struct vc4_hdmi *
@@ -256,6 +264,7 @@ struct vc4_hdmi_connector_state {
        unsigned long long              pixel_rate;
        unsigned int                    output_bpc;
        enum vc4_hdmi_output_format     output_format;
+       enum vc4_hdmi_output_format     requested_output_format;
        int                             broadcast_rgb;
 };