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

Configure Feed

Select the types of activity you want to include in your feed.

staging: iio: Use devm_clk_get_enabled() helper function

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

This simplifies the code and avoids the need of a dedicated function used
with devm_add_action_or_reset().

Signed-off-by: Jinjie Ruan <ruanjinjie@huawei.com>
Link: https://lore.kernel.org/r/20230825095612.2972892-1-ruanjinjie@huawei.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Jinjie Ruan and committed by
Jonathan Cameron
5ff46635 a2d518fb

+5 -53
+1 -14
drivers/staging/iio/frequency/ad9832.c
··· 299 299 regulator_disable(reg); 300 300 } 301 301 302 - static void ad9832_clk_disable(void *clk) 303 - { 304 - clk_disable_unprepare(clk); 305 - } 306 - 307 302 static int ad9832_probe(struct spi_device *spi) 308 303 { 309 304 struct ad9832_platform_data *pdata = dev_get_platdata(&spi->dev); ··· 345 350 if (ret) 346 351 return ret; 347 352 348 - st->mclk = devm_clk_get(&spi->dev, "mclk"); 353 + st->mclk = devm_clk_get_enabled(&spi->dev, "mclk"); 349 354 if (IS_ERR(st->mclk)) 350 355 return PTR_ERR(st->mclk); 351 - 352 - ret = clk_prepare_enable(st->mclk); 353 - if (ret < 0) 354 - return ret; 355 - 356 - ret = devm_add_action_or_reset(&spi->dev, ad9832_clk_disable, st->mclk); 357 - if (ret) 358 - return ret; 359 356 360 357 st->spi = spi; 361 358 mutex_init(&st->lock);
+2 -19
drivers/staging/iio/frequency/ad9834.c
··· 394 394 regulator_disable(reg); 395 395 } 396 396 397 - static void ad9834_disable_clk(void *data) 398 - { 399 - struct clk *clk = data; 400 - 401 - clk_disable_unprepare(clk); 402 - } 403 - 404 397 static int ad9834_probe(struct spi_device *spi) 405 398 { 406 399 struct ad9834_state *st; ··· 422 429 } 423 430 st = iio_priv(indio_dev); 424 431 mutex_init(&st->lock); 425 - st->mclk = devm_clk_get(&spi->dev, NULL); 432 + st->mclk = devm_clk_get_enabled(&spi->dev, NULL); 426 433 if (IS_ERR(st->mclk)) { 427 - ret = PTR_ERR(st->mclk); 428 - return ret; 429 - } 430 - 431 - ret = clk_prepare_enable(st->mclk); 432 - if (ret) { 433 434 dev_err(&spi->dev, "Failed to enable master clock\n"); 434 - return ret; 435 + return PTR_ERR(st->mclk); 435 436 } 436 - 437 - ret = devm_add_action_or_reset(&spi->dev, ad9834_disable_clk, st->mclk); 438 - if (ret) 439 - return ret; 440 437 441 438 st->spi = spi; 442 439 st->devid = spi_get_device_id(spi)->driver_data;
+2 -20
drivers/staging/iio/impedance-analyzer/ad5933.c
··· 667 667 regulator_disable(st->reg); 668 668 } 669 669 670 - static void ad5933_clk_disable(void *data) 671 - { 672 - struct ad5933_state *st = data; 673 - 674 - clk_disable_unprepare(st->mclk); 675 - } 676 - 677 670 static int ad5933_probe(struct i2c_client *client) 678 671 { 679 672 const struct i2c_device_id *id = i2c_client_get_device_id(client); ··· 705 712 706 713 st->vref_mv = ret / 1000; 707 714 708 - st->mclk = devm_clk_get(&client->dev, "mclk"); 715 + st->mclk = devm_clk_get_enabled(&client->dev, "mclk"); 709 716 if (IS_ERR(st->mclk) && PTR_ERR(st->mclk) != -ENOENT) 710 717 return PTR_ERR(st->mclk); 711 718 712 - if (!IS_ERR(st->mclk)) { 713 - ret = clk_prepare_enable(st->mclk); 714 - if (ret < 0) 715 - return ret; 716 - 717 - ret = devm_add_action_or_reset(&client->dev, 718 - ad5933_clk_disable, 719 - st); 720 - if (ret) 721 - return ret; 722 - 719 + if (!IS_ERR(st->mclk)) 723 720 ext_clk_hz = clk_get_rate(st->mclk); 724 - } 725 721 726 722 if (ext_clk_hz) { 727 723 st->mclk_hz = ext_clk_hz;