@@ -1911,25 +1911,54 @@ static bool anx7625_bridge_mode_fixup(struct drm_bridge *bridge,
1911
1911
return true;
1912
1912
}
1913
1913
1914
- static void anx7625_bridge_enable (struct drm_bridge * bridge )
1914
+ static int anx7625_bridge_atomic_check (struct drm_bridge * bridge ,
1915
+ struct drm_bridge_state * bridge_state ,
1916
+ struct drm_crtc_state * crtc_state ,
1917
+ struct drm_connector_state * conn_state )
1915
1918
{
1916
1919
struct anx7625_data * ctx = bridge_to_anx7625 (bridge );
1917
1920
struct device * dev = & ctx -> client -> dev ;
1918
1921
1919
- DRM_DEV_DEBUG_DRIVER (dev , "drm enable\n" );
1922
+ dev_dbg (dev , "drm bridge atomic check\n" );
1923
+ return anx7625_bridge_mode_fixup (bridge , & crtc_state -> mode ,
1924
+ & crtc_state -> adjusted_mode );
1925
+ }
1926
+
1927
+ static void anx7625_bridge_atomic_enable (struct drm_bridge * bridge ,
1928
+ struct drm_bridge_state * state )
1929
+ {
1930
+ struct anx7625_data * ctx = bridge_to_anx7625 (bridge );
1931
+ struct device * dev = & ctx -> client -> dev ;
1932
+ struct drm_connector * connector ;
1933
+
1934
+ dev_dbg (dev , "drm atomic enable\n" );
1935
+
1936
+ if (!bridge -> encoder ) {
1937
+ dev_err (dev , "Parent encoder object not found" );
1938
+ return ;
1939
+ }
1940
+
1941
+ connector = drm_atomic_get_new_connector_for_encoder (state -> base .state ,
1942
+ bridge -> encoder );
1943
+ if (!connector )
1944
+ return ;
1945
+
1946
+ ctx -> connector = connector ;
1920
1947
1921
1948
pm_runtime_get_sync (dev );
1922
1949
1923
1950
anx7625_dp_start (ctx );
1924
1951
}
1925
1952
1926
- static void anx7625_bridge_disable (struct drm_bridge * bridge )
1953
+ static void anx7625_bridge_atomic_disable (struct drm_bridge * bridge ,
1954
+ struct drm_bridge_state * old )
1927
1955
{
1928
1956
struct anx7625_data * ctx = bridge_to_anx7625 (bridge );
1929
1957
struct device * dev = & ctx -> client -> dev ;
1930
1958
1931
- DRM_DEV_DEBUG_DRIVER (dev , "drm disable\n" );
1959
+ dev_dbg (dev , "drm atomic disable\n" );
1932
1960
1961
+ ctx -> connector = NULL ;
1933
1962
anx7625_dp_stop (ctx );
1934
1963
1935
1964
pm_runtime_put_sync (dev );
@@ -1959,11 +1988,14 @@ static struct edid *anx7625_bridge_get_edid(struct drm_bridge *bridge,
1959
1988
1960
1989
static const struct drm_bridge_funcs anx7625_bridge_funcs = {
1961
1990
.attach = anx7625_bridge_attach ,
1962
- .disable = anx7625_bridge_disable ,
1963
1991
.mode_valid = anx7625_bridge_mode_valid ,
1964
1992
.mode_set = anx7625_bridge_mode_set ,
1965
- .mode_fixup = anx7625_bridge_mode_fixup ,
1966
- .enable = anx7625_bridge_enable ,
1993
+ .atomic_check = anx7625_bridge_atomic_check ,
1994
+ .atomic_enable = anx7625_bridge_atomic_enable ,
1995
+ .atomic_disable = anx7625_bridge_atomic_disable ,
1996
+ .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state ,
1997
+ .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state ,
1998
+ .atomic_reset = drm_atomic_helper_bridge_reset ,
1967
1999
.detect = anx7625_bridge_detect ,
1968
2000
.get_edid = anx7625_bridge_get_edid ,
1969
2001
};
0 commit comments