@@ -1566,14 +1566,13 @@ static int zynqmp_dp_bridge_atomic_check(struct drm_bridge *bridge,
1566
1566
return 0 ;
1567
1567
}
1568
1568
1569
- static enum drm_connector_status zynqmp_dp_bridge_detect (struct drm_bridge * bridge )
1569
+ static enum drm_connector_status __zynqmp_dp_bridge_detect (struct zynqmp_dp * dp )
1570
1570
{
1571
- struct zynqmp_dp * dp = bridge_to_dp (bridge );
1572
1571
struct zynqmp_dp_link_config * link_config = & dp -> link_config ;
1573
1572
u32 state , i ;
1574
1573
int ret ;
1575
1574
1576
- mutex_lock (& dp -> lock );
1575
+ lockdep_assert_held (& dp -> lock );
1577
1576
1578
1577
/*
1579
1578
* This is from heuristic. It takes some delay (ex, 100 ~ 500 msec) to
@@ -1602,16 +1601,26 @@ static enum drm_connector_status zynqmp_dp_bridge_detect(struct drm_bridge *brid
1602
1601
dp -> num_lanes );
1603
1602
1604
1603
dp -> status = connector_status_connected ;
1605
- mutex_unlock (& dp -> lock );
1606
1604
return connector_status_connected ;
1607
1605
}
1608
1606
1609
1607
disconnected :
1610
1608
dp -> status = connector_status_disconnected ;
1611
- mutex_unlock (& dp -> lock );
1612
1609
return connector_status_disconnected ;
1613
1610
}
1614
1611
1612
+ static enum drm_connector_status zynqmp_dp_bridge_detect (struct drm_bridge * bridge )
1613
+ {
1614
+ struct zynqmp_dp * dp = bridge_to_dp (bridge );
1615
+ enum drm_connector_status ret ;
1616
+
1617
+ mutex_lock (& dp -> lock );
1618
+ ret = __zynqmp_dp_bridge_detect (dp );
1619
+ mutex_unlock (& dp -> lock );
1620
+
1621
+ return ret ;
1622
+ }
1623
+
1615
1624
static const struct drm_edid * zynqmp_dp_bridge_edid_read (struct drm_bridge * bridge ,
1616
1625
struct drm_connector * connector )
1617
1626
{
@@ -1695,7 +1704,10 @@ static void zynqmp_dp_hpd_work_func(struct work_struct *work)
1695
1704
struct zynqmp_dp * dp = container_of (work , struct zynqmp_dp , hpd_work );
1696
1705
enum drm_connector_status status ;
1697
1706
1698
- status = zynqmp_dp_bridge_detect (& dp -> bridge );
1707
+ mutex_lock (& dp -> lock );
1708
+ status = __zynqmp_dp_bridge_detect (dp );
1709
+ mutex_unlock (& dp -> lock );
1710
+
1699
1711
drm_bridge_hpd_notify (& dp -> bridge , status );
1700
1712
}
1701
1713
0 commit comments