pinctrl-sprd.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Driver header file for pin controller driver
  4. * Copyright (C) 2017 Spreadtrum - http://www.spreadtrum.com
  5. */
  6. #ifndef __PINCTRL_SPRD_H__
  7. #define __PINCTRL_SPRD_H__
  8. struct platform_device;
  9. #define NUM_OFFSET (20)
  10. #define TYPE_OFFSET (16)
  11. #define BIT_OFFSET (8)
  12. #define WIDTH_OFFSET (4)
  13. #define SPRD_PIN_INFO(num, type, offset, width, reg) \
  14. (((num) & 0xFFF) << NUM_OFFSET | \
  15. ((type) & 0xF) << TYPE_OFFSET | \
  16. ((offset) & 0xFF) << BIT_OFFSET | \
  17. ((width) & 0xF) << WIDTH_OFFSET | \
  18. ((reg) & 0xF))
  19. #define SPRD_PINCTRL_PIN(pin) SPRD_PINCTRL_PIN_DATA(pin, #pin)
  20. #define SPRD_PINCTRL_PIN_DATA(a, b) \
  21. { \
  22. .name = b, \
  23. .num = (((a) >> NUM_OFFSET) & 0xfff), \
  24. .type = (((a) >> TYPE_OFFSET) & 0xf), \
  25. .bit_offset = (((a) >> BIT_OFFSET) & 0xff), \
  26. .bit_width = ((a) >> WIDTH_OFFSET & 0xf), \
  27. .reg = ((a) & 0xf) \
  28. }
  29. enum pin_type {
  30. GLOBAL_CTRL_PIN,
  31. COMMON_PIN,
  32. MISC_PIN,
  33. };
  34. struct sprd_pins_info {
  35. const char *name;
  36. unsigned int num;
  37. enum pin_type type;
  38. /* for global control pins configuration */
  39. unsigned long bit_offset;
  40. unsigned long bit_width;
  41. unsigned int reg;
  42. };
  43. int sprd_pinctrl_core_probe(struct platform_device *pdev,
  44. struct sprd_pins_info *sprd_soc_pin_info,
  45. int pins_cnt);
  46. int sprd_pinctrl_remove(struct platform_device *pdev);
  47. void sprd_pinctrl_shutdown(struct platform_device *pdev);
  48. #endif /* __PINCTRL_SPRD_H__ */