int da9052_irq_exit(struct da9052 *da9052) { da9052_free_irq(da9052, DA9052_IRQ_ADC_EOM, da9052); regmap_del_irq_chip(da9052->chip_irq, da9052->irq_data); return 0; }
static int da9052_bat_remove(struct platform_device *pdev) { int i; struct da9052_battery *bat = platform_get_drvdata(pdev); for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++) da9052_free_irq(bat->da9052, da9052_bat_irq_bits[i], bat); power_supply_unregister(&bat->psy); kfree(bat); return 0; }
static s32 da9052_bat_probe(struct platform_device *pdev) { struct da9052_pdata *pdata; struct da9052_battery *bat; int ret; int i; bat = kzalloc(sizeof(struct da9052_battery), GFP_KERNEL); if (!bat) return -ENOMEM; bat->da9052 = dev_get_drvdata(pdev->dev.parent); bat->psy = template_battery; bat->charger_type = DA9052_NOCHARGER; bat->status = POWER_SUPPLY_STATUS_UNKNOWN; bat->health = POWER_SUPPLY_HEALTH_UNKNOWN; bat->nb.notifier_call = da9052_USB_current_notifier; pdata = bat->da9052->dev->platform_data; if (pdata != NULL && pdata->use_for_apm) bat->psy.use_for_apm = pdata->use_for_apm; else bat->psy.use_for_apm = 1; for (i = 0; i < ARRAY_SIZE(da9052_bat_irqs); i++) { ret = da9052_request_irq(bat->da9052, da9052_bat_irq_bits[i], da9052_bat_irqs[i], da9052_bat_irq, bat); if (ret != 0) { dev_err(bat->da9052->dev, "DA9052 failed to request %s IRQ: %d\n", da9052_bat_irqs[i], ret); goto err; } } ret = power_supply_register(&pdev->dev, &bat->psy); if (ret) goto err; platform_set_drvdata(pdev, bat); return 0; err: while (--i >= 0) da9052_free_irq(bat->da9052, da9052_bat_irq_bits[i], bat); kfree(bat); return ret; }