mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
power: supply: rk816-battery: try to get extcon from battery node
Extcon is useless for rk808 driver, move extcon definition to battery node. Change-Id: Ifb4cf8b132a0a397e651699d27cfb86c415be9dd Signed-off-by: Zain Wang <wzz@rock-chips.com>
This commit is contained in:
@@ -4247,6 +4247,13 @@ static enum charger_t rk816_bat_init_dc_det(struct rk816_battery *di)
|
||||
return type;
|
||||
}
|
||||
|
||||
static int rk816_get_edev(struct rk816_battery *di, struct device *dev)
|
||||
{
|
||||
di->cable_edev = extcon_get_edev_by_phandle(dev, 0);
|
||||
|
||||
return IS_ERR(di->cable_edev) ? PTR_ERR(di->cable_edev) : 0;
|
||||
}
|
||||
|
||||
static int rk816_bat_init_charger(struct rk816_battery *di)
|
||||
{
|
||||
enum charger_t dc_charger;
|
||||
@@ -4260,12 +4267,15 @@ static int rk816_bat_init_charger(struct rk816_battery *di)
|
||||
INIT_DELAYED_WORK(&di->dc_delay_work, rk816_bat_dc_delay_work);
|
||||
|
||||
/* Find extcon phandle */
|
||||
edev = extcon_get_edev_by_phandle(dev->parent, 0);
|
||||
if (IS_ERR(edev)) {
|
||||
if (PTR_ERR(edev) != -EPROBE_DEFER)
|
||||
dev_err(dev, "Invalid or missing extcon\n");
|
||||
return PTR_ERR(edev);
|
||||
ret = rk816_get_edev(di, dev);
|
||||
if (ret) {
|
||||
if (ret == -EPROBE_DEFER)
|
||||
return ret;
|
||||
ret = rk816_get_edev(di, dev->parent);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret, "Can't find extcon\n");
|
||||
}
|
||||
edev = di->cable_edev;
|
||||
|
||||
/* Register chargers */
|
||||
INIT_DELAYED_WORK(&di->usb_work, rk816_bat_charger_evt_worker);
|
||||
@@ -4332,8 +4342,6 @@ static int rk816_bat_init_charger(struct rk816_battery *di)
|
||||
return ret;
|
||||
}
|
||||
|
||||
di->cable_edev = edev;
|
||||
|
||||
/* Check usb and otg state */
|
||||
schedule_delayed_work(&di->host_work, 0);
|
||||
schedule_delayed_work(&di->usb_work, 0);
|
||||
@@ -4737,12 +4745,15 @@ static int rk816_bat_parse_dt(struct rk816_battery *di)
|
||||
else
|
||||
pdata->zero_algorithm_vol = DEFAULT_ALGR_VOL_THRESD1;
|
||||
|
||||
pdata->extcon = device_property_read_bool(dev->parent, "extcon");
|
||||
if (!pdata->extcon) {
|
||||
if (!device_property_read_bool(dev, "extcon") &&
|
||||
!device_property_read_bool(dev->parent, "extcon")) {
|
||||
dev_err(dev, "Can't find extcon node under rk816 node\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* FIXME: extcon false case ?? */
|
||||
pdata->extcon = true;
|
||||
|
||||
/* parse unnecessary param */
|
||||
of_property_read_u32(np, "sample_res", &pdata->sample_res);
|
||||
|
||||
@@ -4952,7 +4963,10 @@ static int rk816_battery_probe(struct platform_device *pdev)
|
||||
rk816_bat_init_info(di);
|
||||
rk816_bat_init_fg(di);
|
||||
rk816_bat_init_leds(di);
|
||||
rk816_bat_init_charger(di);
|
||||
ret = rk816_bat_init_charger(di);
|
||||
if (ret)
|
||||
goto bat_fail;
|
||||
|
||||
rk816_bat_init_sysfs(di);
|
||||
rk816_bat_register_fb_notify(di);
|
||||
wake_lock_init(&di->wake_lock, WAKE_LOCK_SUSPEND, "rk816_bat_lock");
|
||||
@@ -4974,12 +4988,13 @@ static int rk816_battery_probe(struct platform_device *pdev)
|
||||
return 0;
|
||||
|
||||
irq_fail:
|
||||
destroy_workqueue(di->bat_monitor_wq);
|
||||
cancel_delayed_work(&di->dc_delay_work);
|
||||
cancel_delayed_work(&di->bat_delay_work);
|
||||
cancel_delayed_work(&di->calib_delay_work);
|
||||
destroy_workqueue(di->bat_monitor_wq);
|
||||
destroy_workqueue(di->usb_charger_wq);
|
||||
rk816_bat_unregister_fb_notify(di);
|
||||
bat_fail:
|
||||
cancel_delayed_work(&di->calib_delay_work);
|
||||
destroy_workqueue(di->usb_charger_wq);
|
||||
del_timer(&di->caltimer);
|
||||
wake_lock_destroy(&di->wake_lock);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user