Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

clk: lmk04832: Use devm_clk_get_enabled() helpers

The devm_clk_get_enabled() helpers:
- call devm_clk_get()
- call clk_prepare_enable() and register what is needed in order to
call clk_disable_unprepare() when needed, as a managed resource.

This simplifies the code and avoids the calls to clk_disable_unprepare().

Signed-off-by: Huan Yang <link@vivo.com>
Link: https://lore.kernel.org/r/20240820102119.130298-1-link@vivo.com
Signed-off-by: Stephen Boyd <sboyd@kernel.org>

authored by

Huan Yang and committed by
Stephen Boyd
f7e41b65 1b2ed9df

+13 -30
+13 -30
drivers/clk/clk-lmk04832.c
··· 1405 1405 1406 1406 lmk->dev = &spi->dev; 1407 1407 1408 - lmk->oscin = devm_clk_get(lmk->dev, "oscin"); 1408 + lmk->oscin = devm_clk_get_enabled(lmk->dev, "oscin"); 1409 1409 if (IS_ERR(lmk->oscin)) { 1410 1410 dev_err(lmk->dev, "failed to get oscin clock\n"); 1411 1411 return PTR_ERR(lmk->oscin); 1412 1412 } 1413 - 1414 - ret = clk_prepare_enable(lmk->oscin); 1415 - if (ret) 1416 - return ret; 1417 1413 1418 1414 lmk->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", 1419 1415 GPIOD_OUT_LOW); ··· 1418 1422 sizeof(struct lmk_dclk), GFP_KERNEL); 1419 1423 if (!lmk->dclk) { 1420 1424 ret = -ENOMEM; 1421 - goto err_disable_oscin; 1425 + return ret; 1422 1426 } 1423 1427 1424 1428 lmk->clkout = devm_kcalloc(lmk->dev, info->num_channels, 1425 1429 sizeof(*lmk->clkout), GFP_KERNEL); 1426 1430 if (!lmk->clkout) { 1427 1431 ret = -ENOMEM; 1428 - goto err_disable_oscin; 1432 + return ret; 1429 1433 } 1430 1434 1431 1435 lmk->clk_data = devm_kzalloc(lmk->dev, struct_size(lmk->clk_data, hws, ··· 1433 1437 GFP_KERNEL); 1434 1438 if (!lmk->clk_data) { 1435 1439 ret = -ENOMEM; 1436 - goto err_disable_oscin; 1440 + return ret; 1437 1441 } 1438 1442 1439 1443 device_property_read_u32(lmk->dev, "ti,vco-hz", &lmk->vco_rate); ··· 1461 1465 dev_err(lmk->dev, "missing reg property in child: %s\n", 1462 1466 child->full_name); 1463 1467 of_node_put(child); 1464 - goto err_disable_oscin; 1468 + return ret; 1465 1469 } 1466 1470 1467 1471 of_property_read_u32(child, "ti,clkout-fmt", ··· 1482 1486 1483 1487 __func__, PTR_ERR(lmk->regmap)); 1484 1488 ret = PTR_ERR(lmk->regmap); 1485 - goto err_disable_oscin; 1489 + return ret; 1486 1490 } 1487 1491 1488 1492 regmap_write(lmk->regmap, LMK04832_REG_RST3W, LMK04832_BIT_RESET); ··· 1492 1496 &rdbk_pin); 1493 1497 ret = lmk04832_set_spi_rdbk(lmk, rdbk_pin); 1494 1498 if (ret) 1495 - goto err_disable_oscin; 1499 + return ret; 1496 1500 } 1497 1501 1498 1502 regmap_bulk_read(lmk->regmap, LMK04832_REG_ID_PROD_MSB, &tmp, 3); ··· 1500 1504 dev_err(lmk->dev, "unsupported device type: pid 0x%04x, maskrev 0x%02x\n", 1501 1505 tmp[0] << 8 | tmp[1], tmp[2]); 1502 1506 ret = -EINVAL; 1503 - goto err_disable_oscin; 1507 + return ret; 1504 1508 } 1505 1509 1506 1510 ret = lmk04832_register_vco(lmk); 1507 1511 if (ret) { 1508 1512 dev_err(lmk->dev, "failed to init device clock path\n"); 1509 - goto err_disable_oscin; 1513 + return ret; 1510 1514 } 1511 1515 1512 1516 if (lmk->vco_rate) { ··· 1514 1518 ret = clk_set_rate(lmk->vco.clk, lmk->vco_rate); 1515 1519 if (ret) { 1516 1520 dev_err(lmk->dev, "failed to set VCO rate\n"); 1517 - goto err_disable_oscin; 1521 + return ret; 1518 1522 } 1519 1523 } 1520 1524 1521 1525 ret = lmk04832_register_sclk(lmk); 1522 1526 if (ret) { 1523 1527 dev_err(lmk->dev, "failed to init SYNC/SYSREF clock path\n"); 1524 - goto err_disable_oscin; 1528 + return ret; 1525 1529 } 1526 1530 1527 1531 for (i = 0; i < info->num_channels; i++) { 1528 1532 ret = lmk04832_register_clkout(lmk, i); 1529 1533 if (ret) { 1530 1534 dev_err(lmk->dev, "failed to register clk %d\n", i); 1531 - goto err_disable_oscin; 1535 + return ret; 1532 1536 } 1533 1537 } 1534 1538 ··· 1537 1541 lmk->clk_data); 1538 1542 if (ret) { 1539 1543 dev_err(lmk->dev, "failed to add provider (%d)\n", ret); 1540 - goto err_disable_oscin; 1544 + return ret; 1541 1545 } 1542 1546 1543 1547 spi_set_drvdata(spi, lmk); 1544 1548 1545 1549 return 0; 1546 - 1547 - err_disable_oscin: 1548 - clk_disable_unprepare(lmk->oscin); 1549 - 1550 - return ret; 1551 - } 1552 - 1553 - static void lmk04832_remove(struct spi_device *spi) 1554 - { 1555 - struct lmk04832 *lmk = spi_get_drvdata(spi); 1556 - 1557 - clk_disable_unprepare(lmk->oscin); 1558 1550 } 1559 1551 1560 1552 static const struct spi_device_id lmk04832_id[] = { ··· 1563 1579 .of_match_table = lmk04832_of_id, 1564 1580 }, 1565 1581 .probe = lmk04832_probe, 1566 - .remove = lmk04832_remove, 1567 1582 .id_table = lmk04832_id, 1568 1583 }; 1569 1584 module_spi_driver(lmk04832_driver);