+ int res = 0;
+ int prev_mode;
+
+ pxmc_axis_release(mcs);
+ pxmc_clear_flag(mcs, PXMS_ENI_b);
+ pxmc_clear_flag(mcs,PXMS_ENO_b);
+ /*TODO Clear possible stall index flags from hardware */
+
+ pxmc_clear_flag(mcs, PXMS_PHA_b);
+ pxmc_clear_flag(mcs, PXMS_PTI_b);
+
+ prev_mode = pxmc_axis_rdmode(mcs);
+
+ if (mode == PXMC_AXIS_MODE_NOCHANGE)
+ mode = prev_mode;
+ if (mode < 0)
+ return -1;
+ if (!mode)
+ mode = PXMC_AXIS_MODE_DC;
+
+ switch (mode) {
+ case PXMC_AXIS_MODE_DC:
+ mcs->pxms_do_out = pxmc_spimc_pwm_dc_out;
+ break;
+ case PXMC_AXIS_MODE_BLDC:
+ mcs->pxms_do_out = pxmc_spimc_pwm3ph_out;
+ pxmc_fill_ptscale_for_sin_fixed(mcs);
+ break;
+ default:
+ return -1;
+ }
+
+ /*TODO Clear possible stall index flags from hardware */
+
+ /* Request new phases alignment for changed parameters */
+ pxmc_clear_flag(mcs, PXMS_PHA_b);
+ pxmc_clear_flag(mcs, PXMS_PTI_b);
+ pxmc_set_flag(mcs, PXMS_ENI_b);
+ return res;