1
/****************************************************************************
3
* Driver for the IFX spi modem.
5
* Copyright (C) 2009, 2010 Intel Corp
6
* Jim Stanley <jim.stanley@intel.com>
9
* This program is free software; you can redistribute it and/or modify
10
* it under the terms of the GNU General Public License version 2 as
11
* published by the Free Software Foundation.
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
25
*****************************************************************************/
29
#define DRVNAME "ifx6x60"
30
#define TTYNAME "ttyIFX"
32
#define IFX_SPI_MAX_MINORS 1
33
#define IFX_SPI_TRANSFER_SIZE 2048
34
#define IFX_SPI_FIFO_SIZE 4096
36
#define IFX_SPI_HEADER_OVERHEAD 4
37
#define IFX_RESET_TIMEOUT msecs_to_jiffies(50)
39
/* device flags bitfield definitions */
40
#define IFX_SPI_STATE_PRESENT 0
41
#define IFX_SPI_STATE_IO_IN_PROGRESS 1
42
#define IFX_SPI_STATE_IO_READY 2
43
#define IFX_SPI_STATE_TIMER_PENDING 3
45
/* flow control bitfields */
52
#define IFX_SPI_TX_FC 6
53
#define IFX_SPI_RX_FC 7
54
#define IFX_SPI_UPDATE 8
56
#define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \
57
IFX_SPI_HEADER_OVERHEAD)
59
#define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING
60
#define IFX_SPI_GPIO_TARGET 0
61
#define IFX_SPI_GPIO0 0x105
63
#define IFX_SPI_STATUS_TIMEOUT (2000*HZ)
65
/* values for bits in power status byte */
66
#define IFX_SPI_POWER_DATA_PENDING 1
67
#define IFX_SPI_POWER_SRDY 2
69
struct ifx_spi_device {
71
struct spi_device *spi_dev;
73
/* Port specific data */
76
unsigned long signal_state;
79
struct tty_port tty_port;
80
struct device *tty_dev;
83
/* Low level I/O work */
84
struct tasklet_struct io_work_tasklet;
89
int modem; /* Modem type */
90
int use_dma; /* provide dma-able addrs in SPI msg */
91
long max_hz; /* max SPI frequency */
93
spinlock_t write_lock;
95
spinlock_t power_lock;
96
unsigned char power_status;
98
unsigned char *rx_buffer;
99
unsigned char *tx_buffer;
102
unsigned char spi_more;
103
unsigned char spi_slave_cts;
105
struct timer_list spi_timer;
107
struct spi_message spi_msg;
108
struct spi_transfer spi_xfer;
112
unsigned short srdy; /* slave-ready gpio */
113
unsigned short mrdy; /* master-ready gpio */
114
unsigned short reset; /* modem-reset gpio */
115
unsigned short po; /* modem-on gpio */
116
unsigned short reset_out; /* modem-in-reset gpio */
118
int unack_srdy_int_nb;
122
unsigned long mdm_reset_state;
124
#define MR_INPROGRESS 1
125
#define MR_COMPLETE 2
126
wait_queue_head_t mdm_reset_wait;
129
#endif /* _IFX6X60_H */