feat[SPI]: Add SPI device detach function

This commit is contained in:
wdfk-prog
2025-09-25 11:41:58 +08:00
committed by R b b666
parent da99c507c4
commit 7e5cd48360
4 changed files with 107 additions and 4 deletions
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2024, RT-Thread Development Team
* Copyright (c) 2006-2025 RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -25,7 +25,7 @@
#include "drv_config.h"
#include <string.h>
//#define DRV_DEBUG
/*#define DRV_DEBUG*/
#define LOG_TAG "drv.spi"
#include <drv_log.h>
@@ -683,6 +683,47 @@ rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name,
return result;
}
/**
* Detach the spi device from SPI bus.
*
* @param device_name the name of the spi device to be detached.
*/
rt_err_t rt_hw_spi_device_detach(const char *device_name)
{
RT_ASSERT(device_name != RT_NULL);
rt_err_t result;
struct rt_spi_device *spi_device;
rt_device_t device = rt_device_find(device_name);
if (device == RT_NULL)
{
LOG_E("SPI device %s not found.", device_name);
return -RT_ERROR;
}
if (device->type != RT_Device_Class_SPIDevice)
{
LOG_E("%s is not an SPI device.", device_name);
return -RT_ERROR;
}
spi_device = (struct rt_spi_device *)device;
result = rt_spi_bus_detach_device_cspin(spi_device);
if (result != RT_EOK)
{
LOG_E("Failed to detach %s from its bus, error code: %d", device_name, result);
return result;
}
rt_free(spi_device);
LOG_D("SPI device %s has been detached.", device_name);
return RT_EOK;
}
#if defined(BSP_SPI1_TX_USING_DMA) || defined(BSP_SPI1_RX_USING_DMA)
void SPI1_IRQHandler(void)
{
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2006-2023, RT-Thread Development Team
* Copyright (c) 2006-2025 RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -23,6 +23,7 @@ extern "C" {
#endif
rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, rt_base_t cs_pin);
rt_err_t rt_hw_spi_device_detach(const char *device_name);
#ifdef __cplusplus
}