@@ -941,6 +941,9 @@ static u8 hdmi_edid_i2c_read(struct mxc_hdmi *hdmi,
941
941
return data ;
942
942
}
943
943
944
+ static int keepalive = 1 ;
945
+ module_param (keepalive , int , 0644 );
946
+ MODULE_PARM_DESC (keepalive , "Allow only CEA modes" );
944
947
945
948
/* "Power-down enable (active low)"
946
949
* That mean that power up == 1! */
@@ -1987,6 +1990,7 @@ static void hotplug_worker(struct work_struct *work)
1987
1990
u32 hdmi_phy_stat0 , hdmi_phy_pol0 , hdmi_phy_mask0 ;
1988
1991
unsigned long flags ;
1989
1992
char event_string [32 ];
1993
+ int isalive = 0 ;
1990
1994
char * envp [] = { event_string , NULL };
1991
1995
1992
1996
@@ -2013,7 +2017,10 @@ static void hotplug_worker(struct work_struct *work)
2013
2017
#endif
2014
2018
hdmi_set_cable_state (1 );
2015
2019
2016
- } else {
2020
+ if (keepalive )
2021
+ hdmi_writeb (HDMI_DVI_STAT , HDMI_PHY_POL0 );
2022
+ isalive = 1 ;
2023
+ } else if (!keepalive ) {
2017
2024
/* Plugout event */
2018
2025
dev_dbg (& hdmi -> pdev -> dev , "EVENT=plugout\n" );
2019
2026
hdmi_set_cable_state (0 );
@@ -2032,16 +2039,18 @@ static void hotplug_worker(struct work_struct *work)
2032
2039
* completed before next interrupt processed */
2033
2040
spin_lock_irqsave (& hdmi -> irq_lock , flags );
2034
2041
2035
- /* Re-enable HPD interrupts */
2036
- hdmi_phy_mask0 = hdmi_readb (HDMI_PHY_MASK0 );
2037
- hdmi_phy_mask0 &= ~HDMI_DVI_STAT ;
2038
- hdmi_writeb (hdmi_phy_mask0 , HDMI_PHY_MASK0 );
2042
+ if (!(keepalive || isalive )) {
2043
+ /* Re-enable HPD interrupts */
2044
+ hdmi_phy_mask0 = hdmi_readb (HDMI_PHY_MASK0 );
2045
+ hdmi_phy_mask0 &= ~HDMI_DVI_STAT ;
2046
+ hdmi_writeb (hdmi_phy_mask0 , HDMI_PHY_MASK0 );
2039
2047
2040
- /* Unmute interrupts */
2041
- hdmi_writeb (~HDMI_DVI_IH_STAT , HDMI_IH_MUTE_PHY_STAT0 );
2048
+ /* Unmute interrupts */
2049
+ hdmi_writeb (~HDMI_DVI_IH_STAT , HDMI_IH_MUTE_PHY_STAT0 );
2042
2050
2043
- if (hdmi_readb (HDMI_IH_FC_STAT2 ) & HDMI_IH_FC_STAT2_OVERFLOW_MASK )
2044
- mxc_hdmi_clear_overflow (hdmi );
2051
+ if (hdmi_readb (HDMI_IH_FC_STAT2 ) & HDMI_IH_FC_STAT2_OVERFLOW_MASK )
2052
+ mxc_hdmi_clear_overflow (hdmi );
2053
+ }
2045
2054
2046
2055
spin_unlock_irqrestore (& hdmi -> irq_lock , flags );
2047
2056
}
0 commit comments