diff --git a/driver/platform/common/inc/msm_vidc_platform.h b/driver/platform/common/inc/msm_vidc_platform.h index a454812535..ed68427b14 100644 --- a/driver/platform/common/inc/msm_vidc_platform.h +++ b/driver/platform/common/inc/msm_vidc_platform.h @@ -170,9 +170,7 @@ struct msm_platform_inst_cap_dependency { struct msm_vidc_compat_handle { const char *compat; int (*init_platform)(struct msm_vidc_core *core); - int (*deinit_platform)(struct msm_vidc_core *core); int (*init_iris)(struct msm_vidc_core *core); - int (*deinit_iris)(struct msm_vidc_core *core); }; struct msm_vidc_csc_coeff { @@ -281,8 +279,7 @@ static inline bool is_mmrm_supported(struct msm_vidc_core *core) return !!core->platform->data.supports_mmrm; } -int msm_vidc_init_platform(struct platform_device *pdev); -int msm_vidc_deinit_platform(struct platform_device *pdev); +int msm_vidc_init_platform(struct msm_vidc_core *core); /* control framework support functions */ diff --git a/driver/platform/common/src/msm_vidc_platform.c b/driver/platform/common/src/msm_vidc_platform.c index 092e179cb9..a6d32c5bf4 100644 --- a/driver/platform/common/src/msm_vidc_platform.c +++ b/driver/platform/common/src/msm_vidc_platform.c @@ -211,41 +211,31 @@ static const struct msm_vidc_compat_handle compat_handle[] = { { .compat = "qcom,sm8650-vidc", .init_platform = msm_vidc_init_platform_pineapple, - .deinit_platform = msm_vidc_deinit_platform_pineapple, .init_iris = msm_vidc_init_iris33, - .deinit_iris = msm_vidc_deinit_iris33, }, { .compat = "qcom,sm8650-vidc-v2", .init_platform = msm_vidc_init_platform_pineapple, - .deinit_platform = msm_vidc_deinit_platform_pineapple, .init_iris = msm_vidc_init_iris33, - .deinit_iris = msm_vidc_deinit_iris33, }, #endif #if defined(CONFIG_MSM_VIDC_KALAMA) { .compat = "qcom,sm8550-vidc", .init_platform = msm_vidc_init_platform_kalama, - .deinit_platform = msm_vidc_deinit_platform_kalama, .init_iris = msm_vidc_init_iris3, - .deinit_iris = msm_vidc_deinit_iris3, }, { .compat = "qcom,sm8550-vidc-v2", .init_platform = msm_vidc_init_platform_kalama, - .deinit_platform = msm_vidc_deinit_platform_kalama, .init_iris = msm_vidc_init_iris3, - .deinit_iris = msm_vidc_deinit_iris3, }, #endif #if defined(CONFIG_MSM_VIDC_WAIPIO) { .compat = "qcom,sm8450-vidc", .init_platform = msm_vidc_init_platform_waipio, - .deinit_platform = msm_vidc_deinit_platform_waipio, .init_iris = msm_vidc_init_iris2, - .deinit_iris = msm_vidc_deinit_iris2, }, #endif }; @@ -285,41 +275,6 @@ static int msm_vidc_init_ops(struct msm_vidc_core *core) return 0; } -static int msm_vidc_deinit_platform_variant(struct msm_vidc_core *core) -{ - struct device *dev = NULL; - int i, rc = 0; - - if (!core || !core->pdev) { - d_vpr_e("%s: Invalid params\n", __func__); - return -EINVAL; - } - dev = &core->pdev->dev; - - d_vpr_h("%s()\n", __func__); - - /* select platform based on compatible match */ - for (i = 0; i < ARRAY_SIZE(compat_handle); i++) { - if (of_device_is_compatible(dev->of_node, compat_handle[i].compat)) { - rc = compat_handle[i].deinit_platform(core); - if (rc) { - d_vpr_e("%s: (%s) init failed with %d\n", - __func__, compat_handle[i].compat, rc); - return rc; - } - break; - } - } - - /* handle unknown compat type */ - if (i == ARRAY_SIZE(compat_handle)) { - d_vpr_e("%s: Unsupported device: (%s)\n", __func__, dev_name(dev)); - return -EINVAL; - } - - return rc; -} - static int msm_vidc_init_platform_variant(struct msm_vidc_core *core) { struct device *dev = NULL; @@ -355,39 +310,6 @@ static int msm_vidc_init_platform_variant(struct msm_vidc_core *core) return rc; } -static int msm_vidc_deinit_vpu(struct msm_vidc_core *core) -{ - struct device *dev = NULL; - int i, rc = 0; - - if (!core || !core->pdev) { - d_vpr_e("%s: Invalid params\n", __func__); - return -EINVAL; - } - dev = &core->pdev->dev; - - /* select platform based on compatible match */ - for (i = 0; i < ARRAY_SIZE(compat_handle); i++) { - if (of_device_is_compatible(dev->of_node, compat_handle[i].compat)) { - rc = compat_handle[i].deinit_iris(core); - if (rc) { - d_vpr_e("%s: (%s) init failed with %d\n", - __func__, compat_handle[i].compat, rc); - return rc; - } - break; - } - } - - /* handle unknown compat type */ - if (i == ARRAY_SIZE(compat_handle)) { - d_vpr_e("%s: Unsupported device: (%s)\n", __func__, dev_name(dev)); - return -EINVAL; - } - - return rc; -} - static int msm_vidc_init_vpu(struct msm_vidc_core *core) { struct device *dev = NULL; @@ -421,55 +343,24 @@ static int msm_vidc_init_vpu(struct msm_vidc_core *core) return rc; } -int msm_vidc_deinit_platform(struct platform_device *pdev) -{ - struct msm_vidc_core *core; - - if (!pdev) { - d_vpr_e("%s: invalid params\n", __func__); - return -EINVAL; - } - - core = dev_get_drvdata(&pdev->dev); - if (!core) { - d_vpr_e("%s: core not found in device %s", - __func__, dev_name(&pdev->dev)); - return -EINVAL; - } - - d_vpr_h("%s()\n", __func__); - - msm_vidc_deinit_vpu(core); - msm_vidc_deinit_platform_variant(core); - - msm_vidc_vmem_free((void **)&core->platform); - return 0; -} - -int msm_vidc_init_platform(struct platform_device *pdev) +int msm_vidc_init_platform(struct msm_vidc_core *core) { int rc = 0; struct msm_vidc_platform *platform = NULL; - struct msm_vidc_core *core; - - if (!pdev) { - d_vpr_e("%s: invalid params\n", __func__); - return -EINVAL; - } d_vpr_h("%s()\n", __func__); - core = dev_get_drvdata(&pdev->dev); if (!core) { - d_vpr_e("%s: core not found in device %s", - __func__, dev_name(&pdev->dev)); + d_vpr_e("%s: invalid param\n", __func__); return -EINVAL; } - rc = msm_vidc_vmem_alloc(sizeof(struct msm_vidc_platform), - (void **)&platform, __func__); - if (rc) - return rc; + platform = devm_kzalloc(&core->pdev->dev, + sizeof(struct msm_vidc_platform), GFP_KERNEL); + if (!platform) { + d_vpr_e("%s: failed to alloc memory for platform\n", __func__); + return -ENOMEM; + } core->platform = platform; platform->core = core; diff --git a/driver/platform/kalama/inc/msm_vidc_kalama.h b/driver/platform/kalama/inc/msm_vidc_kalama.h index 8fd11db56c..7ba1fc88b1 100644 --- a/driver/platform/kalama/inc/msm_vidc_kalama.h +++ b/driver/platform/kalama/inc/msm_vidc_kalama.h @@ -11,17 +11,11 @@ #if defined(CONFIG_MSM_VIDC_KALAMA) int msm_vidc_init_platform_kalama(struct msm_vidc_core *core); -int msm_vidc_deinit_platform_kalama(struct msm_vidc_core *core); #else int msm_vidc_init_platform_kalama(struct msm_vidc_core *core) { return -EINVAL; } - -int msm_vidc_deinit_platform_kalama(struct msm_vidc_core *core) -{ - return -EINVAL; -} #endif #endif // _MSM_VIDC_KALAMA_H_ diff --git a/driver/platform/kalama/src/msm_vidc_kalama.c b/driver/platform/kalama/src/msm_vidc_kalama.c index 4d54aa3e45..e75ba5a0e0 100644 --- a/driver/platform/kalama/src/msm_vidc_kalama.c +++ b/driver/platform/kalama/src/msm_vidc_kalama.c @@ -2822,9 +2822,3 @@ int msm_vidc_init_platform_kalama(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_platform_kalama(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} diff --git a/driver/platform/pineapple/inc/msm_vidc_pineapple.h b/driver/platform/pineapple/inc/msm_vidc_pineapple.h index 17f16a2b66..9f474bbf60 100644 --- a/driver/platform/pineapple/inc/msm_vidc_pineapple.h +++ b/driver/platform/pineapple/inc/msm_vidc_pineapple.h @@ -11,17 +11,11 @@ #if defined(CONFIG_MSM_VIDC_PINEAPPLE) int msm_vidc_init_platform_pineapple(struct msm_vidc_core *core); -int msm_vidc_deinit_platform_pineapple(struct msm_vidc_core *core); #else int msm_vidc_init_platform_pineapple(struct msm_vidc_core *core) { return -EINVAL; } - -int msm_vidc_deinit_platform_pineapple(struct msm_vidc_core *core) -{ - return -EINVAL; -} #endif #endif // _MSM_VIDC_PINEAPPLE_H_ diff --git a/driver/platform/pineapple/src/msm_vidc_pineapple.c b/driver/platform/pineapple/src/msm_vidc_pineapple.c index d9751bf14d..9aa01bf6f1 100644 --- a/driver/platform/pineapple/src/msm_vidc_pineapple.c +++ b/driver/platform/pineapple/src/msm_vidc_pineapple.c @@ -3009,9 +3009,3 @@ int msm_vidc_init_platform_pineapple(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_platform_pineapple(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} diff --git a/driver/platform/pineapple/src/pineapple.c b/driver/platform/pineapple/src/pineapple.c index 74bc8fd1b1..797e85e6cd 100644 --- a/driver/platform/pineapple/src/pineapple.c +++ b/driver/platform/pineapple/src/pineapple.c @@ -1767,10 +1767,3 @@ int msm_vidc_init_platform_pineapple(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_platform_pineapple(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} - diff --git a/driver/platform/waipio/inc/msm_vidc_waipio.h b/driver/platform/waipio/inc/msm_vidc_waipio.h index 1eebe1ede8..a715680d0c 100644 --- a/driver/platform/waipio/inc/msm_vidc_waipio.h +++ b/driver/platform/waipio/inc/msm_vidc_waipio.h @@ -14,7 +14,6 @@ struct context_bank_info *msm_vidc_context_bank(struct msm_vidc_core *core, enum msm_vidc_buffer_region region); int msm_vidc_init_platform_waipio(struct msm_vidc_core *core); -int msm_vidc_deinit_platform_waipio(struct msm_vidc_core *core); #else struct context_bank_info *msm_vidc_context_bank(struct msm_vidc_core *core, enum msm_vidc_buffer_region region) @@ -26,11 +25,6 @@ int msm_vidc_init_platform_waipio(struct msm_vidc_core *core) { return -EINVAL; } - -int msm_vidc_deinit_platform_waipio(struct msm_vidc_core *core) -{ - return -EINVAL; -} #endif #endif // _MSM_VIDC_WAIPIO_H_ diff --git a/driver/platform/waipio/src/waipio.c b/driver/platform/waipio/src/waipio.c index 9c6d802653..d1da92fcf5 100644 --- a/driver/platform/waipio/src/waipio.c +++ b/driver/platform/waipio/src/waipio.c @@ -1857,9 +1857,3 @@ int msm_vidc_init_platform_waipio(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_platform_waipio(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} diff --git a/driver/variant/iris2/inc/msm_vidc_iris2.h b/driver/variant/iris2/inc/msm_vidc_iris2.h index fcb54a7e82..47ade5df66 100644 --- a/driver/variant/iris2/inc/msm_vidc_iris2.h +++ b/driver/variant/iris2/inc/msm_vidc_iris2.h @@ -11,7 +11,6 @@ #if defined(CONFIG_MSM_VIDC_WAIPIO) int msm_vidc_init_iris2(struct msm_vidc_core *core); -int msm_vidc_deinit_iris2(struct msm_vidc_core *core); int msm_vidc_adjust_blur_type_iris2(void *instance, struct v4l2_ctrl *ctrl); #else static inline int msm_vidc_init_iris2(struct msm_vidc_core *core) @@ -19,11 +18,6 @@ static inline int msm_vidc_init_iris2(struct msm_vidc_core *core) return -EINVAL; } -static inline int msm_vidc_deinit_iris2(struct msm_vidc_core *core) -{ - return -EINVAL; -} - static inline int msm_vidc_adjust_blur_type_iris2(void *instance, struct v4l2_ctrl *ctrl) { return -EINVAL; diff --git a/driver/variant/iris2/src/msm_vidc_iris2.c b/driver/variant/iris2/src/msm_vidc_iris2.c index cd177477e0..d2bc879923 100644 --- a/driver/variant/iris2/src/msm_vidc_iris2.c +++ b/driver/variant/iris2/src/msm_vidc_iris2.c @@ -1014,9 +1014,3 @@ int msm_vidc_init_iris2(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_iris2(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} diff --git a/driver/variant/iris3/inc/msm_vidc_iris3.h b/driver/variant/iris3/inc/msm_vidc_iris3.h index 8a4cece4cf..75ba4decc3 100644 --- a/driver/variant/iris3/inc/msm_vidc_iris3.h +++ b/driver/variant/iris3/inc/msm_vidc_iris3.h @@ -11,7 +11,6 @@ #if defined(CONFIG_MSM_VIDC_KALAMA) int msm_vidc_init_iris3(struct msm_vidc_core *core); -int msm_vidc_deinit_iris3(struct msm_vidc_core *core); int msm_vidc_adjust_bitrate_boost_iris3(void *instance, struct v4l2_ctrl *ctrl); #else static inline int msm_vidc_init_iris3(struct msm_vidc_core *core) @@ -19,11 +18,6 @@ static inline int msm_vidc_init_iris3(struct msm_vidc_core *core) return -EINVAL; } -static inline int msm_vidc_deinit_iris3(struct msm_vidc_core *core) -{ - return -EINVAL; -} - static inline int msm_vidc_adjust_bitrate_boost_iris3(void *instance, struct v4l2_ctrl *ctrl) { return -EINVAL; diff --git a/driver/variant/iris3/src/msm_vidc_iris3.c b/driver/variant/iris3/src/msm_vidc_iris3.c index 42e31305df..df96e03f12 100644 --- a/driver/variant/iris3/src/msm_vidc_iris3.c +++ b/driver/variant/iris3/src/msm_vidc_iris3.c @@ -1095,9 +1095,3 @@ int msm_vidc_init_iris3(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_iris3(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} diff --git a/driver/variant/iris33/inc/msm_vidc_iris33.h b/driver/variant/iris33/inc/msm_vidc_iris33.h index af23941d52..d4e37bc8a7 100644 --- a/driver/variant/iris33/inc/msm_vidc_iris33.h +++ b/driver/variant/iris33/inc/msm_vidc_iris33.h @@ -11,7 +11,6 @@ #if defined(CONFIG_MSM_VIDC_PINEAPPLE) int msm_vidc_init_iris33(struct msm_vidc_core *core); -int msm_vidc_deinit_iris33(struct msm_vidc_core *core); int msm_vidc_adjust_bitrate_boost_iris33(void *instance, struct v4l2_ctrl *ctrl); #else static inline int msm_vidc_init_iris33(struct msm_vidc_core *core) @@ -19,11 +18,6 @@ static inline int msm_vidc_init_iris33(struct msm_vidc_core *core) return -EINVAL; } -static inline int msm_vidc_deinit_iris33(struct msm_vidc_core *core) -{ - return -EINVAL; -} - static inline int msm_vidc_adjust_bitrate_boost_iris33(void *instance, struct v4l2_ctrl *ctrl) { return -EINVAL; diff --git a/driver/variant/iris33/src/msm_vidc_iris33.c b/driver/variant/iris33/src/msm_vidc_iris33.c index 545d42f88d..f71af42478 100644 --- a/driver/variant/iris33/src/msm_vidc_iris33.c +++ b/driver/variant/iris33/src/msm_vidc_iris33.c @@ -1344,9 +1344,3 @@ int msm_vidc_init_iris33(struct msm_vidc_core *core) return 0; } - -int msm_vidc_deinit_iris33(struct msm_vidc_core *core) -{ - /* do nothing */ - return 0; -} diff --git a/driver/vidc/inc/msm_vidc_driver.h b/driver/vidc/inc/msm_vidc_driver.h index b7c503c888..1a1714082b 100644 --- a/driver/vidc/inc/msm_vidc_driver.h +++ b/driver/vidc/inc/msm_vidc_driver.h @@ -562,7 +562,6 @@ bool msm_vidc_is_super_buffer(struct msm_vidc_inst *inst); int msm_vidc_init_core_caps(struct msm_vidc_core *core); int msm_vidc_init_instance_caps(struct msm_vidc_core *core); int msm_vidc_deinit_core_caps(struct msm_vidc_core *core); -int msm_vidc_deinit_instance_caps(struct msm_vidc_core *core); int msm_vidc_update_debug_str(struct msm_vidc_inst *inst); void msm_vidc_allow_dcvs(struct msm_vidc_inst *inst); bool msm_vidc_allow_decode_batch(struct msm_vidc_inst *inst); diff --git a/driver/vidc/src/msm_vidc_driver.c b/driver/vidc/src/msm_vidc_driver.c index 8c7f2633be..4f5cd5dae2 100644 --- a/driver/vidc/src/msm_vidc_driver.c +++ b/driver/vidc/src/msm_vidc_driver.c @@ -3575,22 +3575,6 @@ static int update_inst_cap_dependency( return 0; } -int msm_vidc_deinit_instance_caps(struct msm_vidc_core *core) -{ - int rc = 0; - - if (!core) { - d_vpr_e("%s: invalid params\n", __func__); - return -EINVAL; - } - - msm_vidc_vmem_free((void **)&core->inst_caps); - core->inst_caps = NULL; - d_vpr_h("%s: core->inst_caps freed\n", __func__); - - return rc; -} - int msm_vidc_init_instance_caps(struct msm_vidc_core *core) { int rc = 0; @@ -3635,10 +3619,13 @@ int msm_vidc_init_instance_caps(struct msm_vidc_core *core) core->dec_codecs_count = dec_codecs_count; codecs_count = enc_codecs_count + dec_codecs_count; - rc = msm_vidc_vmem_alloc(codecs_count * sizeof(struct msm_vidc_inst_capability), - (void **)&core->inst_caps, __func__); - if (rc) + core->inst_caps = devm_kzalloc(&core->pdev->dev, + codecs_count * sizeof(struct msm_vidc_inst_capability), GFP_KERNEL); + if (!core->inst_caps) { + d_vpr_e("%s: failed to alloc memory for instance caps\n", __func__); + rc = -ENOMEM; goto error; + } check_bit = 0; /* determine codecs for enc domain */ diff --git a/driver/vidc/src/msm_vidc_probe.c b/driver/vidc/src/msm_vidc_probe.c index 59aa0cb610..3fa4208e65 100644 --- a/driver/vidc/src/msm_vidc_probe.c +++ b/driver/vidc/src/msm_vidc_probe.c @@ -361,11 +361,6 @@ static int msm_vidc_deinitialize_core(struct msm_vidc_core *core) mutex_destroy(&core->lock); msm_vidc_update_core_state(core, MSM_VIDC_CORE_DEINIT, __func__); - msm_vidc_vmem_free((void **)&core->response_packet); - msm_vidc_vmem_free((void **)&core->packet); - core->response_packet = NULL; - core->packet = NULL; - if (core->batch_workq) destroy_workqueue(core->batch_workq); @@ -405,15 +400,19 @@ static int msm_vidc_initialize_core(struct msm_vidc_core *core) } core->packet_size = VIDC_IFACEQ_VAR_HUGE_PKT_SIZE; - rc = msm_vidc_vmem_alloc(core->packet_size, - (void **)&core->packet, "core packet"); - if (rc) + core->packet = devm_kzalloc(&core->pdev->dev, core->packet_size, GFP_KERNEL); + if (!core->packet) { + d_vpr_e("%s: failed to alloc core packet\n", __func__); + rc = -ENOMEM; goto exit; + } - rc = msm_vidc_vmem_alloc(core->packet_size, - (void **)&core->response_packet, "core response packet"); - if (rc) + core->response_packet = devm_kzalloc(&core->pdev->dev, core->packet_size, GFP_KERNEL); + if (!core->packet) { + d_vpr_e("%s: failed to alloc core response packet\n", __func__); + rc = -ENOMEM; goto exit; + } mutex_init(&core->lock); INIT_LIST_HEAD(&core->instances); @@ -425,10 +424,6 @@ static int msm_vidc_initialize_core(struct msm_vidc_core *core) return 0; exit: - msm_vidc_vmem_free((void **)&core->response_packet); - msm_vidc_vmem_free((void **)&core->packet); - core->response_packet = NULL; - core->packet = NULL; if (core->batch_workq) destroy_workqueue(core->batch_workq); if (core->pm_workq) @@ -439,6 +434,65 @@ exit: return rc; } +static void msm_vidc_devm_deinit_core(void *res) +{ + struct msm_vidc_core *core = res; + + d_vpr_h("%s()\n", __func__); + msm_vidc_deinitialize_core(core); +} + +static int msm_vidc_devm_init_core(struct device *dev, struct msm_vidc_core *core) +{ + int rc = 0; + + if (!dev || !core) { + d_vpr_e("%s: invalid params\n", __func__); + return -EINVAL; + } + + rc = msm_vidc_initialize_core(core); + if (rc) { + d_vpr_e("%s: init failed with %d\n", __func__, rc); + return rc; + } + + rc = devm_add_action_or_reset(dev, msm_vidc_devm_deinit_core, (void *)core); + if (rc) + return -EINVAL; + + return rc; +} + +static void msm_vidc_devm_debugfs_put(void *res) +{ + struct dentry *parent = res; + + d_vpr_h("%s()\n", __func__); + debugfs_remove_recursive(parent); +} + +static struct dentry *msm_vidc_devm_debugfs_get(struct device *dev) +{ + struct dentry *parent = NULL; + int rc = 0; + + if (!dev) { + d_vpr_e("%s: invalid params\n", __func__); + return NULL; + } + + parent = msm_vidc_debugfs_init_drv(); + if (!parent) + return NULL; + + rc = devm_add_action_or_reset(dev, msm_vidc_devm_debugfs_put, (void *)parent); + if (rc) + return NULL; + + return parent; +} + static int msm_vidc_setup_context_bank(struct msm_vidc_core *core, struct device *dev) { @@ -674,14 +728,7 @@ static int msm_vidc_remove_video_device(struct platform_device *pdev) sysfs_remove_group(&pdev->dev.kobj, &msm_vidc_core_attr_group); - msm_vidc_deinit_instance_caps(core); - - msm_vidc_deinit_platform(pdev); - msm_vidc_deinitialize_core(core); - dev_set_drvdata(&pdev->dev, NULL); - debugfs_remove_recursive(core->debugfs_parent); - msm_vidc_vmem_free((void **)&core); g_core = NULL; d_vpr_h("%s(): succssful\n", __func__); @@ -724,25 +771,27 @@ static int msm_vidc_probe_video_device(struct platform_device *pdev) d_vpr_h("%s: %s\n", __func__, dev_name(&pdev->dev)); - rc = msm_vidc_vmem_alloc(sizeof(*core), (void **)&core, __func__); - if (rc) - return rc; + core = devm_kzalloc(&pdev->dev, sizeof(struct msm_vidc_core), GFP_KERNEL); + if (!core) { + d_vpr_e("%s: failed to alloc memory for core\n", __func__); + return -ENOMEM; + } g_core = core; - core->debugfs_parent = msm_vidc_debugfs_init_drv(); - if (!core->debugfs_parent) - d_vpr_h("Failed to create debugfs for msm_vidc\n"); - core->pdev = pdev; dev_set_drvdata(&pdev->dev, core); - rc = msm_vidc_initialize_core(core); + core->debugfs_parent = msm_vidc_devm_debugfs_get(&pdev->dev); + if (!core->debugfs_parent) + d_vpr_h("Failed to create debugfs for msm_vidc\n"); + + rc = msm_vidc_devm_init_core(&pdev->dev, core); if (rc) { d_vpr_e("%s: init core failed with %d\n", __func__, rc); goto init_core_failed; } - rc = msm_vidc_init_platform(pdev); + rc = msm_vidc_init_platform(core); if (rc) { d_vpr_e("%s: init platform failed with %d\n", __func__, rc); rc = -EINVAL; @@ -839,16 +888,11 @@ master_add_failed: sub_dev_failed: sysfs_remove_group(&pdev->dev.kobj, &msm_vidc_core_attr_group); init_group_failed: - msm_vidc_deinit_instance_caps(core); init_inst_caps_fail: init_res_failed: - msm_vidc_deinit_platform(pdev); init_plat_failed: - msm_vidc_deinitialize_core(core); init_core_failed: dev_set_drvdata(&pdev->dev, NULL); - debugfs_remove_recursive(core->debugfs_parent); - msm_vidc_vmem_free((void **)&core); g_core = NULL; return rc;