1// SPDX-License-Identifier: GPL-2.0 2/**************************************************************************** 3 * 4 * Driver for the IFX spi modem. 5 * 6 * Copyright (C) 2009, 2010 Intel Corp 7 * Jim Stanley <jim.stanley@intel.com> 8 * 9 *****************************************************************************/ 10#ifndef _IFX6X60_H 11#define _IFX6X60_H 12 13#define DRVNAME "ifx6x60" 14#define TTYNAME "ttyIFX" 15 16#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 28#define IFX_SPI_STATE_IO_AVAILABLE 4 29 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 74 int modem; /* Modem type */ 75 int use_dma; /* provide dma-able addrs in SPI msg */ 76 long max_hz; /* max SPI frequency */ 77 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; 112 void (*swap_buf)(unsigned char *buf, int len, void *end); 113}; 114 115#endif /* _IFX6X60_H */ 116