@@ -68,14 +68,17 @@ static void msm_hdmi_destroy(struct hdmi *hdmi)
68
68
destroy_workqueue (hdmi -> workq );
69
69
msm_hdmi_hdcp_destroy (hdmi );
70
70
71
+ if (hdmi -> i2c )
72
+ msm_hdmi_i2c_destroy (hdmi -> i2c );
73
+ }
74
+
75
+ static void msm_hdmi_put_phy (struct hdmi * hdmi )
76
+ {
71
77
if (hdmi -> phy_dev ) {
72
78
put_device (hdmi -> phy_dev );
73
79
hdmi -> phy = NULL ;
74
80
hdmi -> phy_dev = NULL ;
75
81
}
76
-
77
- if (hdmi -> i2c )
78
- msm_hdmi_i2c_destroy (hdmi -> i2c );
79
82
}
80
83
81
84
static int msm_hdmi_get_phy (struct hdmi * hdmi )
@@ -91,19 +94,15 @@ static int msm_hdmi_get_phy(struct hdmi *hdmi)
91
94
}
92
95
93
96
phy_pdev = of_find_device_by_node (phy_node );
94
- if (phy_pdev )
95
- hdmi -> phy = platform_get_drvdata (phy_pdev );
96
-
97
97
of_node_put (phy_node );
98
98
99
- if (!phy_pdev ) {
100
- DRM_DEV_ERROR (& pdev -> dev , "phy driver is not ready\n" );
101
- return - EPROBE_DEFER ;
102
- }
99
+ if (!phy_pdev )
100
+ return dev_err_probe (& pdev -> dev , - EPROBE_DEFER , "phy driver is not ready\n" );
101
+
102
+ hdmi -> phy = platform_get_drvdata ( phy_pdev );
103
103
if (!hdmi -> phy ) {
104
- DRM_DEV_ERROR (& pdev -> dev , "phy driver is not ready\n" );
105
104
put_device (& phy_pdev -> dev );
106
- return - EPROBE_DEFER ;
105
+ return dev_err_probe ( & pdev -> dev , - EPROBE_DEFER , "phy driver is not ready\n" ) ;
107
106
}
108
107
109
108
hdmi -> phy_dev = & phy_pdev -> dev ;
@@ -130,12 +129,6 @@ static int msm_hdmi_init(struct hdmi *hdmi)
130
129
goto fail ;
131
130
}
132
131
133
- ret = msm_hdmi_get_phy (hdmi );
134
- if (ret ) {
135
- DRM_DEV_ERROR (& pdev -> dev , "failed to get phy\n" );
136
- goto fail ;
137
- }
138
-
139
132
hdmi -> hdcp_ctrl = msm_hdmi_hdcp_init (hdmi );
140
133
if (IS_ERR (hdmi -> hdcp_ctrl )) {
141
134
dev_warn (& pdev -> dev , "failed to init hdcp: disabled\n" );
@@ -532,6 +525,12 @@ static int msm_hdmi_dev_probe(struct platform_device *pdev)
532
525
if (hdmi -> hpd_gpiod )
533
526
gpiod_set_consumer_name (hdmi -> hpd_gpiod , "HDMI_HPD" );
534
527
528
+ ret = msm_hdmi_get_phy (hdmi );
529
+ if (ret ) {
530
+ DRM_DEV_ERROR (& pdev -> dev , "failed to get phy\n" );
531
+ return ret ;
532
+ }
533
+
535
534
ret = devm_pm_runtime_enable (& pdev -> dev );
536
535
if (ret )
537
536
return ret ;
@@ -543,7 +542,12 @@ static int msm_hdmi_dev_probe(struct platform_device *pdev)
543
542
544
543
static int msm_hdmi_dev_remove (struct platform_device * pdev )
545
544
{
545
+ struct hdmi * hdmi = dev_get_drvdata (& pdev -> dev );
546
+
546
547
component_del (& pdev -> dev , & msm_hdmi_ops );
548
+
549
+ msm_hdmi_put_phy (hdmi );
550
+
547
551
return 0 ;
548
552
}
549
553
0 commit comments