Пример #1
0
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;
}
Пример #2
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;
}
Пример #3
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;
}