/*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; }
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; }
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; }
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; }
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; }
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; }
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; }