Skip to content

Commit f71cadb

Browse files
committed
drivers: stepper: tmc_spi: remove print_status_byte
print_status_byte is specific to tmc50xx and hence shoud not be placeed in common tmc_spi.c which is supposed to be reused by a variety of drivers Signed-off-by: Jilay Pandya <[email protected]>
1 parent f922014 commit f71cadb

File tree

3 files changed

+46
-26
lines changed

3 files changed

+46
-26
lines changed

drivers/stepper/adi_tmc/adi_tmc50xx_stepper_controller.c

+20-4
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,20 @@ struct tmc50xx_stepper_config {
5656

5757
static int read_actual_position(const struct tmc50xx_stepper_config *config, int32_t *position);
5858

59+
static void parse_tmc50xx_spi_status(const uint8_t *const rx_buffer)
60+
{
61+
const uint8_t status_byte = rx_buffer[0];
62+
if ((status_byte & BIT_MASK(0)) != 0) {
63+
LOG_WRN("spi dataframe: reset_flag detected");
64+
}
65+
if ((status_byte & BIT_MASK(1)) != 0) {
66+
LOG_WRN("spi dataframe: driver_error(1) detected");
67+
}
68+
if ((status_byte & BIT_MASK(2)) != 0) {
69+
LOG_WRN("spi dataframe: driver_error(2) detected");
70+
}
71+
}
72+
5973
static int tmc50xx_write(const struct device *dev, const uint8_t reg_addr, const uint32_t reg_val)
6074
{
6175
const struct tmc50xx_config *config = dev->config;
@@ -65,7 +79,8 @@ static int tmc50xx_write(const struct device *dev, const uint8_t reg_addr, const
6579

6680
k_sem_take(&data->sem, K_FOREVER);
6781

68-
err = tmc_spi_write_register(&bus, TMC5XXX_WRITE_BIT, reg_addr, reg_val);
82+
err = tmc_spi_write_register(&bus, TMC5XXX_WRITE_BIT, reg_addr, reg_val,
83+
parse_tmc_spi_status);
6984

7085
k_sem_give(&data->sem);
7186

@@ -85,7 +100,8 @@ static int tmc50xx_read(const struct device *dev, const uint8_t reg_addr, uint32
85100

86101
k_sem_take(&data->sem, K_FOREVER);
87102

88-
err = tmc_spi_read_register(&bus, TMC5XXX_ADDRESS_MASK, reg_addr, reg_val);
103+
err = tmc_spi_read_register(&bus, TMC5XXX_ADDRESS_MASK, reg_addr, reg_val,
104+
parse_tmc_spi_status);
89105

90106
k_sem_give(&data->sem);
91107

@@ -198,8 +214,8 @@ static void log_stallguard(struct tmc50xx_stepper_data *stepper_data, const uint
198214
const uint8_t sg_result = FIELD_GET(TMC5XXX_DRV_STATUS_SG_RESULT_MASK, drv_status);
199215
const bool sg_status = FIELD_GET(TMC5XXX_DRV_STATUS_SG_STATUS_MASK, drv_status);
200216

201-
LOG_DBG("%s position: %d | sg result: %d status: %d",
202-
stepper_data->stepper->name, position, sg_result, sg_status);
217+
LOG_DBG("%s position: %d | sg result: %d status: %d", stepper_data->stepper->name, position,
218+
sg_result, sg_status);
203219
}
204220

205221
#endif

drivers/stepper/adi_tmc/adi_tmc_spi.c

+13-20
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,22 @@
44
*/
55

66
#include <zephyr/sys/util.h>
7-
87
#include "adi_tmc_spi.h"
98

109
#define BUFFER_SIZE 5U
1110

1211
#include <zephyr/logging/log.h>
13-
1412
LOG_MODULE_REGISTER(tmc_spi, CONFIG_SPI_LOG_LEVEL);
1513

16-
static void parse_tmc_spi_status(const uint8_t status_byte)
17-
{
18-
if ((status_byte & BIT_MASK(0)) != 0) {
19-
LOG_WRN("spi dataframe: reset_flag detected");
20-
}
21-
if ((status_byte & BIT_MASK(1)) != 0) {
22-
LOG_WRN("spi dataframe: driver_error(1) detected");
23-
}
24-
if ((status_byte & BIT_MASK(2)) != 0) {
25-
LOG_WRN("spi dataframe: driver_error(2) detected");
26-
}
27-
}
28-
2914
static void print_tx_rx_buffer(const uint8_t *const tx_buffer, const uint8_t *const rx_buffer)
3015
{
3116
LOG_HEXDUMP_DBG(tx_buffer, BUFFER_SIZE, "TX: ");
3217
LOG_HEXDUMP_DBG(rx_buffer, BUFFER_SIZE, "RX: ");
3318
}
3419

3520
int tmc_spi_read_register(const struct spi_dt_spec *bus, const uint8_t read_address_mask,
36-
const uint8_t register_address, uint32_t *data)
21+
const uint8_t register_address, uint32_t *data,
22+
parse_rx_buffer_cb_t parse_rx_buffer_cb)
3723
{
3824
uint8_t tx_buffer[BUFFER_SIZE] = {read_address_mask & register_address, 0U, 0U, 0U, 0U};
3925
uint8_t rx_buffer[BUFFER_SIZE];
@@ -64,7 +50,9 @@ int tmc_spi_read_register(const struct spi_dt_spec *bus, const uint8_t read_addr
6450
}
6551

6652
print_tx_rx_buffer(tx_buffer, rx_buffer);
67-
parse_tmc_spi_status(rx_buffer[0]);
53+
if (parse_rx_buffer_cb) {
54+
parse_rx_buffer_cb(rx_buffer);
55+
}
6856

6957
/** read the value from the address */
7058
status = spi_transceive_dt(bus, &spi_buffer_array_tx, &spi_buffer_array_rx);
@@ -76,12 +64,15 @@ int tmc_spi_read_register(const struct spi_dt_spec *bus, const uint8_t read_addr
7664
((uint32_t)rx_buffer[3] << 8) + (uint32_t)rx_buffer[4];
7765

7866
print_tx_rx_buffer(tx_buffer, rx_buffer);
79-
parse_tmc_spi_status(rx_buffer[0]);
67+
if (parse_rx_buffer_cb) {
68+
parse_rx_buffer_cb(rx_buffer);
69+
}
8070
return status;
8171
}
8272

8373
int tmc_spi_write_register(const struct spi_dt_spec *bus, const uint8_t write_bit,
84-
const uint8_t register_address, const uint32_t data)
74+
const uint8_t register_address, const uint32_t data,
75+
parse_rx_buffer_cb_t parse_rx_buffer_cb)
8576
{
8677
uint8_t tx_buffer[BUFFER_SIZE] = {write_bit | register_address, data >> 24, data >> 16,
8778
data >> 8, data};
@@ -112,7 +103,9 @@ int tmc_spi_write_register(const struct spi_dt_spec *bus, const uint8_t write_bi
112103
}
113104

114105
print_tx_rx_buffer(tx_buffer, rx_buffer);
115-
parse_tmc_spi_status(rx_buffer[0]);
106+
if (parse_rx_buffer_cb) {
107+
parse_rx_buffer_cb(rx_buffer);
108+
}
116109

117110
return status;
118111
}

drivers/stepper/adi_tmc/adi_tmc_spi.h

+13-2
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,27 @@ extern "C" {
2626

2727
#include <zephyr/drivers/spi.h>
2828

29+
/**
30+
* @brief Callback function to parse the RX buffer.
31+
*
32+
* @param rx_buffer Pointer to the RX buffer.
33+
*/
34+
typedef void (*parse_rx_buffer_cb_t)(const uint8_t *const rx_buffer);
35+
2936
/**
3037
* @brief Read a register from the TMC module using the SPI Bus.
3138
*
3239
* @param bus SPI DT information of the bus.
3340
* @param read_address_mask Address Mask for read operation.
3441
* @param register_address Register.
3542
* @param data Pointer to read value.
43+
* @param parse_rx_buffer_cb Callback function to parse the RX buffer.
3644
*
3745
* @return a value from spi_transceive().
3846
*/
3947
int tmc_spi_read_register(const struct spi_dt_spec *bus, const uint8_t read_address_mask,
40-
const uint8_t register_address, uint32_t *data);
48+
const uint8_t register_address, uint32_t *data,
49+
parse_rx_buffer_cb_t parse_rx_buffer_cb);
4150

4251
/**
4352
* @brief Write into a register in the TMC module using the SPI Bus.
@@ -46,11 +55,13 @@ int tmc_spi_read_register(const struct spi_dt_spec *bus, const uint8_t read_addr
4655
* @param write_bit Write bit for write operation.
4756
* @param register_address Register.
4857
* @param data Value to be written in the register.
58+
* @param parse_rx_buffer_cb Callback function to parse the RX buffer.
4959
*
5060
* @return a value from spi_transceive().
5161
*/
5262
int tmc_spi_write_register(const struct spi_dt_spec *bus, const uint8_t write_bit,
53-
const uint8_t register_address, const uint32_t data);
63+
const uint8_t register_address, const uint32_t data,
64+
parse_rx_buffer_cb_t parse_rx_buffer_cb);
5465

5566
/**
5667
* @}

0 commit comments

Comments
 (0)