ifx6x60.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. #define DRVNAME "ifx6x60"
  29. #define TTYNAME "ttyIFX"
  30. #define IFX_SPI_MAX_MINORS 1
  31. #define IFX_SPI_TRANSFER_SIZE 2048
  32. #define IFX_SPI_FIFO_SIZE 4096
  33. #define IFX_SPI_HEADER_OVERHEAD 4
  34. #define IFX_RESET_TIMEOUT msecs_to_jiffies(50)
  35. /* device flags bitfield definitions */
  36. #define IFX_SPI_STATE_PRESENT 0
  37. #define IFX_SPI_STATE_IO_IN_PROGRESS 1
  38. #define IFX_SPI_STATE_IO_READY 2
  39. #define IFX_SPI_STATE_TIMER_PENDING 3
  40. /* flow control bitfields */
  41. #define IFX_SPI_DCD 0
  42. #define IFX_SPI_CTS 1
  43. #define IFX_SPI_DSR 2
  44. #define IFX_SPI_RI 3
  45. #define IFX_SPI_DTR 4
  46. #define IFX_SPI_RTS 5
  47. #define IFX_SPI_TX_FC 6
  48. #define IFX_SPI_RX_FC 7
  49. #define IFX_SPI_UPDATE 8
  50. #define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \
  51. IFX_SPI_HEADER_OVERHEAD)
  52. #define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING
  53. #define IFX_SPI_GPIO_TARGET 0
  54. #define IFX_SPI_GPIO0 0x105
  55. #define IFX_SPI_STATUS_TIMEOUT (2000*HZ)
  56. /* values for bits in power status byte */
  57. #define IFX_SPI_POWER_DATA_PENDING 1
  58. #define IFX_SPI_POWER_SRDY 2
  59. struct ifx_spi_device {
  60. /* Our SPI device */
  61. struct spi_device *spi_dev;
  62. /* Port specific data */
  63. struct kfifo tx_fifo;
  64. spinlock_t fifo_lock;
  65. unsigned long signal_state;
  66. /* TTY Layer logic */
  67. struct tty_port tty_port;
  68. struct device *tty_dev;
  69. int minor;
  70. /* Low level I/O work */
  71. struct tasklet_struct io_work_tasklet;
  72. unsigned long flags;
  73. dma_addr_t rx_dma;
  74. dma_addr_t tx_dma;
  75. int modem; /* Modem type */
  76. int use_dma; /* provide dma-able addrs in SPI msg */
  77. long max_hz; /* max SPI frequency */
  78. spinlock_t write_lock;
  79. int write_pending;
  80. spinlock_t power_lock;
  81. unsigned char power_status;
  82. unsigned char *rx_buffer;
  83. unsigned char *tx_buffer;
  84. dma_addr_t rx_bus;
  85. dma_addr_t tx_bus;
  86. unsigned char spi_more;
  87. unsigned char spi_slave_cts;
  88. struct timer_list spi_timer;
  89. struct spi_message spi_msg;
  90. struct spi_transfer spi_xfer;
  91. struct {
  92. /* gpio lines */
  93. unsigned short srdy; /* slave-ready gpio */
  94. unsigned short mrdy; /* master-ready gpio */
  95. unsigned short reset; /* modem-reset gpio */
  96. unsigned short po; /* modem-on gpio */
  97. unsigned short reset_out; /* modem-in-reset gpio */
  98. /* state/stats */
  99. int unack_srdy_int_nb;
  100. } gpio;
  101. /* modem reset */
  102. unsigned long mdm_reset_state;
  103. #define MR_START 0
  104. #define MR_INPROGRESS 1
  105. #define MR_COMPLETE 2
  106. wait_queue_head_t mdm_reset_wait;
  107. };
  108. #endif /* _IFX6X60_H */