Commit 242e6ea1 authored by Anders Nielsen's avatar Anders Nielsen Committed by Benjamin Cabé
Browse files

drivers: stepper: adi_tmc: Prepare for tmc51xx support



Add Kconfig option. Find common regs. Update ramp generator data.

Signed-off-by: default avatarAnders Nielsen <anders.nielsen@prevas.dk>
parent 92b2d462
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -21,5 +21,6 @@ comment "Trinamic Stepper Drivers"

rsource "Kconfig.tmc22xx"
rsource "Kconfig.tmc50xx"
rsource "Kconfig.tmc51xx"

endif # STEPPER_ADI_TMC
+12 −0
Original line number Diff line number Diff line
# SPDX-FileCopyrightText: Copyright (c) 2025 Prevas A/S
# SPDX-License-Identifier: Apache-2.0

config STEPPER_ADI_TMC51XX
	bool "Activate trinamic tmc51xx stepper driver"
	depends on DT_HAS_ADI_TMC51XX_ENABLED && STEPPER_ADI_TMC
	select STEPPER_ADI_TMC_SPI
	default y

module = TMC51XX
module-str = tmc51xx
rsource "Kconfig.tmc_rampgen_template"
+1 −2
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
#include "adi_tmc5xxx_common.h"

#include <zephyr/logging/log.h>

LOG_MODULE_REGISTER(tmc50xx, CONFIG_STEPPER_LOG_LEVEL);

struct tmc50xx_data {
@@ -730,7 +729,7 @@ static DEVICE_API(stepper, tmc50xx_stepper_api) = {
						stallguard_velocity_check_interval_ms),		\
		.is_sg_enabled = DT_PROP(child, activate_stallguard2),				\
		IF_ENABLED(CONFIG_STEPPER_ADI_TMC50XX_RAMP_GEN,					\
		(.default_ramp_config = TMC_RAMP_DT_SPEC_GET(child))) };
		(.default_ramp_config = TMC_RAMP_DT_SPEC_GET_TMC50XX(child))) };

#define TMC50XX_STEPPER_DATA_DEFINE(child)							\
	static struct tmc50xx_stepper_data tmc50xx_stepper_data_##child = {			\
+59 −22
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@

/*
 * SPDX-FileCopyrightText: Copyright (c) 2024 Carl Zeiss Meditec AG
 * SPDX-FileCopyrightText: Copyright (c) 2025 Prevas A/S
 * SPDX-License-Identifier: Apache-2.0
 */

@@ -18,7 +19,7 @@ extern "C" {
#endif

/** Common Registers for TMC50XX and TMC51XX */
#if defined(CONFIG_STEPPER_ADI_TMC50XX)
#if defined(CONFIG_STEPPER_ADI_TMC50XX) || defined(CONFIG_STEPPER_ADI_TMC51XX)

#define TMC5XXX_WRITE_BIT        0x80U
#define TMC5XXX_ADDRESS_MASK     0x7FU
@@ -79,12 +80,32 @@ extern "C" {
#define TMC5XXX_DRV_STATUS_SG_STATUS_MASK  BIT(24)
#define TMC5XXX_DRV_STATUS_SG_STATUS_SHIFT 24

#define TMC50XX_MOTOR_ADDR(m)     (0x20 << (m))
#define TMC50XX_MOTOR_ADDR_DRV(m) ((m) << 4)

#define TMC50XX_RAMPMODE(motor)   (0x00 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_XACTUAL(motor)    (0x01 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VACTUAL(motor)    (0x02 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VSTART(motor)     (0x03 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_A1(motor)         (0x04 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_V1(motor)         (0x05 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_AMAX(motor)       (0x06 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VMAX(motor)       (0x07 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_DMAX(motor)       (0x08 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_D1(motor)         (0x0A | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VSTOP(motor)      (0x0B | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_TZEROWAIT(motor)  (0x0C | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_XTARGET(motor)    (0x0D | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_SWMODE(motor)     (0x14 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_RAMPSTAT(motor)   (0x15 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_CHOPCONF(motor)   (0x6C | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_COOLCONF(motor)   (0x6D | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_DRVSTATUS(motor)  (0x6F | TMC50XX_MOTOR_ADDR_DRV(motor))

#endif

#ifdef CONFIG_STEPPER_ADI_TMC50XX

#define TMC50XX_MOTOR_ADDR(m)     (0x20 << (m))
#define TMC50XX_MOTOR_ADDR_DRV(m) ((m) << 4)
#define TMC50XX_MOTOR_ADDR_PWM(m) ((m) << 3)

/**
@@ -102,24 +123,9 @@ extern "C" {
#define TMC50XX_PWMCONF(motor)    (0x10 | TMC50XX_MOTOR_ADDR_PWM(motor))
#define TMC50XX_PWM_STATUS(motor) (0x11 | TMC50XX_MOTOR_ADDR_PWM(motor))

#define TMC50XX_RAMPMODE(motor)   (0x00 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_XACTUAL(motor)    (0x01 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VACTUAL(motor)    (0x02 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VSTART(motor)     (0x03 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_A1(motor)         (0x04 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_V1(motor)         (0x05 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_AMAX(motor)       (0x06 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VMAX(motor)       (0x07 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_DMAX(motor)       (0x08 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_D1(motor)         (0x0A | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VSTOP(motor)      (0x0B | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_TZEROWAIT(motor)  (0x0C | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_XTARGET(motor)    (0x0D | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_IHOLD_IRUN(motor) (0x10 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VCOOLTHRS(motor)  (0x11 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_VHIGH(motor)      (0x12 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_SWMODE(motor)     (0x14 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_RAMPSTAT(motor)   (0x15 | TMC50XX_MOTOR_ADDR(motor))
#define TMC50XX_XLATCH(motor)     (0x16 | TMC50XX_MOTOR_ADDR(motor))

#define TMC50XX_MSLUT0(motor)     (0x60 | TMC50XX_MOTOR_ADDR_DRV(motor))
@@ -134,12 +140,43 @@ extern "C" {
#define TMC50XX_MSLUTSTART(motor) (0x69 | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_MSCNT(motor)      (0x6A | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_MSCURACT(motor)   (0x6B | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_CHOPCONF(motor)   (0x6C | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_COOLCONF(motor)   (0x6D | TMC50XX_MOTOR_ADDR_DRV(motor))
#define TMC50XX_DRVSTATUS(motor)  (0x6F | TMC50XX_MOTOR_ADDR_DRV(motor))

#endif /* CONFIG_STEPPER_ADI_TMC50XX */

#ifdef CONFIG_STEPPER_ADI_TMC51XX

#define TMC51XX_GCONF_EN_PWM_MODE_SHIFT	2
#define TMC51XX_GCONF_SHAFT_SHIFT	4
#define TMC51XX_GCONF_TEST_MODE_SHIFT	17

#define TMC51XX_IHOLD_IRUN	0x10
#define TMC51XX_TPOWER_DOWN	0x11
#define TMC51XX_TSTEP		0x12
#define TMC51XX_TPWMTHRS	0x13
#define TMC51XX_TCOOLTHRS	0x14
#define TMC51XX_THIGH		0x15

#define TMC51XX_RAMPMODE   	TMC50XX_RAMPMODE(0)
#define TMC51XX_XACTUAL    	TMC50XX_XACTUAL(0)
#define TMC51XX_VACTUAL    	TMC50XX_VACTUAL(0)
#define TMC51XX_VSTART     	TMC50XX_VSTART(0)
#define TMC51XX_A1         	TMC50XX_A1(0)
#define TMC51XX_V1         	TMC50XX_V1(0)
#define TMC51XX_AMAX       	TMC50XX_AMAX(0)
#define TMC51XX_VMAX       	TMC50XX_VMAX(0)
#define TMC51XX_DMAX       	TMC50XX_DMAX(0)
#define TMC51XX_D1         	TMC50XX_D1(0)
#define TMC51XX_VSTOP      	TMC50XX_VSTOP(0)
#define TMC51XX_TZEROWAIT  	TMC50XX_TZEROWAIT(0)
#define TMC51XX_XTARGET    	TMC50XX_XTARGET(0)
#define TMC51XX_SWMODE     	TMC50XX_SWMODE(0)
#define TMC51XX_RAMPSTAT   	TMC50XX_RAMPSTAT(0)
#define TMC51XX_CHOPCONF   	TMC50XX_CHOPCONF(0)
#define TMC51XX_COOLCONF   	TMC50XX_COOLCONF(0)
#define TMC51XX_DRVSTATUS  	TMC50XX_DRVSTATUS(0)

#endif /* CONFIG_STEPPER_ADI_TMC51XX */

/**
 * @}
 */
+1 −3
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ description: |
        tmc50xx: tmc50xx@0 {
            compatible = "adi,tmc50xx";
            reg = <0>;
            spi-max-frequency = <DT_FREQ_M(24)>; /* Maximum SPI bus frequency */
            spi-max-frequency = <DT_FREQ_M(8)>; /* Maximum SPI bus frequency */

            #address-cells = <1>;
            #size-cells = <0>;
@@ -61,8 +61,6 @@ include:
  - name: adi,trinamic-gconf.yaml
    property-allowlist:
      - poscmp-enable
      - shaft1
      - shaft2
      - test-mode
      - lock-gconf

Loading