blob: c5a2514212ff8829c1eed39b2fe81ef6e25412b8 [file] [log] [blame]
Greg Kroah-Hartmane3b3d0f2017-11-06 18:11:51 +01001// SPDX-License-Identifier: GPL-2.0
Russ Gorbyaf3b8882010-10-26 14:13:52 +01002/****************************************************************************
3 *
4 * Driver for the IFX spi modem.
5 *
6 * Copyright (C) 2009, 2010 Intel Corp
7 * Jim Stanley <jim.stanley@intel.com>
8 *
Russ Gorbyaf3b8882010-10-26 14:13:52 +01009 *****************************************************************************/
10#ifndef _IFX6X60_H
11#define _IFX6X60_H
12
13#define DRVNAME "ifx6x60"
14#define TTYNAME "ttyIFX"
15
Russ Gorbyaf3b8882010-10-26 14:13:52 +010016#define IFX_SPI_MAX_MINORS 1
17#define IFX_SPI_TRANSFER_SIZE 2048
18#define IFX_SPI_FIFO_SIZE 4096
19
20#define IFX_SPI_HEADER_OVERHEAD 4
21#define IFX_RESET_TIMEOUT msecs_to_jiffies(50)
22
23/* device flags bitfield definitions */
24#define IFX_SPI_STATE_PRESENT 0
25#define IFX_SPI_STATE_IO_IN_PROGRESS 1
26#define IFX_SPI_STATE_IO_READY 2
27#define IFX_SPI_STATE_TIMER_PENDING 3
chao bi31fe9902012-10-31 16:54:07 +080028#define IFX_SPI_STATE_IO_AVAILABLE 4
Russ Gorbyaf3b8882010-10-26 14:13:52 +010029
30/* flow control bitfields */
31#define IFX_SPI_DCD 0
32#define IFX_SPI_CTS 1
33#define IFX_SPI_DSR 2
34#define IFX_SPI_RI 3
35#define IFX_SPI_DTR 4
36#define IFX_SPI_RTS 5
37#define IFX_SPI_TX_FC 6
38#define IFX_SPI_RX_FC 7
39#define IFX_SPI_UPDATE 8
40
41#define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \
42 IFX_SPI_HEADER_OVERHEAD)
43
44#define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING
45#define IFX_SPI_GPIO_TARGET 0
46#define IFX_SPI_GPIO0 0x105
47
48#define IFX_SPI_STATUS_TIMEOUT (2000*HZ)
49
50/* values for bits in power status byte */
51#define IFX_SPI_POWER_DATA_PENDING 1
52#define IFX_SPI_POWER_SRDY 2
53
54struct ifx_spi_device {
55 /* Our SPI device */
56 struct spi_device *spi_dev;
57
58 /* Port specific data */
59 struct kfifo tx_fifo;
60 spinlock_t fifo_lock;
61 unsigned long signal_state;
62
63 /* TTY Layer logic */
64 struct tty_port tty_port;
65 struct device *tty_dev;
66 int minor;
67
68 /* Low level I/O work */
69 struct tasklet_struct io_work_tasklet;
70 unsigned long flags;
71 dma_addr_t rx_dma;
72 dma_addr_t tx_dma;
73
Russ Gorby2f1522e2011-02-02 12:56:58 -080074 int modem; /* Modem type */
75 int use_dma; /* provide dma-able addrs in SPI msg */
76 long max_hz; /* max SPI frequency */
Russ Gorbyaf3b8882010-10-26 14:13:52 +010077
78 spinlock_t write_lock;
79 int write_pending;
80 spinlock_t power_lock;
81 unsigned char power_status;
82
83 unsigned char *rx_buffer;
84 unsigned char *tx_buffer;
85 dma_addr_t rx_bus;
86 dma_addr_t tx_bus;
87 unsigned char spi_more;
88 unsigned char spi_slave_cts;
89
90 struct timer_list spi_timer;
91
92 struct spi_message spi_msg;
93 struct spi_transfer spi_xfer;
94
95 struct {
96 /* gpio lines */
97 unsigned short srdy; /* slave-ready gpio */
98 unsigned short mrdy; /* master-ready gpio */
99 unsigned short reset; /* modem-reset gpio */
100 unsigned short po; /* modem-on gpio */
101 unsigned short reset_out; /* modem-in-reset gpio */
102 /* state/stats */
103 int unack_srdy_int_nb;
104 } gpio;
105
106 /* modem reset */
107 unsigned long mdm_reset_state;
108#define MR_START 0
109#define MR_INPROGRESS 1
110#define MR_COMPLETE 2
111 wait_queue_head_t mdm_reset_wait;
chao bi319fb0d2012-10-25 09:02:32 +0800112 void (*swap_buf)(unsigned char *buf, int len, void *end);
Russ Gorbyaf3b8882010-10-26 14:13:52 +0100113};
114
115#endif /* _IFX6X60_H */