embox

Форк
0
/
spi_dev.c 
74 строки · 1.4 Кб
1
/**
2
 * @file spi_devfs.c
3
 * @brief
4
 * @author Denis Deryugin <deryugin.denis@gmail.com>
5
 * @version
6
 * @date 05.12.2018
7
 */
8

9
#include <assert.h>
10
#include <stdint.h>
11
#include <sys/uio.h>
12

13
#include <drivers/char_dev.h>
14
#include <drivers/spi.h>
15
#include <util/log.h>
16

17
static ssize_t spi_read(struct char_dev *cdev, void *buf, size_t nbyte) {
18
	struct spi_device *dev;
19

20
	assert(cdev);
21
	assert(buf);
22

23
	dev = (struct spi_device *)cdev;
24

25
	spi_transfer(dev, NULL, buf, nbyte);
26

27
	return nbyte;
28
}
29

30
static ssize_t spi_write(struct char_dev *cdev, const void *buf, size_t nbyte) {
31
	struct spi_device *dev;
32

33
	assert(cdev);
34
	assert(buf);
35

36
	dev = (struct spi_device *)cdev;
37

38
	spi_transfer(dev, (void *)buf, NULL, nbyte);
39

40
	return nbyte;
41
}
42

43
static int spi_ioctl(struct char_dev *cdev, int request, void *data) {
44
	struct spi_transfer_arg *transfer_arg;
45
	struct spi_device *dev;
46

47
	assert(cdev);
48

49
	dev = (struct spi_device *)cdev;
50

51
	log_debug("request=0x%x data=%p", request, data);
52

53
	switch (request) {
54
	case SPI_IOCTL_CS:
55
		spi_select(dev, (int)(intptr_t)data);
56
		break;
57
	case SPI_IOCTL_TRANSFER:
58
		transfer_arg = data;
59
		spi_transfer(dev, transfer_arg->in, transfer_arg->out,
60
		    transfer_arg->count);
61
		break;
62
	case SPI_IOCTL_CS_MODE:
63
		dev->flags = (int)(intptr_t)data;
64
		break;
65
	}
66

67
	return 0;
68
}
69

70
const struct char_dev_ops __spi_cdev_ops = {
71
    .read = spi_read,
72
    .write = spi_write,
73
    .ioctl = spi_ioctl,
74
};
75

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

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

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

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