embox

Форк
0
82 строки · 2.1 Кб
1
/**
2
 * @file
3
 *
4
 * @date Jun 19, 2023
5
 * @author Anton Bondarev
6
 */
7

8
#include <util/log.h>
9

10
#include <stdbool.h>
11

12
#include <drivers/dma/dma.h>
13

14
#include <drivers/spi.h>
15

16
#include "bcm283x_spi_dev.h"
17

18
struct dma_ctrl_blk *init_dma_block_spi_in(struct spi_device *dev, struct dma_mem_handle *mem_handle,
19
		uint32_t offset, void *src, uint32_t bytes,
20
		struct dma_ctrl_blk *next_conbk, bool int_enable) {
21
	struct bcm283x_spi_dev *bcm283x_spi_dev;
22

23
	assert(dev);
24
	assert(dev->spi_ops);
25
	bcm283x_spi_dev = dev->priv;
26

27
	if(bcm283x_spi_dev->init_dma_block_spi_in == NULL) {
28
		log_debug("Select operation is not supported for SPI%d",
29
				spi_dev_id(dev));
30
		return NULL;
31
	}
32
	return bcm283x_spi_dev->init_dma_block_spi_in(dev, mem_handle, offset, src,bytes, next_conbk, int_enable);
33
}
34

35
struct dma_ctrl_blk *init_dma_block_spi_out(struct spi_device *dev, struct dma_mem_handle *mem_handle,
36
		uint32_t offset, void *dest, uint32_t bytes,
37
		struct dma_ctrl_blk *next_conbk, bool int_enable) {
38
	struct bcm283x_spi_dev *bcm283x_spi_dev;
39

40
	assert(dev);
41
	assert(dev->spi_ops);
42
	bcm283x_spi_dev = dev->priv;
43

44
	if(bcm283x_spi_dev->init_dma_block_spi_out == NULL) {
45
		log_debug("Select operation is not supported for SPI%d",
46
				spi_dev_id(dev));
47
		return NULL;
48
	}
49
	return bcm283x_spi_dev->init_dma_block_spi_out(dev, mem_handle, offset, dest, bytes, next_conbk, int_enable);
50
}
51

52
int spi_dma_prepare(struct spi_device *dev,
53
		irq_return_t (*dma_complete)(unsigned int,  void *),
54
		int dma_chan_out, int dma_chan_in,
55
		uint32_t dma_levels) {
56
	struct bcm283x_spi_dev *bcm283x_spi_dev;
57

58
	assert(dev);
59

60
	bcm283x_spi_dev = dev->priv;
61

62
	bcm283x_spi_dev->dma_complete = dma_complete;
63
	bcm283x_spi_dev->dma_chan_out = dma_chan_out;
64
	bcm283x_spi_dev->dma_chan_in = dma_chan_in;
65
	bcm283x_spi_dev->dma_levels = dma_levels;
66

67
	return 0;
68
}
69

70
int spi_irq_prepare(struct spi_device *dev,
71
		irq_spi_event_t send_complete, irq_spi_event_t received_data) {
72
	struct bcm283x_spi_dev *bcm283x_spi_dev;
73

74
	assert(dev);
75

76
	bcm283x_spi_dev = dev->priv;
77

78
	bcm283x_spi_dev->send_complete = send_complete;
79
	bcm283x_spi_dev->received_data = received_data;
80

81
	return 0;
82
}
83

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.