Skip to content

Commit 41ef8c3

Browse files
PetervdPerk-NXPdkalowsk
authored andcommitted
drivers: spi_nxp_lpspi: Don't fetch clockrate from api during configure
The clock get rate api can be slow in certain targets and thus slowing each SPI transaction. Instead on startup fetch the clock rate and store this in ram. Then each spi configure action is simply reading that variable Signed-off-by: Peter van der Perk <peter.vanderperk@nxp.com>
1 parent ee1468b commit 41ef8c3

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_common.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,6 @@ static void lpspi_basic_config(const struct device *dev, const struct spi_config
260260

261261
int lpspi_configure(const struct device *dev, const struct spi_config *spi_cfg)
262262
{
263-
const struct lpspi_config *config = dev->config;
264263
struct lpspi_data *data = dev->data;
265264
struct spi_context *ctx = &data->ctx;
266265
bool already_configured = spi_context_configured(ctx, spi_cfg);
@@ -306,10 +305,7 @@ int lpspi_configure(const struct device *dev, const struct spi_config *spi_cfg)
306305

307306
lpspi_basic_config(dev, spi_cfg);
308307

309-
ret = clock_control_get_rate(config->clock_dev, config->clock_subsys, &clock_freq);
310-
if (ret) {
311-
return ret;
312-
}
308+
clock_freq = data->clock_freq;
313309

314310
if (SPI_OP_MODE_GET(spi_cfg->operation) == SPI_OP_MODE_MASTER) {
315311
uint32_t ccr = 0;
@@ -374,6 +370,11 @@ int spi_nxp_init_common(const struct device *dev)
374370
return err;
375371
}
376372

373+
err = clock_control_get_rate(config->clock_dev, config->clock_subsys, &data->clock_freq);
374+
if (err) {
375+
return err;
376+
}
377+
377378
/* Full software reset */
378379
base->CR |= LPSPI_CR_RST_MASK;
379380
base->CR |= LPSPI_CR_RRF_MASK | LPSPI_CR_RTF_MASK;

drivers/spi/spi_nxp_lpspi/spi_nxp_lpspi_priv.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ struct lpspi_data {
5151
void *driver_data;
5252
size_t transfer_len;
5353
uint8_t major_version;
54+
uint32_t clock_freq;
5455
};
5556

5657
/* Verifies spi_cfg validity and set up configuration of hardware for xfer

0 commit comments

Comments
 (0)