mpc85xx: add SPI kernel loader for TP-Link TL-WDR4900 v1
[openwrt/staging/hauke.git] / target / linux / mpc85xx / image / spi-loader / include / spi.h
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 * Common SPI Interface: Controller-specific definitions
4 *
5 * Copyright (c) 2022 Matthias Schiffer <mschiffer@universe-factory.net>
6 *
7 * Based on U-boot's spi.h:
8 *
9 * (C) Copyright 2001
10 * Gerald Van Baren, Custom IDEAS, vanbaren@cideas.com.
11 */
12
13 #pragma once
14
15 #include <types.h>
16
17 /* SPI mode flags */
18 #define SPI_CPHA BIT(0) /* clock phase (1 = SPI_CLOCK_PHASE_SECOND) */
19 #define SPI_CPOL BIT(1) /* clock polarity (1 = SPI_POLARITY_HIGH) */
20 #define SPI_MODE_0 (0|0) /* (original MicroWire) */
21 #define SPI_MODE_1 (0|SPI_CPHA)
22 #define SPI_MODE_2 (SPI_CPOL|0)
23 #define SPI_MODE_3 (SPI_CPOL|SPI_CPHA)
24
25 struct spi_transfer {
26 const void *tx_buf;
27 void *rx_buf;
28 size_t len;
29 };
30
31 static inline size_t spi_message_len(const struct spi_transfer *msg, int n) {
32 size_t total = 0;
33 for (int i = 0; i < n; i++) {
34 total += msg[i].len;
35 }
36 return total;
37 }
38
39 int spi_init(unsigned int cs, unsigned int max_hz, unsigned int mode);
40 int spi_claim_bus(void);
41 void spi_release_bus(void);
42 int spi_xfer(const struct spi_transfer *msg, int n);
43 size_t spi_max_xfer(void);