@@ -104,11 +104,22 @@ static const struct regmap_config exynos_lpass_reg_conf = {
104
104
.fast_io = true,
105
105
};
106
106
107
+ static void exynos_lpass_disable_lpass (void * data )
108
+ {
109
+ struct platform_device * pdev = data ;
110
+ struct exynos_lpass * lpass = platform_get_drvdata (pdev );
111
+
112
+ pm_runtime_disable (& pdev -> dev );
113
+ if (!pm_runtime_status_suspended (& pdev -> dev ))
114
+ exynos_lpass_disable (lpass );
115
+ }
116
+
107
117
static int exynos_lpass_probe (struct platform_device * pdev )
108
118
{
109
119
struct device * dev = & pdev -> dev ;
110
120
struct exynos_lpass * lpass ;
111
121
void __iomem * base_top ;
122
+ int ret ;
112
123
113
124
lpass = devm_kzalloc (dev , sizeof (* lpass ), GFP_KERNEL );
114
125
if (!lpass )
@@ -134,16 +145,11 @@ static int exynos_lpass_probe(struct platform_device *pdev)
134
145
pm_runtime_enable (dev );
135
146
exynos_lpass_enable (lpass );
136
147
137
- return devm_of_platform_populate (dev );
138
- }
139
-
140
- static void exynos_lpass_remove (struct platform_device * pdev )
141
- {
142
- struct exynos_lpass * lpass = platform_get_drvdata (pdev );
148
+ ret = devm_add_action_or_reset (dev , exynos_lpass_disable_lpass , pdev );
149
+ if (ret )
150
+ return ret ;
143
151
144
- pm_runtime_disable (& pdev -> dev );
145
- if (!pm_runtime_status_suspended (& pdev -> dev ))
146
- exynos_lpass_disable (lpass );
152
+ return devm_of_platform_populate (dev );
147
153
}
148
154
149
155
static int __maybe_unused exynos_lpass_suspend (struct device * dev )
@@ -183,7 +189,6 @@ static struct platform_driver exynos_lpass_driver = {
183
189
.of_match_table = exynos_lpass_of_match ,
184
190
},
185
191
.probe = exynos_lpass_probe ,
186
- .remove = exynos_lpass_remove ,
187
192
};
188
193
module_platform_driver (exynos_lpass_driver );
189
194
0 commit comments