Merge branch 'psy-fixes' into psy-next
Signed-off-by: Sebastian Reichel <sre@kernel.org>
This commit is contained in:
commit
5198a48381
@ -130,7 +130,17 @@ static int gemini_poweroff_probe(struct platform_device *pdev)
|
||||
val |= GEMINI_CTRL_ENABLE;
|
||||
writel(val, gpw->base + GEMINI_PWC_CTRLREG);
|
||||
|
||||
/* Now that the state machine is active, clear the IRQ */
|
||||
/* Clear the IRQ */
|
||||
val = readl(gpw->base + GEMINI_PWC_CTRLREG);
|
||||
val |= GEMINI_CTRL_IRQ_CLR;
|
||||
writel(val, gpw->base + GEMINI_PWC_CTRLREG);
|
||||
|
||||
/* Wait for this to clear */
|
||||
val = readl(gpw->base + GEMINI_PWC_STATREG);
|
||||
while (val & 0x70U)
|
||||
val = readl(gpw->base + GEMINI_PWC_STATREG);
|
||||
|
||||
/* Clear the IRQ again */
|
||||
val = readl(gpw->base + GEMINI_PWC_CTRLREG);
|
||||
val |= GEMINI_CTRL_IRQ_CLR;
|
||||
writel(val, gpw->base + GEMINI_PWC_CTRLREG);
|
||||
|
@ -35,6 +35,7 @@ static void vexpress_reset_do(struct device *dev, const char *what)
|
||||
}
|
||||
|
||||
static struct device *vexpress_power_off_device;
|
||||
static atomic_t vexpress_restart_nb_refcnt = ATOMIC_INIT(0);
|
||||
|
||||
static void vexpress_power_off(void)
|
||||
{
|
||||
@ -99,10 +100,13 @@ static int _vexpress_register_restart_handler(struct device *dev)
|
||||
int err;
|
||||
|
||||
vexpress_restart_device = dev;
|
||||
err = register_restart_handler(&vexpress_restart_nb);
|
||||
if (err) {
|
||||
dev_err(dev, "cannot register restart handler (err=%d)\n", err);
|
||||
return err;
|
||||
if (atomic_inc_return(&vexpress_restart_nb_refcnt) == 1) {
|
||||
err = register_restart_handler(&vexpress_restart_nb);
|
||||
if (err) {
|
||||
dev_err(dev, "cannot register restart handler (err=%d)\n", err);
|
||||
atomic_dec(&vexpress_restart_nb_refcnt);
|
||||
return err;
|
||||
}
|
||||
}
|
||||
device_create_file(dev, &dev_attr_active);
|
||||
|
||||
|
@ -718,7 +718,7 @@ static int charger_init_hw_regs(struct axp288_chrg_info *info)
|
||||
}
|
||||
|
||||
/* Determine charge current limit */
|
||||
cc = (ret & CHRG_CCCV_CC_MASK) >> CHRG_CCCV_CC_BIT_POS;
|
||||
cc = (val & CHRG_CCCV_CC_MASK) >> CHRG_CCCV_CC_BIT_POS;
|
||||
cc = (cc * CHRG_CCCV_CC_LSB_RES) + CHRG_CCCV_CC_OFFSET;
|
||||
info->cc = cc;
|
||||
|
||||
|
@ -241,10 +241,10 @@ static int gab_probe(struct platform_device *pdev)
|
||||
struct power_supply_desc *psy_desc;
|
||||
struct power_supply_config psy_cfg = {};
|
||||
struct gab_platform_data *pdata = pdev->dev.platform_data;
|
||||
enum power_supply_property *properties;
|
||||
int ret = 0;
|
||||
int chan;
|
||||
int index = 0;
|
||||
int index = ARRAY_SIZE(gab_props);
|
||||
bool any = false;
|
||||
|
||||
adc_bat = devm_kzalloc(&pdev->dev, sizeof(*adc_bat), GFP_KERNEL);
|
||||
if (!adc_bat) {
|
||||
@ -278,8 +278,6 @@ static int gab_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
memcpy(psy_desc->properties, gab_props, sizeof(gab_props));
|
||||
properties = (enum power_supply_property *)
|
||||
((char *)psy_desc->properties + sizeof(gab_props));
|
||||
|
||||
/*
|
||||
* getting channel from iio and copying the battery properties
|
||||
@ -293,15 +291,22 @@ static int gab_probe(struct platform_device *pdev)
|
||||
adc_bat->channel[chan] = NULL;
|
||||
} else {
|
||||
/* copying properties for supported channels only */
|
||||
memcpy(properties + sizeof(*(psy_desc->properties)) * index,
|
||||
&gab_dyn_props[chan],
|
||||
sizeof(gab_dyn_props[chan]));
|
||||
index++;
|
||||
int index2;
|
||||
|
||||
for (index2 = 0; index2 < index; index2++) {
|
||||
if (psy_desc->properties[index2] ==
|
||||
gab_dyn_props[chan])
|
||||
break; /* already known */
|
||||
}
|
||||
if (index2 == index) /* really new */
|
||||
psy_desc->properties[index++] =
|
||||
gab_dyn_props[chan];
|
||||
any = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* none of the channels are supported so let's bail out */
|
||||
if (index == 0) {
|
||||
if (!any) {
|
||||
ret = -ENODEV;
|
||||
goto second_mem_fail;
|
||||
}
|
||||
@ -312,7 +317,7 @@ static int gab_probe(struct platform_device *pdev)
|
||||
* as come channels may be not be supported by the device.So
|
||||
* we need to take care of that.
|
||||
*/
|
||||
psy_desc->num_properties = ARRAY_SIZE(gab_props) + index;
|
||||
psy_desc->num_properties = index;
|
||||
|
||||
adc_bat->psy = power_supply_register(&pdev->dev, psy_desc, &psy_cfg);
|
||||
if (IS_ERR(adc_bat->psy)) {
|
||||
|
@ -567,6 +567,7 @@ static int max77693_set_charge_input_threshold_volt(struct max77693_charger *chg
|
||||
case 4800000:
|
||||
case 4900000:
|
||||
data = (uvolt - 4700000) / 100000;
|
||||
break;
|
||||
default:
|
||||
dev_err(chg->dev, "Wrong value for charge input voltage regulation threshold\n");
|
||||
return -EINVAL;
|
||||
|
@ -14,6 +14,7 @@
|
||||
#include <linux/types.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/err.h>
|
||||
@ -140,8 +141,13 @@ static void power_supply_deferred_register_work(struct work_struct *work)
|
||||
struct power_supply *psy = container_of(work, struct power_supply,
|
||||
deferred_register_work.work);
|
||||
|
||||
if (psy->dev.parent)
|
||||
mutex_lock(&psy->dev.parent->mutex);
|
||||
if (psy->dev.parent) {
|
||||
while (!mutex_trylock(&psy->dev.parent->mutex)) {
|
||||
if (psy->removing)
|
||||
return;
|
||||
msleep(10);
|
||||
}
|
||||
}
|
||||
|
||||
power_supply_changed(psy);
|
||||
|
||||
@ -1082,6 +1088,7 @@ EXPORT_SYMBOL_GPL(devm_power_supply_register_no_ws);
|
||||
void power_supply_unregister(struct power_supply *psy)
|
||||
{
|
||||
WARN_ON(atomic_dec_return(&psy->use_cnt));
|
||||
psy->removing = true;
|
||||
cancel_work_sync(&psy->changed_work);
|
||||
cancel_delayed_work_sync(&psy->deferred_register_work);
|
||||
sysfs_remove_link(&psy->dev.kobj, "powers");
|
||||
|
@ -269,6 +269,7 @@ struct power_supply {
|
||||
spinlock_t changed_lock;
|
||||
bool changed;
|
||||
bool initialized;
|
||||
bool removing;
|
||||
atomic_t use_cnt;
|
||||
#ifdef CONFIG_THERMAL
|
||||
struct thermal_zone_device *tzd;
|
||||
|
Loading…
Reference in New Issue
Block a user