diff --git a/arch/arm64/src/imx9/imx9_lpspi.c b/arch/arm64/src/imx9/imx9_lpspi.c index b6caa7d4d11..5f665334d63 100644 --- a/arch/arm64/src/imx9/imx9_lpspi.c +++ b/arch/arm64/src/imx9/imx9_lpspi.c @@ -2094,4 +2094,38 @@ void imx9_lpspi_uninitialize(struct spi_dev_s *dev) } } +/**************************************************************************** + * Name: imx9_lpspi_select_cs + * + * Description: + * Assert or de-assert internal PCS0 or PCS1 line. Can be called by + * board-specific chip-select logic. Assertion of the CS is done at the + * start of the next transfer and de-assertion after this function is + * called again to de-assert the cs and the transfer has ended. + * + * Input Parameters: + * dev - Device-specific state data + * cs - Chip select 0 or 1 + * select - true: assert CS, false: de-assert CS + * + * Returned Value: + * None + * + ****************************************************************************/ + +void imx9_lpspi_select_cs(struct spi_dev_s *dev, int cs, bool select) +{ + struct imx9_lpspidev_s *priv = (struct imx9_lpspidev_s *)dev; + + if (select) + { + uint32_t pcs = (cs << LPSPI_TCR_PCS_SHIFT) & LPSPI_TCR_PCS_MASK; + imx9_lpspi_modifytcr(priv, LPSPI_TCR_PCS_MASK, pcs | LPSPI_TCR_CONT); + } + else + { + imx9_lpspi_modifytcr(priv, LPSPI_TCR_CONT, 0); + } +} + #endif /* CONFIG_IMX9_LPSPI */ diff --git a/arch/arm64/src/imx9/imx9_lpspi.h b/arch/arm64/src/imx9/imx9_lpspi.h index 0e39c31f696..280474712ef 100644 --- a/arch/arm64/src/imx9/imx9_lpspi.h +++ b/arch/arm64/src/imx9/imx9_lpspi.h @@ -148,6 +148,27 @@ int imx9_lpspi_register(struct spi_dev_s *dev, void *arg); #endif +/**************************************************************************** + * Name: imx9_lpspi_select_cs + * + * Description: + * Assert or de-assert internal PCS0 or PCS1 line. Can be called by + * board-specific chip-select logic. Assertion of the CS is done at the + * start of the next transfer and de-assertion after this function is + * called again to de-assert the cs and the transfer has ended. + * + * Input Parameters: + * dev - Device-specific state data + * cs - Chip select 0 or 1 + * select - true: assert CS, false: de-assert CS + * + * Returned Value: + * None + * + ****************************************************************************/ + +void imx9_lpspi_select_cs(struct spi_dev_s *dev, int cs, bool select); + #undef EXTERN #if defined(__cplusplus) }