Commit 6098b2f6 authored by Jilay Pandya's avatar Jilay Pandya Committed by Anas Nashif
Browse files

drivers: stepper: tmc5041: use tmc5xxx generalized macros

This commit refactors tmc5041 driver to use tmc5xxx generalized macros

Signed-off-by: default avatarJilay Pandya <jilay.pandya@outlook.com>
parent f3a868ad
Loading
Loading
Loading
Loading
+28 −28
Changes for drivers/stepper/adi_tmc/adi_tmc5041_stepper_controller.c: 28 added lines, 28 removed lines.
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ static int tmc5041_write(const struct device *dev, const uint8_t reg_addr, const

	k_sem_take(&data->sem, K_FOREVER);

	err = tmc_spi_write_register(&bus, TMC5041_WRITE_BIT, reg_addr, reg_val);
	err = tmc_spi_write_register(&bus, TMC5XXX_WRITE_BIT, reg_addr, reg_val);

	k_sem_give(&data->sem);

@@ -83,7 +83,7 @@ static int tmc5041_read(const struct device *dev, const uint8_t reg_addr, uint32

	k_sem_take(&data->sem, K_FOREVER);

	err = tmc_spi_read_register(&bus, TMC5041_ADDRESS_MASK, reg_addr, reg_val);
	err = tmc_spi_read_register(&bus, TMC5XXX_ADDRESS_MASK, reg_addr, reg_val);

	k_sem_give(&data->sem);

@@ -117,7 +117,7 @@ static int stallguard_enable(const struct device *dev, const bool enable)
	}

	if (enable) {
		reg_value |= TMC5041_SW_MODE_SG_STOP_ENABLE;
		reg_value |= TMC5XXX_SW_MODE_SG_STOP_ENABLE;

		int32_t actual_velocity;

@@ -136,7 +136,7 @@ static int stallguard_enable(const struct device *dev, const bool enable)
			return -EAGAIN;
		}
	} else {
		reg_value &= ~TMC5041_SW_MODE_SG_STOP_ENABLE;
		reg_value &= ~TMC5XXX_SW_MODE_SG_STOP_ENABLE;
	}
	err = tmc5041_write(config->controller, TMC5041_SWMODE(config->index), reg_value);
	if (err) {
@@ -193,11 +193,11 @@ static void rampstat_work_handler(struct k_work *work)

	tmc5041_read(stepper_config->controller, TMC5041_DRVSTATUS(stepper_config->index),
		     &drv_status);
	if (FIELD_GET(TMC5041_DRV_STATUS_SG_STATUS_MASK, drv_status) == 1U) {
	if (FIELD_GET(TMC5XXX_DRV_STATUS_SG_STATUS_MASK, drv_status) == 1U) {
		LOG_INF("%s: Stall detected", stepper_data->stepper->name);
		err = tmc5041_write(stepper_config->controller,
				    TMC5041_RAMPMODE(stepper_config->index),
				    TMC5041_RAMPMODE_HOLD_MODE);
				    TMC5XXX_RAMPMODE_HOLD_MODE);
		if (err != 0) {
			LOG_ERR("%s: Failed to stop motor", stepper_data->stepper->name);
			return;
@@ -213,29 +213,29 @@ static void rampstat_work_handler(struct k_work *work)
		return;
	}

	const uint8_t ramp_stat_values = FIELD_GET(TMC5041_RAMPSTAT_INT_MASK, rampstat_value);
	const uint8_t ramp_stat_values = FIELD_GET(TMC5XXX_RAMPSTAT_INT_MASK, rampstat_value);

	if (ramp_stat_values > 0) {
		switch (ramp_stat_values) {

		case TMC5041_STOP_LEFT_EVENT:
		case TMC5XXX_STOP_LEFT_EVENT:
			LOG_DBG("RAMPSTAT %s:Left end-stop detected", stepper_data->stepper->name);
			execute_callback(stepper_data->stepper,
					 STEPPER_EVENT_LEFT_END_STOP_DETECTED);
			break;

		case TMC5041_STOP_RIGHT_EVENT:
		case TMC5XXX_STOP_RIGHT_EVENT:
			LOG_DBG("RAMPSTAT %s:Right end-stop detected", stepper_data->stepper->name);
			execute_callback(stepper_data->stepper,
					 STEPPER_EVENT_RIGHT_END_STOP_DETECTED);
			break;

		case TMC5041_POS_REACHED_EVENT:
		case TMC5XXX_POS_REACHED_EVENT:
			LOG_DBG("RAMPSTAT %s:Position reached", stepper_data->stepper->name);
			execute_callback(stepper_data->stepper, STEPPER_EVENT_STEPS_COMPLETED);
			break;

		case TMC5041_STOP_SG_EVENT:
		case TMC5XXX_STOP_SG_EVENT:
			LOG_DBG("RAMPSTAT %s:Stall detected", stepper_data->stepper->name);
			stallguard_enable(stepper_data->stepper, false);
			execute_callback(stepper_data->stepper, STEPPER_EVENT_STALL_DETECTED);
@@ -266,9 +266,9 @@ static int tmc5041_stepper_enable(const struct device *dev, const bool enable)
	}

	if (enable) {
		reg_value |= TMC5041_CHOPCONF_DRV_ENABLE_MASK;
		reg_value |= TMC5XXX_CHOPCONF_DRV_ENABLE_MASK;
	} else {
		reg_value &= ~TMC5041_CHOPCONF_DRV_ENABLE_MASK;
		reg_value &= ~TMC5XXX_CHOPCONF_DRV_ENABLE_MASK;
	}

	err = tmc5041_write(config->controller, TMC5041_CHOPCONF(config->index), reg_value);
@@ -291,7 +291,7 @@ static int tmc5041_stepper_is_moving(const struct device *dev, bool *is_moving)
		return -EIO;
	}

	*is_moving = (FIELD_GET(TMC5041_DRV_STATUS_STST_BIT, reg_value) != 1U);
	*is_moving = (FIELD_GET(TMC5XXX_DRV_STATUS_STST_BIT, reg_value) != 1U);
	LOG_DBG("Stepper motor controller %s is moving: %d", dev->name, *is_moving);
	return 0;
}
@@ -318,7 +318,7 @@ static int tmc5041_stepper_move(const struct device *dev, const int32_t steps)
	int32_t target_position = position + steps;

	err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index),
			    TMC5041_RAMPMODE_POSITIONING_MODE);
			    TMC5XXX_RAMPMODE_POSITIONING_MODE);
	if (err != 0) {
		return -EIO;
	}
@@ -373,9 +373,9 @@ static int tmc5041_stepper_set_micro_step_res(const struct device *dev,
		return -EIO;
	}

	reg_value &= ~TMC5041_CHOPCONF_MRES_MASK;
	reg_value &= ~TMC5XXX_CHOPCONF_MRES_MASK;
	reg_value |= ((MICRO_STEP_RES_INDEX(STEPPER_MICRO_STEP_256) - LOG2(res))
		      << TMC5041_CHOPCONF_MRES_SHIFT);
		      << TMC5XXX_CHOPCONF_MRES_SHIFT);

	err = tmc5041_write(config->controller, TMC5041_CHOPCONF(config->index), reg_value);
	if (err != 0) {
@@ -398,8 +398,8 @@ static int tmc5041_stepper_get_micro_step_res(const struct device *dev,
	if (err != 0) {
		return -EIO;
	}
	reg_value &= TMC5041_CHOPCONF_MRES_MASK;
	reg_value >>= TMC5041_CHOPCONF_MRES_SHIFT;
	reg_value &= TMC5XXX_CHOPCONF_MRES_MASK;
	reg_value >>= TMC5XXX_CHOPCONF_MRES_SHIFT;
	*res = (1 << (MICRO_STEP_RES_INDEX(STEPPER_MICRO_STEP_256) - reg_value));
	LOG_DBG("Stepper motor controller %s get micro step resolution: %d", dev->name, *res);
	return 0;
@@ -411,7 +411,7 @@ static int tmc5041_stepper_set_actual_position(const struct device *dev, const i
	int err;

	err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index),
			    TMC5041_RAMPMODE_HOLD_MODE);
			    TMC5XXX_RAMPMODE_HOLD_MODE);
	if (err != 0) {
		return -EIO;
	}
@@ -449,7 +449,7 @@ static int tmc5041_stepper_set_target_position(const struct device *dev, const i
	}

	err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index),
			    TMC5041_RAMPMODE_POSITIONING_MODE);
			    TMC5XXX_RAMPMODE_POSITIONING_MODE);
	if (err != 0) {
		return -EIO;
	}
@@ -493,7 +493,7 @@ static int tmc5041_stepper_enable_constant_velocity_mode(const struct device *de
	switch (direction) {
	case STEPPER_DIRECTION_POSITIVE:
		err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index),
				    TMC5041_RAMPMODE_POSITIVE_VELOCITY_MODE);
				    TMC5XXX_RAMPMODE_POSITIVE_VELOCITY_MODE);
		if (err != 0) {
			return -EIO;
		}
@@ -505,7 +505,7 @@ static int tmc5041_stepper_enable_constant_velocity_mode(const struct device *de

	case STEPPER_DIRECTION_NEGATIVE:
		err = tmc5041_write(config->controller, TMC5041_RAMPMODE(config->index),
				    TMC5041_RAMPMODE_NEGATIVE_VELOCITY_MODE);
				    TMC5XXX_RAMPMODE_NEGATIVE_VELOCITY_MODE);
		if (err != 0) {
			return -EIO;
		}
@@ -611,7 +611,7 @@ static int tmc5041_init(const struct device *dev)

	/* Init non motor-index specific registers here. */
	LOG_DBG("GCONF: %d", config->gconf);
	err = tmc5041_write(dev, TMC5041_GCONF, config->gconf);
	err = tmc5041_write(dev, TMC5XXX_GCONF, config->gconf);
	if (err != 0) {
		return -EIO;
	}
@@ -619,7 +619,7 @@ static int tmc5041_init(const struct device *dev)
	/* Read GSTAT register values to clear any errors SPI Datagram. */
	uint32_t gstat_value;

	err = tmc5041_read(dev, TMC5041_GSTAT, &gstat_value);
	err = tmc5041_read(dev, TMC5XXX_GSTAT, &gstat_value);
	if (err != 0) {
		return -EIO;
	}
@@ -647,8 +647,8 @@ static int tmc5041_stepper_init(const struct device *dev)

		LOG_DBG("Setting stall guard to %d with delay %d ms", stepper_config->sg_threshold,
			stepper_config->sg_velocity_check_interval_ms);
		if (!IN_RANGE(stepper_config->sg_threshold, TMC5041_SG_MIN_VALUE,
			      TMC5041_SG_MAX_VALUE)) {
		if (!IN_RANGE(stepper_config->sg_threshold, TMC5XXX_SG_MIN_VALUE,
			      TMC5XXX_SG_MAX_VALUE)) {
			LOG_ERR("Stallguard threshold out of range");
			return -EINVAL;
		}
@@ -657,7 +657,7 @@ static int tmc5041_stepper_init(const struct device *dev)

		err = tmc5041_write(
			stepper_config->controller, TMC5041_COOLCONF(stepper_config->index),
			stall_guard_threshold << TMC5041_COOLCONF_SG2_THRESHOLD_VALUE_SHIFT);
			stall_guard_threshold << TMC5XXX_COOLCONF_SG2_THRESHOLD_VALUE_SHIFT);
		if (err != 0) {
			return -EIO;
		}
+3 −3
Changes for include/zephyr/drivers/stepper/stepper_trinamic.h: 3 added lines, 3 removed lines.
Original line number Diff line number Diff line
@@ -144,9 +144,9 @@ struct tmc_ramp_generator_data {
		.tzerowait = DT_PROP(node, tzerowait),				\
		.vcoolthrs = DT_PROP(node, vcoolthrs),				\
		.vhigh = DT_PROP(node, vhigh),					\
		.iholdrun = (TMC5041_IRUN(DT_PROP(node, irun)) |		\
			     TMC5041_IHOLD(DT_PROP(node, ihold)) |		\
			     TMC5041_IHOLDDELAY(DT_PROP(node, iholddelay))),	\
		.iholdrun = (TMC5XXX_IRUN(DT_PROP(node, irun)) |		\
			     TMC5XXX_IHOLD(DT_PROP(node, ihold)) |		\
			     TMC5XXX_IHOLDDELAY(DT_PROP(node, iholddelay))),	\
	}

/**