summaryrefslogtreecommitdiff
path: root/core/include/drivers/pl022_spi.h
blob: b40ba417e595c7b3f14c7ae573fd3030aa2f92a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* SPDX-License-Identifier: BSD-2-Clause */
/*
 * Copyright (c) 2016, Linaro Limited
 *
 */

#ifndef __PL022_SPI_H__
#define __PL022_SPI_H__

#include <gpio.h>
#include <spi.h>

#define PL022_REG_SIZE	0x1000

enum pl022_cs_control {
	PL022_CS_CTRL_AUTO_GPIO,
	PL022_CS_CTRL_CB,
	PL022_CS_CTRL_MANUAL
};

struct pl022_cs_gpio_data {
	struct gpio_chip	*chip;
	unsigned int		pin_num;
};

union pl022_cs_data {
	struct pl022_cs_gpio_data	gpio_data;
	void				(*cs_cb)(enum gpio_level value);
};

struct pl022_data {
	union pl022_cs_data	cs_data;
	struct spi_chip		chip;
	vaddr_t			base;
	enum spi_mode		mode;
	enum pl022_cs_control	cs_control;
	unsigned int		clk_hz;
	unsigned int		speed_hz;
	unsigned int		data_size_bits;
	bool			loopback;
};

void pl022_init(struct pl022_data *pd);

#endif	/* __PL022_SPI_H__ */