13 #define MTK_SPI_DEBUG 0
38 u32 cs_ticks,
unsigned int tick_dly)
41 SPI_CFG_CS_SETUP, cs_ticks - 1);
44 SPI_CFG_SCK_HIGH, sck_ticks - 1);
47 SPI_CFG1_CS_IDLE, cs_ticks - 1);
57 unsigned int speed_hz,
unsigned int tick_dly)
59 u32 div, sck_ticks, cs_ticks;
72 cs_ticks = sck_ticks * 2;
75 bus, pad_select,
SPI_HZ / (sck_ticks * 2));
101 for (i = 0; i < size; i++)
121 size_t *bytes_in,
size_t *bytes_out)
132 else if (*bytes_in == 0)
135 size =
MIN(*bytes_in, *bytes_out);
138 SPI_CFG1_PACKET_LOOP, 0);
142 for (i = 0; i < size; i++) {
143 reg_val |=
outb[i] << ((i % 4) * 8);
161 for (i = 0; i < word_count; i++)
176 "Timeout waiting for status1 status.\n");
185 "Timeout waiting for status0 status.\n");
192 for (i = 0; i < size; i++) {
195 inb[i] = (reg_val >> ((i % 4) * 8)) & 0xff;
213 size_t bytes_out,
void *din,
size_t bytes_in)
215 while (bytes_out || bytes_in) {
218 size_t in_rem = in_now;
219 size_t out_rem = out_now;
226 size_t sent = out_now - out_rem;
232 size_t received = in_now - in_rem;
233 bytes_in -= received;
266 .max_xfer_size = 65535,
static void write32(void *addr, uint32_t val)
static uint32_t read32(const void *addr)
#define assert(statement)
#define DIV_ROUND_UP(x, y)
#define printk(level,...)
void outb(u8 val, u16 port)
#define setbits32(addr, set)
#define SET32_BITFIELDS(addr,...)
#define clrsetbits32(addr, clear, set)
#define clrbits32(addr, clear)
void gpio_output(gpio_t gpio, int value)
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_usecs_expire(struct stopwatch *sw, long us)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
static struct spi_slave slave
struct mtk_spi_regs * regs
int(* setup)(const struct spi_slave *slave)