@@ -552,8 +552,6 @@ struct vc4_dsi {
552
552
struct vc4_encoder encoder ;
553
553
struct mipi_dsi_host dsi_host ;
554
554
555
- struct kref kref ;
556
-
557
555
struct platform_device * pdev ;
558
556
559
557
struct drm_bridge * out_bridge ;
@@ -1622,29 +1620,11 @@ static void vc4_dsi_dma_chan_release(void *ptr)
1622
1620
dsi -> reg_dma_chan = NULL ;
1623
1621
}
1624
1622
1625
- static void vc4_dsi_release (struct kref * kref )
1626
- {
1627
- struct vc4_dsi * dsi =
1628
- container_of (kref , struct vc4_dsi , kref );
1629
-
1630
- kfree (dsi );
1631
- }
1632
-
1633
- static void vc4_dsi_get (struct vc4_dsi * dsi )
1634
- {
1635
- kref_get (& dsi -> kref );
1636
- }
1637
-
1638
- static void vc4_dsi_put (struct vc4_dsi * dsi )
1639
- {
1640
- kref_put (& dsi -> kref , & vc4_dsi_release );
1641
- }
1642
-
1643
1623
static void vc4_dsi_release_action (struct drm_device * drm , void * ptr )
1644
1624
{
1645
1625
struct vc4_dsi * dsi = ptr ;
1646
1626
1647
- vc4_dsi_put ( dsi );
1627
+ drm_bridge_put ( & dsi -> bridge );
1648
1628
}
1649
1629
1650
1630
static int vc4_dsi_bind (struct device * dev , struct device * master , void * data )
@@ -1655,7 +1635,7 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data)
1655
1635
struct drm_encoder * encoder = & dsi -> encoder .base ;
1656
1636
int ret ;
1657
1637
1658
- vc4_dsi_get ( dsi );
1638
+ drm_bridge_get ( & dsi -> bridge );
1659
1639
1660
1640
ret = drmm_add_action_or_reset (drm , vc4_dsi_release_action , dsi );
1661
1641
if (ret )
@@ -1810,15 +1790,12 @@ static int vc4_dsi_dev_probe(struct platform_device *pdev)
1810
1790
struct device * dev = & pdev -> dev ;
1811
1791
struct vc4_dsi * dsi ;
1812
1792
1813
- dsi = kzalloc ( sizeof ( * dsi ), GFP_KERNEL );
1814
- if (! dsi )
1815
- return - ENOMEM ;
1793
+ dsi = devm_drm_bridge_alloc ( & pdev -> dev , struct vc4_dsi , bridge , & vc4_dsi_bridge_funcs );
1794
+ if (IS_ERR ( dsi ) )
1795
+ return PTR_ERR ( dsi ) ;
1816
1796
dev_set_drvdata (dev , dsi );
1817
1797
1818
- kref_init (& dsi -> kref );
1819
-
1820
1798
dsi -> pdev = pdev ;
1821
- dsi -> bridge .funcs = & vc4_dsi_bridge_funcs ;
1822
1799
#ifdef CONFIG_OF
1823
1800
dsi -> bridge .of_node = dev -> of_node ;
1824
1801
#endif
@@ -1836,7 +1813,6 @@ static void vc4_dsi_dev_remove(struct platform_device *pdev)
1836
1813
struct vc4_dsi * dsi = dev_get_drvdata (dev );
1837
1814
1838
1815
mipi_dsi_host_unregister (& dsi -> dsi_host );
1839
- vc4_dsi_put (dsi );
1840
1816
}
1841
1817
1842
1818
struct platform_driver vc4_dsi_driver = {
0 commit comments