static GstStateChangeReturn change_state(GstElement *element, GstStateChange transition) { GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstDspDummy *self; self = GST_DSP_DUMMY(element); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: if (!dsp_init(self)) { GST_ERROR("dsp init failed"); return GST_STATE_CHANGE_FAILURE; } break; case GST_STATE_CHANGE_READY_TO_PAUSED: if (!dsp_start(self)) { GST_ERROR("dsp start failed"); return GST_STATE_CHANGE_FAILURE; } break; default: break; } ret = parent_class->change_state(element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; switch (transition) { case GST_STATE_CHANGE_PAUSED_TO_READY: if (!dsp_stop(self)) { GST_ERROR("dsp stop failed"); return GST_STATE_CHANGE_FAILURE; } break; case GST_STATE_CHANGE_READY_TO_NULL: if (!dsp_deinit(self)) { GST_ERROR("dsp deinit failed"); return GST_STATE_CHANGE_FAILURE; } break; default: break; } return ret; }
static int __devexit omap34_xx_bridge_remove(struct platform_device *pdev) { dev_t devno; bool ret; int status = 0; bhandle hdrv_obj = NULL; status = cfg_get_object((u32 *) &hdrv_obj, REG_DRV_OBJECT); if (DSP_FAILED(status)) goto func_cont; #ifdef CONFIG_BRIDGE_DVFS if (cpufreq_unregister_notifier(&iva_clk_notifier, CPUFREQ_TRANSITION_NOTIFIER)) pr_err("%s: clk_notifier_unregister failed for iva2_ck\n", __func__); #endif /* #ifdef CONFIG_BRIDGE_DVFS */ if (driver_context) { /* Put the DSP in reset state */ ret = dsp_deinit(driver_context); driver_context = 0; DBC_ASSERT(ret == true); } #ifdef CONFIG_BRIDGE_DVFS clk_put(clk_handle); clk_handle = NULL; #endif /* #ifdef CONFIG_BRIDGE_DVFS */ func_cont: mem_ext_phys_pool_release(); services_exit(); bridge_destroy_sysfs(); devno = MKDEV(driver_major, 0); cdev_del(&bridge_cdev); unregister_chrdev_region(devno, 1); if (bridge_class) { /* remove the device from sysfs */ device_destroy(bridge_class, MKDEV(driver_major, 0)); class_destroy(bridge_class); } return 0; }
static int __devexit omap34_xx_bridge_remove(struct platform_device *pdev) { dev_t devno; int status = 0; struct drv_data *drv_datap = dev_get_drvdata(bridge); if (!drv_datap || !drv_datap->drv_object) { status = -ENODATA; pr_err("%s: Failed to retrieve the object handle\n", __func__); goto func_cont; } #ifdef CONFIG_TIDSPBRIDGE_DVFS if (cpufreq_unregister_notifier(&iva_clk_notifier, CPUFREQ_TRANSITION_NOTIFIER)) pr_err("%s: cpufreq_unregister_notifier failed for iva2_ck\n", __func__); #endif if (driver_context) { dsp_deinit(driver_context); driver_context = 0; } kfree(drv_datap); dev_set_drvdata(bridge, NULL); func_cont: mem_ext_phys_pool_release(); dsp_clk_exit(); devno = MKDEV(driver_major, 0); cdev_del(&bridge_cdev); unregister_chrdev_region(devno, 1); if (bridge_class) { device_destroy(bridge_class, MKDEV(driver_major, 0)); class_destroy(bridge_class); } return 0; }