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.

pinctrl: core: Simplify devm_pinctrl_*()

Use devm_add_action_or_reset() instead of devres_alloc() and
devres_add(), which works the same. This will simplify the
code. There is no functional changes.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Linus Walleij <linusw@kernel.org>

authored by

Andy Shevchenko and committed by
Linus Walleij
74ac08a7 17926aa1

+20 -47
+20 -47
drivers/pinctrl/core.c
··· 1383 1383 } 1384 1384 EXPORT_SYMBOL_GPL(pinctrl_select_state); 1385 1385 1386 - static void devm_pinctrl_release(struct device *dev, void *res) 1386 + static void devm_pinctrl_release(void *p) 1387 1387 { 1388 - pinctrl_put(*(struct pinctrl **)res); 1388 + pinctrl_put(p); 1389 1389 } 1390 1390 1391 1391 /** ··· 1397 1397 */ 1398 1398 struct pinctrl *devm_pinctrl_get(struct device *dev) 1399 1399 { 1400 - struct pinctrl **ptr, *p; 1401 - 1402 - ptr = devres_alloc(devm_pinctrl_release, sizeof(*ptr), GFP_KERNEL); 1403 - if (!ptr) 1404 - return ERR_PTR(-ENOMEM); 1400 + struct pinctrl *p; 1401 + int ret; 1405 1402 1406 1403 p = pinctrl_get(dev); 1407 - if (!IS_ERR(p)) { 1408 - *ptr = p; 1409 - devres_add(dev, ptr); 1410 - } else { 1411 - devres_free(ptr); 1412 - } 1404 + if (IS_ERR(p)) 1405 + return p; 1406 + 1407 + ret = devm_add_action_or_reset(dev, devm_pinctrl_release, p); 1408 + if (ret) 1409 + return ERR_PTR(ret); 1413 1410 1414 1411 return p; 1415 1412 } 1416 1413 EXPORT_SYMBOL_GPL(devm_pinctrl_get); 1417 - 1418 - static int devm_pinctrl_match(struct device *dev, void *res, void *data) 1419 - { 1420 - struct pinctrl **p = res; 1421 - 1422 - return *p == data; 1423 - } 1424 1414 1425 1415 /** 1426 1416 * devm_pinctrl_put() - Resource managed pinctrl_put() ··· 1422 1432 */ 1423 1433 void devm_pinctrl_put(struct pinctrl *p) 1424 1434 { 1425 - WARN_ON(devres_release(p->dev, devm_pinctrl_release, 1426 - devm_pinctrl_match, p)); 1435 + devm_release_action(p->dev, devm_pinctrl_release, p); 1427 1436 } 1428 1437 EXPORT_SYMBOL_GPL(devm_pinctrl_put); 1429 1438 ··· 2305 2316 } 2306 2317 EXPORT_SYMBOL_GPL(pinctrl_unregister); 2307 2318 2308 - static void devm_pinctrl_dev_release(struct device *dev, void *res) 2319 + static void devm_pinctrl_dev_release(void *pctldev) 2309 2320 { 2310 - struct pinctrl_dev *pctldev = *(struct pinctrl_dev **)res; 2311 - 2312 2321 pinctrl_unregister(pctldev); 2313 2322 } 2314 2323 ··· 2325 2338 const struct pinctrl_desc *pctldesc, 2326 2339 void *driver_data) 2327 2340 { 2328 - struct pinctrl_dev **ptr, *pctldev; 2329 - 2330 - ptr = devres_alloc(devm_pinctrl_dev_release, sizeof(*ptr), GFP_KERNEL); 2331 - if (!ptr) 2332 - return ERR_PTR(-ENOMEM); 2341 + struct pinctrl_dev *pctldev; 2342 + int ret; 2333 2343 2334 2344 pctldev = pinctrl_register(pctldesc, dev, driver_data); 2335 - if (IS_ERR(pctldev)) { 2336 - devres_free(ptr); 2345 + if (IS_ERR(pctldev)) 2337 2346 return pctldev; 2338 - } 2339 2347 2340 - *ptr = pctldev; 2341 - devres_add(dev, ptr); 2348 + ret = devm_add_action_or_reset(dev, devm_pinctrl_dev_release, pctldev); 2349 + if (ret) 2350 + return ERR_PTR(ret); 2342 2351 2343 2352 return pctldev; 2344 2353 } ··· 2356 2373 void *driver_data, 2357 2374 struct pinctrl_dev **pctldev) 2358 2375 { 2359 - struct pinctrl_dev **ptr; 2360 2376 int error; 2361 2377 2362 - ptr = devres_alloc(devm_pinctrl_dev_release, sizeof(*ptr), GFP_KERNEL); 2363 - if (!ptr) 2364 - return -ENOMEM; 2365 - 2366 2378 error = pinctrl_register_and_init(pctldesc, dev, driver_data, pctldev); 2367 - if (error) { 2368 - devres_free(ptr); 2379 + if (error) 2369 2380 return error; 2370 - } 2371 2381 2372 - *ptr = *pctldev; 2373 - devres_add(dev, ptr); 2374 - 2375 - return 0; 2382 + return devm_add_action_or_reset(dev, devm_pinctrl_dev_release, *pctldev); 2376 2383 } 2377 2384 EXPORT_SYMBOL_GPL(devm_pinctrl_register_and_init); 2378 2385