mt_gpio_ext.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef _MT_GPIO_EXT_H_
  2. #define _MT_GPIO_EXT_H_
  3. #include <mach/mt_pmic_wrap.h>
  4. #define GPIOEXT_WR(addr, data) pwrap_write((unsigned long)addr, data)
  5. #define GPIOEXT_RD(addr) ({ \
  6. unsigned long ext_data; \
  7. (pwrap_read((unsigned long)addr, &ext_data) != 0) ? -1:ext_data; })
  8. #define GPIOEXT_SET_BITS(BIT, REG) (GPIOEXT_WR(REG, (unsigned long)(BIT)))
  9. #define GPIOEXT_CLR_BITS(BIT, REG) ({ \
  10. unsigned long ext_data; \
  11. int ret; \
  12. ret = GPIOEXT_RD(REG);\
  13. ext_data = ret;\
  14. (ret < 0) ? -1:(GPIOEXT_WR(REG, ext_data & ~((unsigned long)(BIT))))})
  15. /*----------------------------------------------------------------------------*/
  16. typedef struct {
  17. unsigned short val;
  18. unsigned short set;
  19. unsigned short rst;
  20. unsigned short _align;
  21. } EXT_VAL_REGS;
  22. /*----------------------------------------------------------------------------*/
  23. typedef struct {
  24. EXT_VAL_REGS dir[4]; /*0x0000 ~ 0x001F: 32 bytes */
  25. EXT_VAL_REGS pullen[4]; /*0x0020 ~ 0x003F: 32 bytes */
  26. EXT_VAL_REGS pullsel[4]; /*0x0040 ~ 0x005F: 32 bytes */
  27. EXT_VAL_REGS dinv[4]; /*0x0060 ~ 0x007F: 32 bytes */
  28. EXT_VAL_REGS dout[4]; /*0x0080 ~ 0x009F: 32 bytes */
  29. EXT_VAL_REGS din[4]; /*0x00A0 ~ 0x00BF: 32 bytes */
  30. EXT_VAL_REGS mode[10]; /*0x00C0 ~ 0x010F: 80 bytes */
  31. } GPIOEXT_REGS;
  32. #endif /*_MT_GPIO_EXT_H_*/