fingerprint_common_lsi.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include "fingerprint_common.h"
  2. #if defined(CONFIG_SENSORS_FINGERPRINT_MODULE)
  3. #if IS_ENABLED(CONFIG_EXYNOS_PM_QOS) || IS_ENABLED(CONFIG_EXYNOS_PM_QOS_MODULE)
  4. #include <soc/samsung/exynos_pm_qos.h>
  5. static struct exynos_pm_qos_request fingerprint_boost_qos;
  6. #endif
  7. #elif defined(CONFIG_SECURE_OS_BOOSTER_API)
  8. #include <mach/secos_booster.h>
  9. #elif defined(CONFIG_TZDEV_BOOST)
  10. #if defined(CONFIG_TEEGRIS_VERSION) && (CONFIG_TEEGRIS_VERSION >= 4)
  11. #include <../drivers/misc/tzdev/extensions/boost.h>
  12. #else
  13. #include <../drivers/misc/tzdev/tz_boost.h>
  14. #endif
  15. #endif
  16. void spi_get_ctrldata(struct spi_device *spi)
  17. {
  18. }
  19. int spi_clk_register(struct spi_clk_setting *clk_setting, struct device *dev)
  20. {
  21. #ifdef ENABLE_SENSORS_FPRINT_SECURE
  22. clk_setting->fp_spi_pclk = devm_clk_get(dev, "gate_spi_clk");
  23. if (IS_ERR(clk_setting->fp_spi_pclk)) {
  24. pr_err("Can't get gate_spi_clk\n");
  25. return PTR_ERR(clk_setting->fp_spi_pclk);
  26. }
  27. clk_setting->fp_spi_sclk = devm_clk_get(dev, "ipclk_spi");
  28. if (IS_ERR(clk_setting->fp_spi_sclk)) {
  29. pr_err("Can't get ipclk_spi\n");
  30. return PTR_ERR(clk_setting->fp_spi_sclk);
  31. }
  32. #endif
  33. return 0;
  34. }
  35. int spi_clk_unregister(struct spi_clk_setting *clk_setting)
  36. {
  37. #ifdef ENABLE_SENSORS_FPRINT_SECURE
  38. clk_put(clk_setting->fp_spi_pclk);
  39. clk_put(clk_setting->fp_spi_sclk);
  40. #endif
  41. return 0;
  42. }
  43. int spi_clk_enable(struct spi_clk_setting *clk_setting)
  44. {
  45. int rc = 0;
  46. #ifdef ENABLE_SENSORS_FPRINT_SECURE
  47. if (!clk_setting->enabled_clk) {
  48. clk_prepare_enable(clk_setting->fp_spi_pclk);
  49. clk_prepare_enable(clk_setting->fp_spi_sclk);
  50. if (clk_get_rate(clk_setting->fp_spi_sclk) != (clk_setting->spi_speed * 4)) {
  51. rc = clk_set_rate(clk_setting->fp_spi_sclk, clk_setting->spi_speed * 4);
  52. if (rc < 0)
  53. pr_err("SPI clk set failed: %d\n", rc);
  54. else
  55. pr_debug("Set SPI clock rate: %u(%lu)\n",
  56. clk_setting->spi_speed, clk_get_rate(clk_setting->fp_spi_sclk) / 4);
  57. } else {
  58. pr_debug("Set SPI clock rate: %u(%lu)\n",
  59. clk_setting->spi_speed, clk_get_rate(clk_setting->fp_spi_sclk) / 4);
  60. }
  61. pr_debug("ENABLE_SPI_CLOCK %d\n", clk_setting->spi_speed);
  62. __pm_stay_awake(clk_setting->spi_wake_lock);
  63. clk_setting->enabled_clk = true;
  64. }
  65. #endif
  66. return rc;
  67. }
  68. int spi_clk_disable(struct spi_clk_setting *clk_setting)
  69. {
  70. #ifdef ENABLE_SENSORS_FPRINT_SECURE
  71. if (clk_setting->enabled_clk) {
  72. clk_disable_unprepare(clk_setting->fp_spi_pclk);
  73. clk_disable_unprepare(clk_setting->fp_spi_sclk);
  74. __pm_relax(clk_setting->spi_wake_lock);
  75. clk_setting->enabled_clk = false;
  76. pr_debug("DISABLE_SPI_CLOCK\n");
  77. }
  78. #endif
  79. return 0;
  80. }
  81. int cpu_speedup_enable(struct boosting_config *boosting)
  82. {
  83. int retval = 0;
  84. pr_info("%s\n", __func__);
  85. /* Module build & TEEGris */
  86. #if defined(CONFIG_SENSORS_FINGERPRINT_MODULE)
  87. #if IS_ENABLED(CONFIG_EXYNOS_PM_QOS) || IS_ENABLED(CONFIG_EXYNOS_PM_QOS_MODULE)
  88. exynos_pm_qos_add_request(&fingerprint_boost_qos, PM_QOS_CLUSTER1_FREQ_MIN,
  89. PM_QOS_CLUSTER1_FREQ_MAX_DEFAULT_VALUE);
  90. #endif
  91. /* TEEGris */
  92. #elif defined(CONFIG_TZDEV_BOOST)
  93. tz_boost_enable();
  94. /* Kinibi */
  95. #elif defined(CONFIG_SECURE_OS_BOOSTER_API)
  96. retval = secos_booster_start(MAX_PERFORMANCE);
  97. if (retval)
  98. pr_err("booster start failed. (%d)\n", retval);
  99. #else
  100. pr_info("FP_CPU_SPEEDUP does not supported\n");
  101. #endif
  102. return retval;
  103. }
  104. int cpu_speedup_disable(struct boosting_config *boosting)
  105. {
  106. int retval = 0;
  107. pr_info("%s\n", __func__);
  108. /* Module build & TEEGris */
  109. #if defined(CONFIG_SENSORS_FINGERPRINT_MODULE)
  110. #if IS_ENABLED(CONFIG_EXYNOS_PM_QOS) || IS_ENABLED(CONFIG_EXYNOS_PM_QOS_MODULE)
  111. exynos_pm_qos_remove_request(&fingerprint_boost_qos);
  112. #endif
  113. /* TEEGris */
  114. #elif defined(CONFIG_TZDEV_BOOST)
  115. tz_boost_disable();
  116. /* Kinibi */
  117. #elif defined(CONFIG_SECURE_OS_BOOSTER_API)
  118. retval = secos_booster_stop();
  119. if (retval)
  120. pr_err("booster stop failed. (%d)\n", retval);
  121. #else
  122. pr_info("FP_CPU_SPEEDUP does not supported\n");
  123. #endif
  124. return retval;
  125. }