123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // SPDX-License-Identifier: GPL-2.0
- /****************************************************************************
- *
- * Driver for the IFX spi modem.
- *
- * Copyright (C) 2009, 2010 Intel Corp
- * Jim Stanley <jim.stanley@intel.com>
- *
- *****************************************************************************/
- #ifndef _IFX6X60_H
- #define _IFX6X60_H
- #define DRVNAME "ifx6x60"
- #define TTYNAME "ttyIFX"
- #define IFX_SPI_MAX_MINORS 1
- #define IFX_SPI_TRANSFER_SIZE 2048
- #define IFX_SPI_FIFO_SIZE 4096
- #define IFX_SPI_HEADER_OVERHEAD 4
- #define IFX_RESET_TIMEOUT msecs_to_jiffies(50)
- /* device flags bitfield definitions */
- #define IFX_SPI_STATE_PRESENT 0
- #define IFX_SPI_STATE_IO_IN_PROGRESS 1
- #define IFX_SPI_STATE_IO_READY 2
- #define IFX_SPI_STATE_TIMER_PENDING 3
- #define IFX_SPI_STATE_IO_AVAILABLE 4
- /* flow control bitfields */
- #define IFX_SPI_DCD 0
- #define IFX_SPI_CTS 1
- #define IFX_SPI_DSR 2
- #define IFX_SPI_RI 3
- #define IFX_SPI_DTR 4
- #define IFX_SPI_RTS 5
- #define IFX_SPI_TX_FC 6
- #define IFX_SPI_RX_FC 7
- #define IFX_SPI_UPDATE 8
- #define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \
- IFX_SPI_HEADER_OVERHEAD)
- #define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING
- #define IFX_SPI_GPIO_TARGET 0
- #define IFX_SPI_GPIO0 0x105
- #define IFX_SPI_STATUS_TIMEOUT (2000*HZ)
- /* values for bits in power status byte */
- #define IFX_SPI_POWER_DATA_PENDING 1
- #define IFX_SPI_POWER_SRDY 2
- struct ifx_spi_device {
- /* Our SPI device */
- struct spi_device *spi_dev;
- /* Port specific data */
- struct kfifo tx_fifo;
- spinlock_t fifo_lock;
- unsigned long signal_state;
- /* TTY Layer logic */
- struct tty_port tty_port;
- struct device *tty_dev;
- int minor;
- /* Low level I/O work */
- struct tasklet_struct io_work_tasklet;
- unsigned long flags;
- dma_addr_t rx_dma;
- dma_addr_t tx_dma;
- int modem; /* Modem type */
- int use_dma; /* provide dma-able addrs in SPI msg */
- long max_hz; /* max SPI frequency */
- spinlock_t write_lock;
- int write_pending;
- spinlock_t power_lock;
- unsigned char power_status;
- unsigned char *rx_buffer;
- unsigned char *tx_buffer;
- dma_addr_t rx_bus;
- dma_addr_t tx_bus;
- unsigned char spi_more;
- unsigned char spi_slave_cts;
- struct timer_list spi_timer;
- struct spi_message spi_msg;
- struct spi_transfer spi_xfer;
- struct {
- /* gpio lines */
- unsigned short srdy; /* slave-ready gpio */
- unsigned short mrdy; /* master-ready gpio */
- unsigned short reset; /* modem-reset gpio */
- unsigned short po; /* modem-on gpio */
- unsigned short reset_out; /* modem-in-reset gpio */
- /* state/stats */
- int unack_srdy_int_nb;
- } gpio;
- /* modem reset */
- unsigned long mdm_reset_state;
- #define MR_START 0
- #define MR_INPROGRESS 1
- #define MR_COMPLETE 2
- wait_queue_head_t mdm_reset_wait;
- void (*swap_buf)(unsigned char *buf, int len, void *end);
- };
- #endif /* _IFX6X60_H */
|