static void buzzer_pwm_remove(struct device_t * dev) { struct buzzer_t * buzzer = (struct buzzer_t *)dev->priv; struct buzzer_pwm_pdata_t * pdat = (struct buzzer_pwm_pdata_t *)buzzer->priv; if(buzzer && unregister_buzzer(buzzer)) { timer_cancel(&pdat->timer); queue_free(pdat->queue, iter_queue_node); free_device_name(buzzer->name); free(buzzer->priv); free(buzzer); } }
static bool_t buzzer_gpio_unregister_buzzer(struct resource_t * res) { struct buzzer_gpio_pdata_t * pdat; struct buzzer_t * buzzer; char name[64]; snprintf(name, sizeof(name), "%s.%d", res->name, res->id); buzzer = search_buzzer(name); if(!buzzer) return FALSE; pdat = (struct buzzer_gpio_pdata_t *)buzzer->priv; if(!unregister_buzzer(buzzer)) return FALSE; timer_cancel(&pdat->timer); queue_free(pdat->beep, iteration_beep_param); free(buzzer->priv); free(buzzer->name); free(buzzer); return TRUE; }