linux/drivers/tty/serial/ifx6x60.h
<<
>>
Prefs
   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