void pwm_release(struct pwm_device *p) { mutex_lock(&device_list_mutex); if (!test_and_clear_bit(FLAG_REQUESTED, &p->flags)) { pr_debug("%s pwm device is not requested!\n", dev_name(p->dev)); goto done; } pwm_stop(p); pwm_unsynchronize(p, NULL); pwm_set_handler(p, NULL, NULL); p->label = NULL; p->pid = -1; if (p->ops->release) p->ops->release(p); done: mutex_unlock(&device_list_mutex); }
pwm_result_t pwm_unsync(pwm_handle handle, pwm_handle from_handle) { struct pwm_internal *pwm, *from_pwm; struct pwm_channel *p, *from_p; pwm_result_t ret = PWM_OK; pwm = (pwm_internal *)handle; from_pwm = (pwm_internal *)from_handle; if (!pwm || (PWM_MAGIC !=pwm->magic) || !pwm->data || \ !from_pwm || (PWM_MAGIC != from_pwm->magic) || !from_pwm->data) { return PWM_INVALID_PARAM; } p = (struct pwm_channel *)pwm->data; from_p = (struct pwm_channel *)from_pwm->data; if (pwm_unsynchronize(p, from_p)) { ret = PWM_NOT_IMPLEMENTED; } return ret; }