+static inline
+void pxmcc_axis_cur_dq_raw2filt(int *p_cur, int32_t cur_raw)
+{
+ int cur_div;
+ int32_t cur;
+ cur_div = cur_raw & 0x1f;
+ cur = cur_raw / cur_div;
+ cur += (1 << 11) | 0x20;
+ *p_cur = cur >> 12;
+}
+
+
+void pxmcc_axis_get_cur_dq_filt(pxmc_state_t *mcs, int *p_cur_d, int *p_cur_q)
+{
+ int32_t cur_d_raw;
+ int32_t cur_q_raw;
+
+ pxmcc_axis_get_cur_dq_filt_raw(mcs, &cur_d_raw, &cur_q_raw);
+
+ pxmcc_axis_cur_dq_raw2filt(p_cur_d, cur_d_raw);
+ pxmcc_axis_cur_dq_raw2filt(p_cur_q, cur_q_raw);
+}
+
+static inline
+void pxmcc_cur_ctrl_pi(int *p_pwm, int32_t *p_cur_err_sum,
+ int cur_err, short cur_ctrl_p, short cur_ctrl_i, int max_pwm)
+{
+ int pwm;
+ int32_t cur_err_sum = *p_cur_err_sum;
+
+ pwm = (cur_err * cur_ctrl_p) >> 8;
+
+ if (cur_ctrl_i)
+ cur_err_sum += cur_err * cur_ctrl_i;
+ else
+ cur_err_sum = 0;
+
+ pwm += cur_err_sum >> 16;
+
+ if (pwm > max_pwm) {
+ cur_err_sum -= (pwm - max_pwm) << 16;
+ pwm = max_pwm;
+ } else if (-pwm > max_pwm) {
+ cur_err_sum -= (pwm + max_pwm) << 16;
+ pwm = 0 - max_pwm;
+ }
+ *p_cur_err_sum = cur_err_sum;
+ *p_pwm = pwm;