1 /**************************************************************************** 2 * 3 * Driver for the IFX spi modem. 4 * 5 * Copyright (C) 2009, 2010 Intel Corp 6 * Jim Stanley <jim.stanley@intel.com> 7 * 8 * 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. 12 * 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. 17 * 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, 21 * USA 22 * 23 * 24 * 25 *****************************************************************************/ 26 #ifndef _IFX6X60_H 27 #define _IFX6X60_H 28 29 #define DRVNAME "ifx6x60" 30 #define TTYNAME "ttyIFX" 31 32 #define IFX_SPI_MAX_MINORS 1 33 #define IFX_SPI_TRANSFER_SIZE 2048 34 #define IFX_SPI_FIFO_SIZE 4096 35 36 #define IFX_SPI_HEADER_OVERHEAD 4 37 #define IFX_RESET_TIMEOUT msecs_to_jiffies(50) 38 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 44 45 /* flow control bitfields */ 46 #define IFX_SPI_DCD 0 47 #define IFX_SPI_CTS 1 48 #define IFX_SPI_DSR 2 49 #define IFX_SPI_RI 3 50 #define IFX_SPI_DTR 4 51 #define IFX_SPI_RTS 5 52 #define IFX_SPI_TX_FC 6 53 #define IFX_SPI_RX_FC 7 54 #define IFX_SPI_UPDATE 8 55 56 #define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \ 57 IFX_SPI_HEADER_OVERHEAD) 58 59 #define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING 60 #define IFX_SPI_GPIO_TARGET 0 61 #define IFX_SPI_GPIO0 0x105 62 63 #define IFX_SPI_STATUS_TIMEOUT (2000*HZ) 64 65 /* values for bits in power status byte */ 66 #define IFX_SPI_POWER_DATA_PENDING 1 67 #define IFX_SPI_POWER_SRDY 2 68 69 struct ifx_spi_device { 70 /* Our SPI device */ 71 struct spi_device *spi_dev; 72 73 /* Port specific data */ 74 struct kfifo tx_fifo; 75 spinlock_t fifo_lock; 76 unsigned long signal_state; 77 78 /* TTY Layer logic */ 79 struct tty_port tty_port; 80 struct device *tty_dev; 81 int minor; 82 83 /* Low level I/O work */ 84 struct tasklet_struct io_work_tasklet; 85 unsigned long flags; 86 dma_addr_t rx_dma; 87 dma_addr_t tx_dma; 88 89 int modem; /* Modem type */ 90 int use_dma; /* provide dma-able addrs in SPI msg */ 91 long max_hz; /* max SPI frequency */ 92 93 spinlock_t write_lock; 94 int write_pending; 95 spinlock_t power_lock; 96 unsigned char power_status; 97 98 unsigned char *rx_buffer; 99 unsigned char *tx_buffer; 100 dma_addr_t rx_bus; 101 dma_addr_t tx_bus; 102 unsigned char spi_more; 103 unsigned char spi_slave_cts; 104 105 struct timer_list spi_timer; 106 107 struct spi_message spi_msg; 108 struct spi_transfer spi_xfer; 109 110 struct { 111 /* gpio lines */ 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 */ 117 /* state/stats */ 118 int unack_srdy_int_nb; 119 } gpio; 120 121 /* modem reset */ 122 unsigned long mdm_reset_state; 123 #define MR_START 0 124 #define MR_INPROGRESS 1 125 #define MR_COMPLETE 2 126 wait_queue_head_t mdm_reset_wait; 127 }; 128 129 #endif /* _IFX6X60_H */ 130