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.

iio: adc: spear_adc: Use device managed 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.

Switch to devm_iio_device_register() and drop the remove function.

This simplifies the code.

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

authored by

Jinjie Ruan and committed by
Jonathan Cameron
3878ae2a a3e9625e

+8 -35
+8 -35
drivers/iio/adc/spear_adc.c
··· 297 297 st->adc_base_spear3xx = 298 298 (struct adc_regs_spear3xx __iomem *)st->adc_base_spear6xx; 299 299 300 - st->clk = devm_clk_get(dev, NULL); 300 + st->clk = devm_clk_get_enabled(dev, NULL); 301 301 if (IS_ERR(st->clk)) { 302 - dev_err(dev, "failed getting clock\n"); 302 + dev_err(dev, "failed enabling clock\n"); 303 303 return PTR_ERR(st->clk); 304 304 } 305 305 306 - ret = clk_prepare_enable(st->clk); 307 - if (ret) { 308 - dev_err(dev, "failed enabling clock\n"); 309 - return ret; 310 - } 311 - 312 306 irq = platform_get_irq(pdev, 0); 313 - if (irq < 0) { 314 - ret = irq; 315 - goto errout2; 316 - } 307 + if (irq < 0) 308 + return irq; 317 309 318 310 ret = devm_request_irq(dev, irq, spear_adc_isr, 0, SPEAR_ADC_MOD_NAME, 319 311 st); 320 312 if (ret < 0) { 321 313 dev_err(dev, "failed requesting interrupt\n"); 322 - goto errout2; 314 + return ret; 323 315 } 324 316 325 317 if (of_property_read_u32(np, "sampling-frequency", 326 318 &st->sampling_freq)) { 327 319 dev_err(dev, "sampling-frequency missing in DT\n"); 328 - ret = -EINVAL; 329 - goto errout2; 320 + return -EINVAL; 330 321 } 331 322 332 323 /* ··· 334 343 335 344 spear_adc_configure(st); 336 345 337 - platform_set_drvdata(pdev, indio_dev); 338 - 339 346 init_completion(&st->completion); 340 347 341 348 indio_dev->name = SPEAR_ADC_MOD_NAME; ··· 342 353 indio_dev->channels = spear_adc_iio_channels; 343 354 indio_dev->num_channels = ARRAY_SIZE(spear_adc_iio_channels); 344 355 345 - ret = iio_device_register(indio_dev); 356 + ret = devm_iio_device_register(dev, indio_dev); 346 357 if (ret) 347 - goto errout2; 358 + return ret; 348 359 349 360 dev_info(dev, "SPEAR ADC driver loaded, IRQ %d\n", irq); 350 - 351 - return 0; 352 - 353 - errout2: 354 - clk_disable_unprepare(st->clk); 355 - return ret; 356 - } 357 - 358 - static int spear_adc_remove(struct platform_device *pdev) 359 - { 360 - struct iio_dev *indio_dev = platform_get_drvdata(pdev); 361 - struct spear_adc_state *st = iio_priv(indio_dev); 362 - 363 - iio_device_unregister(indio_dev); 364 - clk_disable_unprepare(st->clk); 365 361 366 362 return 0; 367 363 } ··· 361 387 362 388 static struct platform_driver spear_adc_driver = { 363 389 .probe = spear_adc_probe, 364 - .remove = spear_adc_remove, 365 390 .driver = { 366 391 .name = SPEAR_ADC_MOD_NAME, 367 392 .of_match_table = of_match_ptr(spear_adc_dt_ids),