static int max8925_power_probe(struct platform_device *pdev) { struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent); struct max8925_power_pdata *pdata = NULL; struct max8925_power_info *info; int ret; pdata = max8925_power_dt_init(pdev); if (!pdata) { dev_err(&pdev->dev, "platform data isn't assigned to " "power supply\n"); return -EINVAL; } info = kzalloc(sizeof(struct max8925_power_info), GFP_KERNEL); if (!info) return -ENOMEM; info->chip = chip; info->gpm = chip->i2c; info->adc = chip->adc; platform_set_drvdata(pdev, info); info->ac.name = "max8925-ac"; info->ac.type = POWER_SUPPLY_TYPE_MAINS; info->ac.properties = max8925_ac_props; info->ac.num_properties = ARRAY_SIZE(max8925_ac_props); info->ac.get_property = max8925_ac_get_prop; info->ac.supplied_to = pdata->supplied_to; info->ac.num_supplicants = pdata->num_supplicants; ret = power_supply_register(&pdev->dev, &info->ac); if (ret) goto out; info->ac.dev->parent = &pdev->dev; info->usb.name = "max8925-usb"; info->usb.type = POWER_SUPPLY_TYPE_USB; info->usb.properties = max8925_usb_props; info->usb.num_properties = ARRAY_SIZE(max8925_usb_props); info->usb.get_property = max8925_usb_get_prop; info->usb.supplied_to = pdata->supplied_to; info->usb.num_supplicants = pdata->num_supplicants; ret = power_supply_register(&pdev->dev, &info->usb); if (ret) goto out_usb; info->usb.dev->parent = &pdev->dev; info->battery.name = "max8925-battery"; info->battery.type = POWER_SUPPLY_TYPE_BATTERY; info->battery.properties = max8925_battery_props; info->battery.num_properties = ARRAY_SIZE(max8925_battery_props); info->battery.get_property = max8925_bat_get_prop; ret = power_supply_register(&pdev->dev, &info->battery); if (ret) goto out_battery; info->battery.dev->parent = &pdev->dev; info->batt_detect = pdata->batt_detect; info->topoff_threshold = pdata->topoff_threshold; info->fast_charge = pdata->fast_charge; info->set_charger = pdata->set_charger; info->no_temp_support = pdata->no_temp_support; info->no_insert_detect = pdata->no_insert_detect; max8925_init_charger(chip, info); return 0; out_battery: power_supply_unregister(&info->battery); out_usb: power_supply_unregister(&info->ac); out: kfree(info); return ret; }
static int max8925_power_probe(struct platform_device *pdev) { struct max8925_chip *chip = dev_get_drvdata(pdev->dev.parent); struct power_supply_config psy_cfg = {}; /* Only for ac and usb */ struct max8925_power_pdata *pdata = NULL; struct max8925_power_info *info; int ret; pdata = max8925_power_dt_init(pdev); if (!pdata) { dev_err(&pdev->dev, "platform data isn't assigned to " "power supply\n"); return -EINVAL; } info = devm_kzalloc(&pdev->dev, sizeof(struct max8925_power_info), GFP_KERNEL); if (!info) return -ENOMEM; info->chip = chip; info->gpm = chip->i2c; info->adc = chip->adc; platform_set_drvdata(pdev, info); psy_cfg.supplied_to = pdata->supplied_to; psy_cfg.num_supplicants = pdata->num_supplicants; info->ac = power_supply_register(&pdev->dev, &ac_desc, &psy_cfg); if (IS_ERR(info->ac)) { ret = PTR_ERR(info->ac); goto out; } info->ac->dev.parent = &pdev->dev; info->usb = power_supply_register(&pdev->dev, &usb_desc, &psy_cfg); if (IS_ERR(info->usb)) { ret = PTR_ERR(info->usb); goto out_unregister_ac; } info->usb->dev.parent = &pdev->dev; info->battery = power_supply_register(&pdev->dev, &battery_desc, NULL); if (IS_ERR(info->battery)) { ret = PTR_ERR(info->battery); goto out_unregister_usb; } info->battery->dev.parent = &pdev->dev; info->batt_detect = pdata->batt_detect; info->topoff_threshold = pdata->topoff_threshold; info->fast_charge = pdata->fast_charge; info->set_charger = pdata->set_charger; info->no_temp_support = pdata->no_temp_support; info->no_insert_detect = pdata->no_insert_detect; max8925_init_charger(chip, info); return 0; out_unregister_usb: power_supply_unregister(info->usb); out_unregister_ac: power_supply_unregister(info->ac); out: return ret; }