/*Charger Module DeInitialization*/
static int __exit max8903_charger_remove(struct platform_device *pdev)
{
	struct max8903_charger *mc = platform_get_drvdata(pdev);
	/*unregister,clean up*/
	if(mc)
	{
		power_supply_unregister(&mc->usb);
		power_supply_unregister(&mc->adapter);
	}

	free_irq(mc->flt_irq,mc);
	sysfs_remove_group(&pdev->dev.kobj, &max8903_attr_group);
	otg_unregister_notifier(mc->otg, &mc->nb);
	cancel_delayed_work_sync(&mc->usb_work);

	gpio_free(mc->max8903_gpio_chg_uok);
	gpio_free(mc->max8903_gpio_chg_dok);
	gpio_free(mc->max8903_gpio_chg_iusb);
	gpio_free(mc->max8903_gpio_chg_usus);
	gpio_free(mc->max8903_gpio_chg_flt);
	gpio_free(mc->max8903_gpio_chg_en);
	gpio_free(mc->max8903_gpio_chg_ilm);
	if(mc)
		kfree(mc);
	printk("MAX8903 charger remove\n");
	return 0;
}
Example #2
0
static int __exit twl4030_bci_remove(struct platform_device *pdev)
{
    struct twl4030_bci *bci = platform_get_drvdata(pdev);

    twl4030_charger_enable_ac(false);
    twl4030_charger_enable_usb(bci, false);

    /* mask interrupts */
    twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, 0xff,
                     TWL4030_INTERRUPTS_BCIIMR1A);
    twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, 0xff,
                     TWL4030_INTERRUPTS_BCIIMR2A);

    if (bci->transceiver != NULL) {
        otg_unregister_notifier(bci->transceiver, &bci->otg_nb);
        otg_put_transceiver(bci->transceiver);
    }
    free_irq(bci->irq_bci, bci);
    free_irq(bci->irq_chg, bci);
    power_supply_unregister(&bci->usb);
    power_supply_unregister(&bci->ac);
    platform_set_drvdata(pdev, NULL);
    kfree(bci);

    return 0;
}
Example #3
0
static int omap2430_musb_exit(struct musb *musb)
{
	del_timer_sync(&musb_idle_timer);

	otg_unregister_notifier(musb->xceiv, &musb->nb);
	destroy_workqueue(musb->otg_notifier_wq);
	omap2430_low_level_exit(musb);
	otg_put_transceiver(musb->xceiv);

	return 0;
}
Example #4
0
static int __devexit isp1704_charger_remove(struct platform_device *pdev)
{
	struct isp1704_charger *isp = platform_get_drvdata(pdev);

	otg_unregister_notifier(isp->otg, &isp->nb);
	power_supply_unregister(&isp->psy);
	otg_put_transceiver(isp->otg);
	kfree(isp);

	return 0;
}
Example #5
0
int musb_platform_exit(struct musb *musb)
{

	if (cpu_is_omap44xx()) {
		/* register for transciever notification*/
		otg_unregister_notifier(musb->xceiv, &musb->nb);
		wake_lock_destroy(&usb_lock);
	}
	musb_platform_suspend(musb);

	return 0;
}
Example #6
0
int musb_platform_exit(struct musb *musb)
{
	struct device *dev = musb->controller;
	struct musb_hdrc_platform_data *plat = dev->platform_data;

      /* unregister for transciever notification*/
		otg_unregister_notifier(musb->xceiv, &musb->nb);
	wake_lock_destroy(&plat->musb_lock);
	musb_platform_suspend(musb);
	if (cpu_is_omap44xx()) {
		iounmap(ctrl_base);
		iounmap(phymux_base);
	}
	return 0;
}
static int __devexit bq2416x_charger_remove(struct i2c_client *client)
{
	struct bq2416x_device_info *di = i2c_get_clientdata(client);

	sysfs_remove_group(&client->dev.kobj, &bq2416x_attr_group);
#if BQ2416X_USE_WAKE_LOCK
	wake_lock_destroy(&di->charger_wake_lock);
#endif
	cancel_delayed_work_sync(&di->bq2416x_charger_work);
	//flush_scheduled_work();
	//twl6030_unregister_notifier(&di->nb, 1);
	otg_unregister_notifier(di->otg, &di->nb_otg);
	kfree(di);

	return 0;
}
Example #8
0
static int __init twl4030_bci_probe(struct platform_device *pdev)
{
    struct twl4030_bci *bci;
    int ret;
    u32 reg;

    bci = kzalloc(sizeof(*bci), GFP_KERNEL);
    if (bci == NULL)
        return -ENOMEM;

    bci->dev = &pdev->dev;
    bci->irq_chg = platform_get_irq(pdev, 0);
    bci->irq_bci = platform_get_irq(pdev, 1);

    platform_set_drvdata(pdev, bci);

    bci->ac.name = "twl4030_ac";
    bci->ac.type = POWER_SUPPLY_TYPE_MAINS;
    bci->ac.properties = twl4030_charger_props;
    bci->ac.num_properties = ARRAY_SIZE(twl4030_charger_props);
    bci->ac.get_property = twl4030_bci_get_property;

    ret = power_supply_register(&pdev->dev, &bci->ac);
    if (ret) {
        dev_err(&pdev->dev, "failed to register ac: %d\n", ret);
        goto fail_register_ac;
    }

    bci->usb.name = "twl4030_usb";
    bci->usb.type = POWER_SUPPLY_TYPE_USB;
    bci->usb.properties = twl4030_charger_props;
    bci->usb.num_properties = ARRAY_SIZE(twl4030_charger_props);
    bci->usb.get_property = twl4030_bci_get_property;

    ret = power_supply_register(&pdev->dev, &bci->usb);
    if (ret) {
        dev_err(&pdev->dev, "failed to register usb: %d\n", ret);
        goto fail_register_usb;
    }

    ret = request_threaded_irq(bci->irq_chg, NULL,
                               twl4030_charger_interrupt, 0, pdev->name, bci);
    if (ret < 0) {
        dev_err(&pdev->dev, "could not request irq %d, status %d\n",
                bci->irq_chg, ret);
        goto fail_chg_irq;
    }

    ret = request_threaded_irq(bci->irq_bci, NULL,
                               twl4030_bci_interrupt, 0, pdev->name, bci);
    if (ret < 0) {
        dev_err(&pdev->dev, "could not request irq %d, status %d\n",
                bci->irq_bci, ret);
        goto fail_bci_irq;
    }

    INIT_WORK(&bci->work, twl4030_bci_usb_work);

    bci->transceiver = otg_get_transceiver();
    if (bci->transceiver != NULL) {
        bci->otg_nb.notifier_call = twl4030_bci_usb_ncb;
        otg_register_notifier(bci->transceiver, &bci->otg_nb);
    }

    /* Enable interrupts now. */
    reg = ~(u32)(TWL4030_ICHGLOW | TWL4030_ICHGEOC | TWL4030_TBATOR2 |
                 TWL4030_TBATOR1 | TWL4030_BATSTS);
    ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, reg,
                           TWL4030_INTERRUPTS_BCIIMR1A);
    if (ret < 0) {
        dev_err(&pdev->dev, "failed to unmask interrupts: %d\n", ret);
        goto fail_unmask_interrupts;
    }

    reg = ~(u32)(TWL4030_VBATOV | TWL4030_VBUSOV | TWL4030_ACCHGOV);
    ret = twl_i2c_write_u8(TWL4030_MODULE_INTERRUPTS, reg,
                           TWL4030_INTERRUPTS_BCIIMR2A);
    if (ret < 0)
        dev_warn(&pdev->dev, "failed to unmask interrupts: %d\n", ret);

    twl4030_charger_enable_ac(true);
    twl4030_charger_enable_usb(bci, true);

    return 0;

fail_unmask_interrupts:
    if (bci->transceiver != NULL) {
        otg_unregister_notifier(bci->transceiver, &bci->otg_nb);
        otg_put_transceiver(bci->transceiver);
    }
    free_irq(bci->irq_bci, bci);
fail_bci_irq:
    free_irq(bci->irq_chg, bci);
fail_chg_irq:
    power_supply_unregister(&bci->usb);
fail_register_usb:
    power_supply_unregister(&bci->ac);
fail_register_ac:
    platform_set_drvdata(pdev, NULL);
    kfree(bci);

    return ret;
}