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: frequency: ad9523: convert rest of driver to device managed functions

The driver pretty much uses device managed functions. The only left-over is
the iio_device_register() function, which also requires an action-or-reset
hook to disable the regulator on the remove and error path.

Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

Alexandru Ardelean and committed by
Jonathan Cameron
a5078012 6da3a6ce

+20 -40
+20 -40
drivers/iio/frequency/ad9523.c
··· 969 969 return 0; 970 970 } 971 971 972 + static void ad9523_reg_disable(void *data) 973 + { 974 + struct regulator *reg = data; 975 + 976 + regulator_disable(reg); 977 + } 978 + 972 979 static int ad9523_probe(struct spi_device *spi) 973 980 { 974 981 struct ad9523_platform_data *pdata = spi->dev.platform_data; ··· 1001 994 ret = regulator_enable(st->reg); 1002 995 if (ret) 1003 996 return ret; 997 + 998 + ret = devm_add_action_or_reset(&spi->dev, ad9523_reg_disable, 999 + st->reg); 1000 + if (ret) 1001 + return ret; 1004 1002 } 1005 1003 1006 1004 st->pwrdown_gpio = devm_gpiod_get_optional(&spi->dev, "powerdown", 1007 1005 GPIOD_OUT_HIGH); 1008 - if (IS_ERR(st->pwrdown_gpio)) { 1009 - ret = PTR_ERR(st->pwrdown_gpio); 1010 - goto error_disable_reg; 1011 - } 1006 + if (IS_ERR(st->pwrdown_gpio)) 1007 + return PTR_ERR(st->pwrdown_gpio); 1012 1008 1013 1009 st->reset_gpio = devm_gpiod_get_optional(&spi->dev, "reset", 1014 1010 GPIOD_OUT_LOW); 1015 - if (IS_ERR(st->reset_gpio)) { 1016 - ret = PTR_ERR(st->reset_gpio); 1017 - goto error_disable_reg; 1018 - } 1011 + if (IS_ERR(st->reset_gpio)) 1012 + return PTR_ERR(st->reset_gpio); 1019 1013 1020 1014 if (st->reset_gpio) { 1021 1015 udelay(1); ··· 1025 1017 1026 1018 st->sync_gpio = devm_gpiod_get_optional(&spi->dev, "sync", 1027 1019 GPIOD_OUT_HIGH); 1028 - if (IS_ERR(st->sync_gpio)) { 1029 - ret = PTR_ERR(st->sync_gpio); 1030 - goto error_disable_reg; 1031 - } 1020 + if (IS_ERR(st->sync_gpio)) 1021 + return PTR_ERR(st->sync_gpio); 1032 1022 1033 1023 spi_set_drvdata(spi, indio_dev); 1034 1024 st->spi = spi; ··· 1041 1035 1042 1036 ret = ad9523_setup(indio_dev); 1043 1037 if (ret < 0) 1044 - goto error_disable_reg; 1038 + return ret; 1045 1039 1046 - ret = iio_device_register(indio_dev); 1047 - if (ret) 1048 - goto error_disable_reg; 1049 - 1050 - dev_info(&spi->dev, "probed %s\n", indio_dev->name); 1051 - 1052 - return 0; 1053 - 1054 - error_disable_reg: 1055 - if (!IS_ERR(st->reg)) 1056 - regulator_disable(st->reg); 1057 - 1058 - return ret; 1059 - } 1060 - 1061 - static int ad9523_remove(struct spi_device *spi) 1062 - { 1063 - struct iio_dev *indio_dev = spi_get_drvdata(spi); 1064 - struct ad9523_state *st = iio_priv(indio_dev); 1065 - 1066 - iio_device_unregister(indio_dev); 1067 - 1068 - if (!IS_ERR(st->reg)) 1069 - regulator_disable(st->reg); 1070 - 1071 - return 0; 1040 + return devm_iio_device_register(&spi->dev, indio_dev); 1072 1041 } 1073 1042 1074 1043 static const struct spi_device_id ad9523_id[] = { ··· 1057 1076 .name = "ad9523", 1058 1077 }, 1059 1078 .probe = ad9523_probe, 1060 - .remove = ad9523_remove, 1061 1079 .id_table = ad9523_id, 1062 1080 }; 1063 1081 module_spi_driver(ad9523_driver);