Clock handling can be very simlified with using devm_clk_get_enabled() as was done by commit 8d2aaf4382b7 ("gpio: zynq: Simplify using devm_clk_get_enabled()").
Unified · Split
| @@ -248,41 +248,35 @@ static int xlnx_spdif_probe(struct platform_device *pdev) · 247 unmodified lines | ||
| 248 | 248 | if (!ctx) |
| 249 | 249 | return -ENOMEM; |
| 250 | 250 | |
| 251 | − ctx->axi_clk = devm_clk_get(dev, "s_axi_aclk"); | |
| 251 | + ctx->axi_clk = devm_clk_get_enabled(dev, "s_axi_aclk"); | |
| 252 | 252 | if (IS_ERR(ctx->axi_clk)) { |
| 253 | 253 | ret = PTR_ERR(ctx->axi_clk); |
| 254 | 254 | dev_err(dev, "failed to get s_axi_aclk(%d)\n", ret); |
| 255 | 255 | return ret; |
| 256 | 256 | } |
| 257 | − ret = clk_prepare_enable(ctx->axi_clk); | |
| 258 | − if (ret) { | |
| 259 | − dev_err(dev, "failed to enable s_axi_aclk(%d)\n", ret); | |
| 260 | − return ret; | |
| 261 | − } | |
| 262 | 257 | |
| 263 | 258 | ctx->base = devm_platform_ioremap_resource(pdev, 0); |
| 264 | − if (IS_ERR(ctx->base)) { | |
| 265 | − ret = PTR_ERR(ctx->base); | |
| 266 | − goto clk_err; | |
| 267 | − } | |
| 259 | + if (IS_ERR(ctx->base)) | |
| 260 | + return PTR_ERR(ctx->base); | |
| 261 | + | |
| 268 | 262 | ret = of_property_read_u32(node, "xlnx,spdif-mode", &ctx->mode); |
| 269 | 263 | if (ret < 0) { |
| 270 | 264 | dev_err(dev, "cannot get SPDIF mode\n"); |
| 271 | − goto clk_err; | |
| 265 | + return ret; | |
| 272 | 266 | } |
| 273 | 267 | if (ctx->mode) { |
| 274 | 268 | dai_drv = &xlnx_spdif_tx_dai; |
| 275 | 269 | } else { |
| 276 | 270 | ret = platform_get_irq(pdev, 0); |
| 277 | 271 | if (ret < 0) |
| 278 | − goto clk_err; | |
| 272 | + return ret; | |
| 273 | + | |
| 279 | 274 | ret = devm_request_irq(dev, ret, |
| 280 | 275 | xlnx_spdifrx_irq_handler, |
| 281 | 276 | 0, "XLNX_SPDIF_RX", ctx); |
| 282 | 277 | if (ret) { |
| 283 | 278 | dev_err(dev, "spdif rx irq request failed\n"); |
| 284 | − ret = -ENODEV; | |
| 285 | − goto clk_err; | |
| 279 | + return -ENODEV; | |
| 286 | 280 | } |
| 287 | 281 | |
| 288 | 282 | init_waitqueue_head(&ctx->chsts_q); |
| @@ -292,7 +286,7 @@ static int xlnx_spdif_probe(struct platform_device *pdev) · 3 unmodified lines | ||
| 292 | 286 | ret = of_property_read_u32(node, "xlnx,aud_clk_i", &ctx->aclk); |
| 293 | 287 | if (ret < 0) { |
| 294 | 288 | dev_err(dev, "cannot get aud_clk_i value\n"); |
| 295 | − goto clk_err; | |
| 289 | + return ret; | |
| 296 | 290 | } |
| 297 | 291 | |
| 298 | 292 | dev_set_drvdata(dev, ctx); |
| @@ -301,22 +295,13 @@ static int xlnx_spdif_probe(struct platform_device *pdev) · 2 unmodified lines | ||
| 301 | 295 | dai_drv, 1); |
| 302 | 296 | if (ret) { |
| 303 | 297 | dev_err(dev, "SPDIF component registration failed\n"); |
| 304 | − goto clk_err; | |
| 298 | + return ret; | |
| 305 | 299 | } |
| 306 | 300 | |
| 307 | 301 | writel(XSPDIF_SOFT_RESET_VALUE, ctx->base + XSPDIF_SOFT_RESET_REG); |
| 308 | 302 | dev_info(dev, "%s DAI registered\n", dai_drv->name); |
| 309 | 303 | |
| 310 | −clk_err: | |
| 311 | − clk_disable_unprepare(ctx->axi_clk); | |
| 312 | − return ret; | |
| 313 | −} | |
| 314 | − | |
| 315 | −static void xlnx_spdif_remove(struct platform_device *pdev) | |
| 316 | −{ | |
| 317 | − struct spdif_dev_data *ctx = dev_get_drvdata(&pdev->dev); | |
| 318 | − | |
| 319 | − clk_disable_unprepare(ctx->axi_clk); | |
| 304 | + return 0; | |
| 320 | 305 | } |
| 321 | 306 | |
| 322 | 307 | static struct platform_driver xlnx_spdif_driver = { |
| @@ -325,7 +310,6 @@ static struct platform_driver xlnx_spdif_driver = { · 2 unmodified lines | ||
| 325 | 310 | .of_match_table = xlnx_spdif_of_match, |
| 326 | 311 | }, |
| 327 | 312 | .probe = xlnx_spdif_probe, |
| 328 | − .remove = xlnx_spdif_remove, | |
| 329 | 313 | }; |
| 330 | 314 | module_platform_driver(xlnx_spdif_driver); |
| 331 | 315 | |