98 lines
2.6 KiB
C
98 lines
2.6 KiB
C
/* spi_dw_regs.h - Designware SPI driver private definitions */
|
|
|
|
/*
|
|
* Copyright (c) 2015 Intel Corporation.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef __SPI_DW_REGS_H__
|
|
#define __SPI_DW_REGS_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define DW_SPI_REG_CTRLR0 (0x00)
|
|
#define DW_SPI_REG_CTRLR1 (0x04)
|
|
#define DW_SPI_REG_SSIENR (0x08)
|
|
#define DW_SPI_REG_MWCR (0x0c)
|
|
#define DW_SPI_REG_SER (0x10)
|
|
#define DW_SPI_REG_BAUDR (0x14)
|
|
#define DW_SPI_REG_TXFTLR (0x18)
|
|
#define DW_SPI_REG_RXFTLR (0x1c)
|
|
#define DW_SPI_REG_TXFLR (0x20)
|
|
#define DW_SPI_REG_RXFLR (0x24)
|
|
#define DW_SPI_REG_SR (0x28)
|
|
#define DW_SPI_REG_IMR (0x2c)
|
|
#define DW_SPI_REG_ISR (0x30)
|
|
#define DW_SPI_REG_RISR (0x34)
|
|
#define DW_SPI_REG_TXOICR (0x38)
|
|
#define DW_SPI_REG_RXOICR (0x3c)
|
|
#define DW_SPI_REG_RXUICR (0x40)
|
|
#define DW_SPI_REG_MSTICR (0x44)
|
|
#define DW_SPI_REG_ICR (0x48)
|
|
#define DW_SPI_REG_DMACR (0x4c)
|
|
#define DW_SPI_REG_DMATDLR (0x50)
|
|
#define DW_SPI_REG_DMARDLR (0x54)
|
|
#define DW_SPI_REG_IDR (0x58)
|
|
#define DW_SPI_REG_SSI_COMP_VERSION (0x5c)
|
|
#define DW_SPI_REG_DR (0x60)
|
|
#define DW_SPI_REG_RX_SAMPLE_DLY (0xf0)
|
|
|
|
/* Register helpers */
|
|
DEFINE_MM_REG_WRITE(ctrlr0, DW_SPI_REG_CTRLR0, 32)
|
|
DEFINE_MM_REG_WRITE(ser, DW_SPI_REG_SER, 8)
|
|
DEFINE_MM_REG_WRITE(txftlr, DW_SPI_REG_TXFTLR, 32)
|
|
DEFINE_MM_REG_WRITE(rxftlr, DW_SPI_REG_RXFTLR, 32)
|
|
DEFINE_MM_REG_READ(rxftlr, DW_SPI_REG_RXFTLR, 32)
|
|
DEFINE_MM_REG_READ(txftlr, DW_SPI_REG_TXFTLR, 32)
|
|
DEFINE_MM_REG_WRITE(dr, DW_SPI_REG_DR, 32)
|
|
DEFINE_MM_REG_READ(dr, DW_SPI_REG_DR, 32)
|
|
DEFINE_MM_REG_READ(ssi_comp_version, DW_SPI_REG_SSI_COMP_VERSION, 32)
|
|
|
|
/* ICR is on a unique bit */
|
|
DEFINE_TEST_BIT_OP(icr, DW_SPI_REG_ICR, DW_SPI_SR_ICR_BIT)
|
|
#define clear_interrupts(addr) test_bit_icr(addr)
|
|
|
|
#ifdef CONFIG_SPI_DW_CLOCK_GATE
|
|
static inline void _clock_config(struct device *dev)
|
|
{
|
|
struct device *clk;
|
|
char *drv = CONFIG_SPI_DW_CLOCK_GATE_DRV_NAME;
|
|
|
|
clk = device_get_binding(drv);
|
|
if (clk) {
|
|
struct spi_dw_data *spi = dev->driver_data;
|
|
|
|
spi->clock = clk;
|
|
}
|
|
}
|
|
|
|
static inline void _clock_on(struct device *dev)
|
|
{
|
|
const struct spi_dw_config *info = dev->config->config_info;
|
|
struct spi_dw_data *spi = dev->driver_data;
|
|
|
|
clock_control_on(spi->clock, info->clock_data);
|
|
}
|
|
|
|
static inline void _clock_off(struct device *dev)
|
|
{
|
|
const struct spi_dw_config *info = dev->config->config_info;
|
|
struct spi_dw_data *spi = dev->driver_data;
|
|
|
|
clock_control_off(spi->clock, info->clock_data);
|
|
}
|
|
#else
|
|
#define _clock_config(...)
|
|
#define _clock_on(...)
|
|
#define _clock_off(...)
|
|
#endif /* CONFIG_SPI_DW_CLOCK_GATE */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __SPI_DW_REGS_H__ */
|