@@ -187,6 +187,7 @@ static int exynos_sata_phy_probe(struct platform_device *pdev)
187187 return - EINVAL ;
188188
189189 sata_phy -> client = of_find_i2c_device_by_node (node );
190+ of_node_put (node );
190191 if (!sata_phy -> client )
191192 return - EPROBE_DEFER ;
192193
@@ -195,32 +196,40 @@ static int exynos_sata_phy_probe(struct platform_device *pdev)
195196 sata_phy -> phyclk = devm_clk_get (dev , "sata_phyctrl" );
196197 if (IS_ERR (sata_phy -> phyclk )) {
197198 dev_err (dev , "failed to get clk for PHY\n" );
198- return PTR_ERR (sata_phy -> phyclk );
199+ ret = PTR_ERR (sata_phy -> phyclk );
200+ goto put_dev ;
199201 }
200202
201203 ret = clk_prepare_enable (sata_phy -> phyclk );
202204 if (ret < 0 ) {
203205 dev_err (dev , "failed to enable source clk\n" );
204- return ret ;
206+ goto put_dev ;
205207 }
206208
207209 sata_phy -> phy = devm_phy_create (dev , NULL , & exynos_sata_phy_ops );
208210 if (IS_ERR (sata_phy -> phy )) {
209- clk_disable_unprepare (sata_phy -> phyclk );
210211 dev_err (dev , "failed to create PHY\n" );
211- return PTR_ERR (sata_phy -> phy );
212+ ret = PTR_ERR (sata_phy -> phy );
213+ goto clk_disable ;
212214 }
213215
214216 phy_set_drvdata (sata_phy -> phy , sata_phy );
215217
216218 phy_provider = devm_of_phy_provider_register (dev ,
217219 of_phy_simple_xlate );
218220 if (IS_ERR (phy_provider )) {
219- clk_disable_unprepare ( sata_phy -> phyclk );
220- return PTR_ERR ( phy_provider ) ;
221+ ret = PTR_ERR ( phy_provider );
222+ goto clk_disable ;
221223 }
222224
223225 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 ;
224233}
225234
226235static const struct of_device_id exynos_sata_phy_of_match [] = {
0 commit comments