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

mfd: 88pm80x: Remove redundant devm_* calls

devm_* functions are device managed and make error handling
and code simpler; it also fix error exit paths

Signed-off-by: Yi Zhang <yizhang@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

authored by

Yi Zhang and committed by
Samuel Ortiz
306df798 b3aac62b

+10 -28
+3 -7
drivers/mfd/88pm800.c
··· 531 531 ret = device_800_init(chip, pdata); 532 532 if (ret) { 533 533 dev_err(chip->dev, "%s id 0x%x failed!\n", __func__, chip->id); 534 - goto err_800_init; 534 + goto err_subchip_alloc; 535 535 } 536 536 537 537 ret = pm800_pages_init(chip); ··· 546 546 err_page_init: 547 547 mfd_remove_devices(chip->dev); 548 548 device_irq_exit_800(chip); 549 - err_800_init: 550 - devm_kfree(&client->dev, subchip); 551 549 err_subchip_alloc: 552 - pm80x_deinit(client); 550 + pm80x_deinit(); 553 551 out_init: 554 552 return ret; 555 553 } ··· 560 562 device_irq_exit_800(chip); 561 563 562 564 pm800_pages_exit(chip); 563 - devm_kfree(&client->dev, chip->subchip); 564 - 565 - pm80x_deinit(client); 565 + pm80x_deinit(); 566 566 567 567 return 0; 568 568 }
+2 -2
drivers/mfd/88pm805.c
··· 257 257 pdata->plat_config(chip, pdata); 258 258 259 259 err_805_init: 260 - pm80x_deinit(client); 260 + pm80x_deinit(); 261 261 out_init: 262 262 return ret; 263 263 } ··· 269 269 mfd_remove_devices(chip->dev); 270 270 device_irq_exit_805(chip); 271 271 272 - pm80x_deinit(client); 272 + pm80x_deinit(); 273 273 274 274 return 0; 275 275 }
+4 -18
drivers/mfd/88pm80x.c
··· 48 48 ret = PTR_ERR(map); 49 49 dev_err(&client->dev, "Failed to allocate register map: %d\n", 50 50 ret); 51 - goto err_regmap_init; 51 + return ret; 52 52 } 53 53 54 54 chip->id = id->driver_data; 55 - if (chip->id < CHIP_PM800 || chip->id > CHIP_PM805) { 56 - ret = -EINVAL; 57 - goto err_chip_id; 58 - } 55 + if (chip->id < CHIP_PM800 || chip->id > CHIP_PM805) 56 + return -EINVAL; 59 57 60 58 chip->client = client; 61 59 chip->regmap = map; ··· 80 82 } 81 83 82 84 return 0; 83 - 84 - err_chip_id: 85 - regmap_exit(map); 86 - err_regmap_init: 87 - devm_kfree(&client->dev, chip); 88 - return ret; 89 85 } 90 86 EXPORT_SYMBOL_GPL(pm80x_init); 91 87 92 - int pm80x_deinit(struct i2c_client *client) 88 + int pm80x_deinit(void) 93 89 { 94 - struct pm80x_chip *chip = i2c_get_clientdata(client); 95 - 96 90 /* 97 91 * workaround: clear the dependency between pm800 and pm805. 98 92 * would remove it after HW chip fixes the issue. ··· 93 103 g_pm80x_chip->companion = NULL; 94 104 else 95 105 g_pm80x_chip = NULL; 96 - 97 - regmap_exit(chip->regmap); 98 - devm_kfree(&client->dev, chip); 99 - 100 106 return 0; 101 107 } 102 108 EXPORT_SYMBOL_GPL(pm80x_deinit);
+1 -1
include/linux/mfd/88pm80x.h
··· 365 365 366 366 extern int pm80x_init(struct i2c_client *client, 367 367 const struct i2c_device_id *id); 368 - extern int pm80x_deinit(struct i2c_client *client); 368 + extern int pm80x_deinit(void); 369 369 #endif /* __LINUX_MFD_88PM80X_H */