Skip to content

Commit 82c6add

Browse files
jilaypandyakartben
authored andcommitted
drivers: stepper: gpio: refactor work rescheduling logic
update remaining steps should just update the remaining steps, rescheduling should happen after updating steps and hence is moved to position mode task which is also in coherence with velocity mode task Signed-off-by: Jilay Pandya <[email protected]>
1 parent 150cd56 commit 82c6add

File tree

1 file changed

+13
-12
lines changed

1 file changed

+13
-12
lines changed

drivers/stepper/gpio_stepper_controller.c

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -107,20 +107,14 @@ static void update_coil_charge(const struct device *dev)
107107
}
108108
}
109109

110-
static void update_remaining_steps(struct gpio_stepper_data *data)
110+
static void update_remaining_steps(const struct device *dev)
111111
{
112+
struct gpio_stepper_data *data = dev->data;
113+
112114
if (data->step_count > 0) {
113115
data->step_count--;
114-
(void)k_work_reschedule(&data->stepper_dwork, K_NSEC(data->delay_in_ns));
115116
} else if (data->step_count < 0) {
116117
data->step_count++;
117-
(void)k_work_reschedule(&data->stepper_dwork, K_NSEC(data->delay_in_ns));
118-
} else {
119-
if (!data->callback) {
120-
LOG_WRN_ONCE("No callback set");
121-
return;
122-
}
123-
data->callback(data->dev, STEPPER_EVENT_STEPS_COMPLETED, data->event_cb_user_data);
124118
}
125119
}
126120

@@ -141,11 +135,18 @@ static void position_mode_task(const struct device *dev)
141135
{
142136
struct gpio_stepper_data *data = dev->data;
143137

138+
update_remaining_steps(dev);
139+
(void)stepper_motor_set_coil_charge(dev);
140+
update_coil_charge(dev);
144141
if (data->step_count) {
145-
(void)stepper_motor_set_coil_charge(dev);
146-
update_coil_charge(dev);
142+
(void)k_work_reschedule(&data->stepper_dwork, K_NSEC(data->delay_in_ns));
143+
} else {
144+
if (data->callback) {
145+
data->callback(data->dev, STEPPER_EVENT_STEPS_COMPLETED,
146+
data->event_cb_user_data);
147+
}
148+
(void)k_work_cancel_delayable(&data->stepper_dwork);
147149
}
148-
update_remaining_steps(dev->data);
149150
}
150151

151152
static void velocity_mode_task(const struct device *dev)

0 commit comments

Comments
 (0)