@@ -196,32 +196,40 @@ static int exynos_sata_phy_probe(struct platform_device *pdev)
196
196
sata_phy -> phyclk = devm_clk_get (dev , "sata_phyctrl" );
197
197
if (IS_ERR (sata_phy -> phyclk )) {
198
198
dev_err (dev , "failed to get clk for PHY\n" );
199
- return PTR_ERR (sata_phy -> phyclk );
199
+ ret = PTR_ERR (sata_phy -> phyclk );
200
+ goto put_dev ;
200
201
}
201
202
202
203
ret = clk_prepare_enable (sata_phy -> phyclk );
203
204
if (ret < 0 ) {
204
205
dev_err (dev , "failed to enable source clk\n" );
205
- return ret ;
206
+ goto put_dev ;
206
207
}
207
208
208
209
sata_phy -> phy = devm_phy_create (dev , NULL , & exynos_sata_phy_ops );
209
210
if (IS_ERR (sata_phy -> phy )) {
210
- clk_disable_unprepare (sata_phy -> phyclk );
211
211
dev_err (dev , "failed to create PHY\n" );
212
- return PTR_ERR (sata_phy -> phy );
212
+ ret = PTR_ERR (sata_phy -> phy );
213
+ goto clk_disable ;
213
214
}
214
215
215
216
phy_set_drvdata (sata_phy -> phy , sata_phy );
216
217
217
218
phy_provider = devm_of_phy_provider_register (dev ,
218
219
of_phy_simple_xlate );
219
220
if (IS_ERR (phy_provider )) {
220
- clk_disable_unprepare ( sata_phy -> phyclk );
221
- return PTR_ERR ( phy_provider ) ;
221
+ ret = PTR_ERR ( phy_provider );
222
+ goto clk_disable ;
222
223
}
223
224
224
225
return 0 ;
226
+
227
+ clk_disable :
228
+ clk_disable_unprepare (sata_phy -> phyclk );
229
+ put_dev :
230
+ put_device (& sata_phy -> client -> dev );
231
+
232
+ return ret ;
225
233
}
226
234
227
235
static const struct of_device_id exynos_sata_phy_of_match [] = {
0 commit comments