soc_common.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <pcmcia/ss.h>
  3. struct module;
  4. struct cpufreq_freqs;
  5. struct soc_pcmcia_regulator {
  6. struct regulator *reg;
  7. bool on;
  8. };
  9. struct pcmcia_state {
  10. unsigned detect: 1,
  11. ready: 1,
  12. bvd1: 1,
  13. bvd2: 1,
  14. wrprot: 1,
  15. vs_3v: 1,
  16. vs_Xv: 1;
  17. };
  18. /*
  19. * This structure encapsulates per-socket state which we might need to
  20. * use when responding to a Card Services query of some kind.
  21. */
  22. struct soc_pcmcia_socket {
  23. struct pcmcia_socket socket;
  24. /*
  25. * Info from low level handler
  26. */
  27. unsigned int nr;
  28. struct clk *clk;
  29. /*
  30. * Core PCMCIA state
  31. */
  32. const struct pcmcia_low_level *ops;
  33. unsigned int status;
  34. socket_state_t cs_state;
  35. unsigned short spd_io[MAX_IO_WIN];
  36. unsigned short spd_mem[MAX_WIN];
  37. unsigned short spd_attr[MAX_WIN];
  38. struct resource res_skt;
  39. struct resource res_io;
  40. struct resource res_io_io;
  41. struct resource res_mem;
  42. struct resource res_attr;
  43. struct {
  44. int gpio;
  45. struct gpio_desc *desc;
  46. unsigned int irq;
  47. const char *name;
  48. } stat[6];
  49. #define SOC_STAT_CD 0 /* Card detect */
  50. #define SOC_STAT_BVD1 1 /* BATDEAD / IOSTSCHG */
  51. #define SOC_STAT_BVD2 2 /* BATWARN / IOSPKR */
  52. #define SOC_STAT_RDY 3 /* Ready / Interrupt */
  53. #define SOC_STAT_VS1 4 /* Voltage sense 1 */
  54. #define SOC_STAT_VS2 5 /* Voltage sense 2 */
  55. struct gpio_desc *gpio_reset;
  56. struct gpio_desc *gpio_bus_enable;
  57. struct soc_pcmcia_regulator vcc;
  58. struct soc_pcmcia_regulator vpp;
  59. unsigned int irq_state;
  60. #ifdef CONFIG_CPU_FREQ
  61. struct notifier_block cpufreq_nb;
  62. #endif
  63. struct timer_list poll_timer;
  64. struct list_head node;
  65. void *driver_data;
  66. };
  67. struct pcmcia_low_level {
  68. struct module *owner;
  69. /* first socket in system */
  70. int first;
  71. /* nr of sockets */
  72. int nr;
  73. int (*hw_init)(struct soc_pcmcia_socket *);
  74. void (*hw_shutdown)(struct soc_pcmcia_socket *);
  75. void (*socket_state)(struct soc_pcmcia_socket *, struct pcmcia_state *);
  76. int (*configure_socket)(struct soc_pcmcia_socket *, const socket_state_t *);
  77. /*
  78. * Enable card status IRQs on (re-)initialisation. This can
  79. * be called at initialisation, power management event, or
  80. * pcmcia event.
  81. */
  82. void (*socket_init)(struct soc_pcmcia_socket *);
  83. /*
  84. * Disable card status IRQs and PCMCIA bus on suspend.
  85. */
  86. void (*socket_suspend)(struct soc_pcmcia_socket *);
  87. /*
  88. * Hardware specific timing routines.
  89. * If provided, the get_timing routine overrides the SOC default.
  90. */
  91. unsigned int (*get_timing)(struct soc_pcmcia_socket *, unsigned int, unsigned int);
  92. int (*set_timing)(struct soc_pcmcia_socket *);
  93. int (*show_timing)(struct soc_pcmcia_socket *, char *);
  94. #ifdef CONFIG_CPU_FREQ
  95. /*
  96. * CPUFREQ support.
  97. */
  98. int (*frequency_change)(struct soc_pcmcia_socket *, unsigned long, struct cpufreq_freqs *);
  99. #endif
  100. };