blob: e2df8ecfaab4bd3dc5b5d23764790414842ed97b [file] [log] [blame]
/*
* drivers/amlogic/spicc/spicc.h
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef __SPICC_H__
#define __SPICC_H__
#define SPICC_FIFO_SIZE 16
#define SPICC_DEFAULT_BIT_WIDTH 8
#define SPICC_DEFAULT_SPEED_HZ 3000000
#define SPICC_REG_RXDATA (0<<2)
#define SPICC_REG_TXDATA (1<<2)
#define SPICC_REG_CON (2<<2)
#define SPICC_REG_INT (3<<2)
#define SPICC_REG_DMA (4<<2)
#define SPICC_REG_STA (5<<2)
#define SPICC_REG_PERIOD (6<<2)
#define SPICC_REG_TEST (7<<2)
#define SPICC_REG_DRADDR (8<<2)
#define SPICC_REG_DWADDR (9<<2)
#define SPICC_REG_LD_CNTL0 (10<<2)
#define SPICC_REG_LD_CNTL1 (11<<2)
#define SPICC_REG_LD_RADDR (12<<2)
#define SPICC_REG_LD_WADDR (13<<2)
#define SPICC_REG_ENHANCE_CNTL (14<<2)
#define SPICC_REG_ENHANCE_CNTL1 (15<<2)
#define bits_desc(reg_offset, bits_offset, bits_len) \
(((bits_len)<<24)|((bits_offset)<<16)|(reg_offset))
#define of_mem_offset(bd) ((bd)&0xffff)
#define of_bits_offset(bd) (((bd)>>16)&0xff)
#define of_bits_len(bd) (((bd)>>24)&0xff)
#define CON_ENABLE bits_desc(SPICC_REG_CON, 0, 1)
#define CON_MODE bits_desc(SPICC_REG_CON, 1, 1)
#define CON_XCH bits_desc(SPICC_REG_CON, 2, 1)
#define CON_SMC bits_desc(SPICC_REG_CON, 3, 1)
#define CON_CLK_POL bits_desc(SPICC_REG_CON, 4, 1)
#define CON_CLK_PHA bits_desc(SPICC_REG_CON, 5, 1)
#define CON_SS_CTL bits_desc(SPICC_REG_CON, 6, 1)
#define CON_SS_POL bits_desc(SPICC_REG_CON, 7, 1)
#define CON_DRCTL bits_desc(SPICC_REG_CON, 8, 2)
#define CON_CHIP_SELECT bits_desc(SPICC_REG_CON, 12, 2)
#define CON_DATA_RATE_DIV bits_desc(SPICC_REG_CON, 16, 3)
#define CON_BITS_PER_WORD bits_desc(SPICC_REG_CON, 19, 6)
#define CON_BURST_LEN bits_desc(SPICC_REG_CON, 25, 7)
#define BURST_LEN_MAX 120
#define DMA_RX_FIFO_TH_MAX 15
#define INT_TX_EMPTY_EN bits_desc(SPICC_REG_INT, 0, 1)
#define INT_TX_HALF_EN bits_desc(SPICC_REG_INT, 1, 1)
#define INT_TX_FULL_EN bits_desc(SPICC_REG_INT, 2, 1)
#define INT_RX_READY_EN bits_desc(SPICC_REG_INT, 3, 1)
#define INT_RX_HALF_EN bits_desc(SPICC_REG_INT, 4, 1)
#define INT_RX_FULL_EN bits_desc(SPICC_REG_INT, 5, 1)
#define INT_RX_OF_EN bits_desc(SPICC_REG_INT, 6, 1)
#define INT_XFER_COM_EN bits_desc(SPICC_REG_INT, 7, 1)
#define DMA_EN bits_desc(SPICC_REG_DMA, 0, 1)
#define DMA_TX_FIFO_TH bits_desc(SPICC_REG_DMA, 1, 5)
#define DMA_RX_FIFO_TH bits_desc(SPICC_REG_DMA, 6, 5)
#define DMA_NUM_RD_BURST bits_desc(SPICC_REG_DMA, 11, 4)
#define DMA_NUM_WR_BURST bits_desc(SPICC_REG_DMA, 15, 4)
#define DMA_URGENT bits_desc(SPICC_REG_DMA, 19, 1)
#define DMA_THREAD_ID bits_desc(SPICC_REG_DMA, 20, 6)
#define DMA_BURST_NUM bits_desc(SPICC_REG_DMA, 26, 6)
#define STA_TX_EMPTY bits_desc(SPICC_REG_STA, 0, 1)
#define STA_TX_HALF bits_desc(SPICC_REG_STA, 1, 1)
#define STA_TX_FULL bits_desc(SPICC_REG_STA, 2, 1)
#define STA_RX_READY bits_desc(SPICC_REG_STA, 3, 1)
#define STA_RX_HALF bits_desc(SPICC_REG_STA, 4, 1)
#define STA_RX_FULL bits_desc(SPICC_REG_STA, 5, 1)
#define STA_RX_OF bits_desc(SPICC_REG_STA, 6, 1)
#define STA_XFER_COM bits_desc(SPICC_REG_STA, 7, 1)
#define WAIT_CYCLES bits_desc(SPICC_REG_PERIOD, 0, 14)
#define TX_COUNT bits_desc(SPICC_REG_TEST, 0, 5)
#define RX_COUNT bits_desc(SPICC_REG_TEST, 5, 5)
#define LOOPBACK_EN bits_desc(SPICC_REG_TEST, 14, 1)
#define SWAP_EN bits_desc(SPICC_REG_TEST, 15, 1)
#define DELAY_CONTROL bits_desc(SPICC_REG_TEST, 16, 6)
#define FIFO_RESET bits_desc(SPICC_REG_TEST, 22, 2)
#define CLK_FREE_EN bits_desc(SPICC_REG_TEST, 24, 1)
#define CS_DELAY bits_desc(SPICC_REG_ENHANCE_CNTL, 0, 16)
#define ENHANCE_CLK_DIV bits_desc(SPICC_REG_ENHANCE_CNTL, 16, 8)
#define ENHANCE_CLK_DIV_SELECT bits_desc(SPICC_REG_ENHANCE_CNTL, 24, 1)
#define MOSI_OEN bits_desc(SPICC_REG_ENHANCE_CNTL, 25, 1)
#define CLK_OEN bits_desc(SPICC_REG_ENHANCE_CNTL, 26, 1)
#define CS_OEN bits_desc(SPICC_REG_ENHANCE_CNTL, 27, 1)
#define CS_DELAY_EN bits_desc(SPICC_REG_ENHANCE_CNTL, 28, 1)
#define MAIN_CLK_AO bits_desc(SPICC_REG_ENHANCE_CNTL, 29, 1)
#define MISO_I_CAPTURE_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 0, 1)
#define MISO_I_CAPTURE_DELAY bits_desc(SPICC_REG_ENHANCE_CNTL1, 1, 9)
#define MOSI_I_CAPTURE_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 14, 1)
#define FCLK_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 15, 1)
#define MOSI_I_DLYCTL_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 16, 1)
#define MOSI_I_DLYCTL bits_desc(SPICC_REG_ENHANCE_CNTL1, 17, 3)
#define MISO_I_DLYCTL_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 20, 1)
#define MISO_I_DLYCTL bits_desc(SPICC_REG_ENHANCE_CNTL1, 21, 3)
#define MOSI_O_DLYCTL_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 24, 1)
#define MOSI_O_DLYCTL bits_desc(SPICC_REG_ENHANCE_CNTL1, 25, 3)
#define MOSI_OEN_DLYCTL_EN bits_desc(SPICC_REG_ENHANCE_CNTL1, 28, 1)
#define MOSI_OEN_DLYCTL bits_desc(SPICC_REG_ENHANCE_CNTL1, 29, 3)
struct spicc_platform_data {
int device_id;
struct spicc_regs __iomem *regs;
struct pinctrl *pinctrl;
struct clk *clk;
int num_chipselect;
int *cs_gpios;
};
#endif