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

power_supply: bq2415x_charger: Decrement the power supply's device reference counter

Use power_supply_put() to decrement the power supply's device reference
counter (increased by power_supply_get_by_name() or
power_supply_get_by_phandle()).

Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Acked-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Reviewed-by: Sebastian Reichel <sre@kernel.org>
Signed-off-by: Sebastian Reichel <sre@kernel.org>

authored by

Krzysztof Kozlowski and committed by
Sebastian Reichel
1a8dbe6f 52016ac0

+18 -13
+18 -13
drivers/power/bq2415x_charger.c
··· 1594 1594 ret = of_property_read_u32(np, "ti,current-limit", 1595 1595 &bq->init_data.current_limit); 1596 1596 if (ret) 1597 - goto error_2; 1597 + goto error_3; 1598 1598 ret = of_property_read_u32(np, "ti,weak-battery-voltage", 1599 1599 &bq->init_data.weak_battery_voltage); 1600 1600 if (ret) 1601 - goto error_2; 1601 + goto error_3; 1602 1602 ret = of_property_read_u32(np, "ti,battery-regulation-voltage", 1603 1603 &bq->init_data.battery_regulation_voltage); 1604 1604 if (ret) 1605 - goto error_2; 1605 + goto error_3; 1606 1606 ret = of_property_read_u32(np, "ti,charge-current", 1607 1607 &bq->init_data.charge_current); 1608 1608 if (ret) 1609 - goto error_2; 1609 + goto error_3; 1610 1610 ret = of_property_read_u32(np, "ti,termination-current", 1611 1611 &bq->init_data.termination_current); 1612 1612 if (ret) 1613 - goto error_2; 1613 + goto error_3; 1614 1614 ret = of_property_read_u32(np, "ti,resistor-sense", 1615 1615 &bq->init_data.resistor_sense); 1616 1616 if (ret) 1617 - goto error_2; 1617 + goto error_3; 1618 1618 } else { 1619 1619 memcpy(&bq->init_data, pdata, sizeof(bq->init_data)); 1620 1620 } ··· 1624 1624 ret = bq2415x_power_supply_init(bq); 1625 1625 if (ret) { 1626 1626 dev_err(bq->dev, "failed to register power supply: %d\n", ret); 1627 - goto error_2; 1627 + goto error_3; 1628 1628 } 1629 1629 1630 1630 ret = bq2415x_sysfs_init(bq); 1631 1631 if (ret) { 1632 1632 dev_err(bq->dev, "failed to create sysfs entries: %d\n", ret); 1633 - goto error_3; 1633 + goto error_4; 1634 1634 } 1635 1635 1636 1636 ret = bq2415x_set_defaults(bq); 1637 1637 if (ret) { 1638 1638 dev_err(bq->dev, "failed to set default values: %d\n", ret); 1639 - goto error_4; 1639 + goto error_5; 1640 1640 } 1641 1641 1642 1642 if (bq->notify_psy) { ··· 1644 1644 ret = power_supply_reg_notifier(&bq->nb); 1645 1645 if (ret) { 1646 1646 dev_err(bq->dev, "failed to reg notifier: %d\n", ret); 1647 - goto error_5; 1647 + goto error_6; 1648 1648 } 1649 1649 1650 1650 /* Query for initial reported_mode and set it */ ··· 1664 1664 dev_info(bq->dev, "driver registered\n"); 1665 1665 return 0; 1666 1666 1667 + error_6: 1667 1668 error_5: 1668 - error_4: 1669 1669 bq2415x_sysfs_exit(bq); 1670 - error_3: 1670 + error_4: 1671 1671 bq2415x_power_supply_exit(bq); 1672 + error_3: 1673 + if (bq->notify_psy) 1674 + power_supply_put(bq->notify_psy); 1672 1675 error_2: 1673 1676 kfree(name); 1674 1677 error_1: ··· 1688 1685 { 1689 1686 struct bq2415x_device *bq = i2c_get_clientdata(client); 1690 1687 1691 - if (bq->notify_psy) 1688 + if (bq->notify_psy) { 1692 1689 power_supply_unreg_notifier(&bq->nb); 1690 + power_supply_put(bq->notify_psy); 1691 + } 1693 1692 1694 1693 bq2415x_sysfs_exit(bq); 1695 1694 bq2415x_power_supply_exit(bq);