Files
TAIXIN/sdk/hal/spi.c

89 lines
2.7 KiB
C

#include "typesdef.h"
#include "list.h"
#include "errno.h"
#include "dev.h"
#include "hal/spi.h"
int32 spi_open(struct spi_device *spi, uint32 clk_freq, uint32 work_mode, uint32 wire_mode, uint32 clk_mode)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->open) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->open(spi, clk_freq, work_mode, wire_mode, clk_mode);
}
return RET_ERR;
}
int32 spi_close(struct spi_device *spi)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->close) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->close(spi);
}
return RET_ERR;
}
int32 spi_ioctl(struct spi_device *spi, uint32 cmd, uint32 param1, uint32 param2)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->ioctl) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->ioctl(spi, cmd, param1, param2);
}
return RET_ERR;
}
int32 spi_read(struct spi_device *spi, void *buf, uint32 size)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->read) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->read(spi, buf, size);
}
return RET_ERR;
}
int32 spi_write(struct spi_device *spi, const void *buf, uint32 size)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->write) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->write(spi, buf, size);
}
return RET_ERR;
}
int32 spi_write_scatter(struct spi_device *spi, const scatter_data *data, uint32 count)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->write_scatter) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->write_scatter(spi, data, count);
}
return RET_ERR;
}
inline int32 spi_set_cs(struct spi_device *spi, uint32 cs, uint32 value)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->ioctl) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->ioctl(spi, SPI_SET_CS, cs, value);
}
return RET_ERR;
}
int32 spi_request_irq(struct spi_device *spi, uint32 irq_flag, spi_irq_hdl irqhdl, uint32 irq_data)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->request_irq) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->request_irq(spi, irq_flag, irqhdl, irq_data);
}
return RET_ERR;
}
int32 spi_release_irq(struct spi_device *spi, uint32 irq_flag)
{
if (spi && ((const struct spi_hal_ops *)spi->dev.ops)->release_irq) {
HALDEV_SUSPENDED(spi);
return ((const struct spi_hal_ops *)spi->dev.ops)->release_irq(spi, irq_flag);
}
return RET_ERR;
}