spi.h
上传用户:beauty0755
上传日期:2022-02-24
资源大小:7k
文件大小:3k
源码类别:

驱动编程

开发平台:

Unix_Linux

  1. #include <linux/ioctl.h>
  2. /*------------------------------------------*/
  3. /* GPIO I/F                                 */
  4. /*------------------------------------------*/
  5. //#define IXP4XX_DEBUG_UART_BASE_PHYS (0xC8000000)
  6. #define IXP4XX_GPIO_BASE_PHYS (IXP4XX_PERIPHERAL_BASE_PHYS + 0x4000)
  7. //#define IXP4XX_PERIPHERAL_BASE_VIRT (0xFF000000)
  8. #define IXP4XX_GPIO_BASE_VIRT (IXP4XX_PERIPHERAL_BASE_VIRT + 0x4000)
  9. /*
  10.  * Constants to make it easy to access GPIO registers
  11.  */
  12. #define IXP4XX_GPIO_GPOUTR_OFFSET       0x00
  13. #define IXP4XX_GPIO_GPOER_OFFSET        0x04
  14. #define IXP4XX_GPIO_GPINR_OFFSET        0x08
  15. #define IXP4XX_GPIO_GPISR_OFFSET        0x0C
  16. #define IXP4XX_GPIO_GPIT1R_OFFSET 0x10
  17. #define IXP4XX_GPIO_GPIT2R_OFFSET 0x14
  18. #define IXP4XX_GPIO_GPCLKR_OFFSET 0x18
  19. #define IXP4XX_GPIO_GPDBSELR_OFFSET 0x1C
  20. /* 
  21.  * GPIO Register Definitions.
  22.  * [Only perform 32bit reads/writes]
  23.  */
  24. #define IXP4XX_GPIO_REG(x) ((volatile u32 *)(IXP4XX_GPIO_BASE_VIRT+(x)))
  25. #define IXP4XX_GPIO_GPOUTR IXP4XX_GPIO_REG(IXP4XX_GPIO_GPOUTR_OFFSET)
  26. #define IXP4XX_GPIO_GPOER       IXP4XX_GPIO_REG(IXP4XX_GPIO_GPOER_OFFSET)
  27. #define IXP4XX_GPIO_GPINR       IXP4XX_GPIO_REG(IXP4XX_GPIO_GPINR_OFFSET)
  28. #define IXP4XX_GPIO_GPISR       IXP4XX_GPIO_REG(IXP4XX_GPIO_GPISR_OFFSET)
  29. #define IXP4XX_GPIO_GPIT1R      IXP4XX_GPIO_REG(IXP4XX_GPIO_GPIT1R_OFFSET)
  30. #define IXP4XX_GPIO_GPIT2R      IXP4XX_GPIO_REG(IXP4XX_GPIO_GPIT2R_OFFSET)
  31. #define IXP4XX_GPIO_GPCLKR      IXP4XX_GPIO_REG(IXP4XX_GPIO_GPCLKR_OFFSET)
  32. #define IXP4XX_GPIO_GPDBSELR    IXP4XX_GPIO_REG(IXP4XX_GPIO_GPDBSELR_OFFSET)
  33. /* Global Robo registers */
  34. #define R_ROBOSPI_SPI_DATA      0xf0
  35. #define R_ROBOSPI_SPI_STATUS    0xfe
  36. #define R_ROBOSPI_PAGE          0xff
  37. #define GPIOOUTPUT  1
  38. #define GPIOINPUT  0
  39. #define SPI_SCK     1<<2
  40. #define SPI_SS      1<<3
  41. #define SPI_MISO    1<<4
  42. #define SPI_MOSI    1<<5
  43. #define _DD_MAKEMASK1(n) (1 << (n))
  44. /* Robo SPI Status registers */
  45. #define M_SPISTAT_TXRDY         _DD_MAKEMASK1(0)
  46. #define M_SPISTAT_RXRDY         _DD_MAKEMASK1(1)
  47. #define M_SPISTAT_MDIO_START    _DD_MAKEMASK1(2)
  48. #define M_SPISTAT_RACK          _DD_MAKEMASK1(5)
  49. #define M_SPISTAT_WCOL          _DD_MAKEMASK1(6)
  50. #define M_SPISTAT_SPIF          _DD_MAKEMASK1(7)
  51. /* Robo Fast SPI read response */
  52. #define M_SPISTAT_FAST_RACK     _DD_MAKEMASK1(0)
  53. #define SPI_WRITE8(b) do { uint8_t _d8 = b; sb_spi_write(&_d8,1); } while (0)
  54. #define POLL_DELAY()  udelay(1)
  55. #define SPIDEV_MAJOR 153
  56. #define DEVICE_NAME     "spidev"
  57. #define IOCTL_SPI_READ _IOR(SPIDEV_MAJOR, 0, char *)
  58. #define IOCTL_SPI_WRITE _IOR(SPIDEV_MAJOR, 1, char *)
  59. static int sb_gpio_init(void);
  60. static int sb_gpio(int out, unsigned long gpio,int logic);
  61. static int sb_spi_read(uint8_t * buf, int len);
  62. static int sb_spi_write(uint8_t *buf, int len);
  63. static int robo_select_page(int page);
  64. static int robo_reset(void);
  65. static int robo_fast_rack_poll();
  66. static int robo_read_reg(int page, int reg, uint8_t * buffer, int length);
  67. static int robo_write_reg(int page, int reg, uint8_t * buffer, int length);
  68. void BCM5324_soft_init(void);