in qcom-ngd-ctrl.c [1250:1284]
static int qcom_slim_ngd_enable(struct qcom_slim_ngd_ctrl *ctrl, bool enable)
{
if (enable) {
int ret = qcom_slim_qmi_init(ctrl, false);
if (ret) {
dev_err(ctrl->dev, "qmi init fail, ret:%d, state:%d\n",
ret, ctrl->state);
return ret;
}
/* controller state should be in sync with framework state */
complete(&ctrl->qmi.qmi_comp);
if (!pm_runtime_enabled(ctrl->ctrl.dev) ||
!pm_runtime_suspended(ctrl->ctrl.dev))
qcom_slim_ngd_runtime_resume(ctrl->ctrl.dev);
else
pm_runtime_resume(ctrl->ctrl.dev);
pm_runtime_mark_last_busy(ctrl->ctrl.dev);
pm_runtime_put(ctrl->ctrl.dev);
ret = slim_register_controller(&ctrl->ctrl);
if (ret) {
dev_err(ctrl->dev, "error adding slim controller\n");
return ret;
}
dev_info(ctrl->dev, "SLIM controller Registered\n");
} else {
qcom_slim_qmi_exit(ctrl);
slim_unregister_controller(&ctrl->ctrl);
}
return 0;
}