26 #include <linux/module.h>
31 #include <linux/slab.h>
37 #define WSPI_CMD_READ 0x40000000
38 #define WSPI_CMD_WRITE 0x00000000
39 #define WSPI_CMD_FIXED 0x20000000
40 #define WSPI_CMD_BYTE_LENGTH 0x1FFE0000
41 #define WSPI_CMD_BYTE_LENGTH_OFFSET 17
42 #define WSPI_CMD_BYTE_ADDR 0x0001FFFF
44 #define WSPI_INIT_CMD_CRC_LEN 5
46 #define WSPI_INIT_CMD_START 0x00
47 #define WSPI_INIT_CMD_TX 0x40
49 #define WSPI_INIT_CMD_BYPASS_BIT 0x80
50 #define WSPI_INIT_CMD_FIXEDBUSY_LEN 0x07
51 #define WSPI_INIT_CMD_EN_FIXEDBUSY 0x80
52 #define WSPI_INIT_CMD_DIS_FIXEDBUSY 0x00
53 #define WSPI_INIT_CMD_IOD 0x40
54 #define WSPI_INIT_CMD_IP 0x20
55 #define WSPI_INIT_CMD_CS 0x10
56 #define WSPI_INIT_CMD_WS 0x08
57 #define WSPI_INIT_CMD_WSPI 0x01
58 #define WSPI_INIT_CMD_END 0x01
60 #define WSPI_INIT_CMD_LEN 8
62 #define HW_ACCESS_WSPI_FIXED_BUSY_LEN \
63 ((WL1271_BUSY_WORD_LEN - 4) / sizeof(u32))
64 #define HW_ACCESS_WSPI_INIT_CMD_MASK 0
67 #define WSPI_MAX_CHUNK_SIZE 4092
73 #define SPI_AGGR_BUFFER_SIZE (4 * PAGE_SIZE)
75 #define WSPI_MAX_NUM_OF_CHUNKS (SPI_AGGR_BUFFER_SIZE / WSPI_MAX_CHUNK_SIZE)
92 "could not allocate cmd for spi reset\n");
103 spi_message_add_tail(&t, &m);
110 static void wl12xx_spi_init(
struct device *child)
120 "could not allocate cmd for spi init\n");
124 memset(crc, 0,
sizeof(crc));
126 spi_message_init(&m);
159 spi_message_add_tail(&t, &m);
165 #define WL1271_BUSY_WORD_TIMEOUT 1000
167 static int wl12xx_spi_read_busy(
struct device *child)
174 int num_busy_bytes = 0;
183 while (num_busy_bytes) {
185 spi_message_init(&m);
190 spi_message_add_tail(&t[0], &m);
228 spi_message_init(&m);
234 spi_message_add_tail(&t[0], &m);
240 spi_message_add_tail(&t[1], &m);
245 wl12xx_spi_read_busy(child)) {
246 memset(buf, 0, chunk_len);
250 spi_message_init(&m);
254 t[0].
len = chunk_len;
256 spi_message_add_tail(&t[0], &m);
270 void *buf,
size_t len,
bool fixed)
282 spi_message_init(&m);
300 t[
i].
len =
sizeof(*cmd);
301 spi_message_add_tail(&t[i++], &m);
304 t[
i].
len = chunk_len;
305 spi_message_add_tail(&t[i++], &m);
320 .read = wl12xx_spi_raw_read,
321 .write = wl12xx_spi_raw_write,
322 .reset = wl12xx_spi_reset,
323 .init = wl12xx_spi_init,
324 .set_block_size =
NULL,
334 pdata = spi->
dev.platform_data;
340 pdata->
ops = &spi_ops;
350 spi_set_drvdata(spi, glue);
364 dev_err(glue->
dev,
"can't allocate platform_device\n");
369 glue->
core->dev.parent = &spi->
dev;
385 dev_err(glue->
dev,
"can't add platform data\n");
391 dev_err(glue->
dev,
"can't register platform device\n");
418 static struct spi_driver wl1271_spi_driver = {
420 .name =
"wl1271_spi",
424 .probe = wl1271_probe,
428 static int __init wl1271_init(
void)
433 static void __exit wl1271_exit(
void)
435 spi_unregister_driver(&wl1271_spi_driver);