mt_spm.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef _MT_SPM_
  2. #define _MT_SPM_
  3. #include <linux/kernel.h>
  4. #include <linux/io.h>
  5. #include <mach/upmu_hw.h> /* for PMIC power settings */
  6. extern void __iomem *spm_base;
  7. extern void __iomem *spm_infracfg_ao_base;
  8. extern void __iomem *spm_cksys_base;
  9. extern void __iomem *spm_mcucfg;
  10. #if defined(CONFIG_ARCH_MT6755)
  11. extern void __iomem *spm_bsi1cfg;
  12. #endif
  13. extern void __iomem *spm_ddrphy_base;
  14. extern u32 spm_irq_0;
  15. extern u32 spm_irq_1;
  16. extern u32 spm_irq_2;
  17. extern u32 spm_irq_3;
  18. extern u32 spm_irq_4;
  19. extern u32 spm_irq_5;
  20. extern u32 spm_irq_6;
  21. extern u32 spm_irq_7;
  22. #undef SPM_BASE
  23. #define SPM_BASE spm_base
  24. #define SPM_INFRACFG_AO_BASE spm_infracfg_ao_base
  25. /* #include <mach/mt_irq.h> */
  26. #include <mt-plat/sync_write.h>
  27. /**************************************
  28. * Config and Parameter
  29. **************************************/
  30. #define SPM_IRQ0_ID spm_irq_0
  31. #define SPM_IRQ1_ID spm_irq_1
  32. #define SPM_IRQ2_ID spm_irq_2
  33. #define SPM_IRQ3_ID spm_irq_3
  34. #define SPM_IRQ4_ID spm_irq_4
  35. #define SPM_IRQ5_ID spm_irq_5
  36. #define SPM_IRQ6_ID spm_irq_6
  37. #define SPM_IRQ7_ID spm_irq_7
  38. #include "mt_spm_reg.h"
  39. typedef enum {
  40. WR_NONE = 0,
  41. WR_UART_BUSY = 1,
  42. WR_PCM_ASSERT = 2,
  43. WR_PCM_TIMER = 3,
  44. WR_WAKE_SRC = 4,
  45. WR_UNKNOWN = 5,
  46. } wake_reason_t;
  47. enum mt_sodi_fw {
  48. SODI_FW_LPM = (1 << 0), /* 1600/1.0 : 1270/0.9 : 1066/0.9 */
  49. SODI_FW_HPM = (1 << 1), /* 1700/1.0 : 1270/0.9 : 1066/0.9 */
  50. SODI_FW_ULTRA = (1 << 2), /* 1866/1.05 : 1600/1.0 : 1270/0.9 */
  51. };
  52. struct twam_sig {
  53. u32 sig0; /* signal 0: config or status */
  54. u32 sig1; /* signal 1: config or status */
  55. u32 sig2; /* signal 2: config or status */
  56. u32 sig3; /* signal 3: config or status */
  57. };
  58. typedef void (*twam_handler_t) (struct twam_sig *twamsig);
  59. typedef void (*vcorefs_handler_t) (int opp);
  60. typedef void (*vcorefs_start_handler_t) (void);
  61. /* check if spm firmware ready */
  62. extern int spm_load_firmware_status(void);
  63. /* for power management init */
  64. extern int spm_module_init(void);
  65. /* for ANC in talking */
  66. extern void spm_mainpll_on_request(const char *drv_name);
  67. extern void spm_mainpll_on_unrequest(const char *drv_name);
  68. /* for TWAM in MET */
  69. extern void spm_twam_register_handler(twam_handler_t handler);
  70. extern void spm_twam_enable_monitor(const struct twam_sig *twamsig, bool speed_mode);
  71. extern void spm_twam_disable_monitor(void);
  72. extern void spm_twam_set_idle_select(unsigned int sel);
  73. extern void spm_twam_set_window_length(unsigned int len);
  74. extern void spm_twam_set_mon_type(struct twam_sig *mon);
  75. /* for Vcore DVFS */
  76. extern int spm_go_to_ddrdfs(u32 spm_flags, u32 spm_data);
  77. /* for Vcore DVFS in MET */
  78. extern void spm_vcorefs_register_handler(vcorefs_handler_t handler, vcorefs_start_handler_t start_handler);
  79. /* for PMIC power settings */
  80. enum {
  81. PMIC_PWR_NORMAL = 0,
  82. PMIC_PWR_DEEPIDLE,
  83. PMIC_PWR_SODI3,
  84. PMIC_PWR_SODI,
  85. PMIC_PWR_SUSPEND,
  86. PMIC_PWR_NUM,
  87. };
  88. void spm_pmic_power_mode(int mode, int force, int lock);
  89. void spm_bypass_boost_gpio_set(void);
  90. /**************************************
  91. * Macro and Inline
  92. **************************************/
  93. #define get_high_cnt(sigsta) ((sigsta) & 0x3ff)
  94. #define get_high_percent(sigsta) ((get_high_cnt(sigsta) * 100 + 511) / 1023)
  95. #endif