sde_io_util.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2012, 2017-2021, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef __SDE_IO_UTIL_H__
  6. #define __SDE_IO_UTIL_H__
  7. #include <linux/gpio.h>
  8. #include <linux/platform_device.h>
  9. #include <linux/regulator/consumer.h>
  10. #include <linux/i2c.h>
  11. #include <linux/types.h>
  12. #include <linux/soc/qcom/msm_mmrm.h>
  13. #ifdef DEBUG
  14. #define DEV_DBG(fmt, args...) pr_err(fmt, ##args)
  15. #else
  16. #define DEV_DBG(fmt, args...) pr_debug(fmt, ##args)
  17. #endif
  18. #define DEV_INFO(fmt, args...) pr_info(fmt, ##args)
  19. #define DEV_WARN(fmt, args...) pr_warn(fmt, ##args)
  20. #define DEV_ERR(fmt, args...) pr_err(fmt, ##args)
  21. struct dss_io_data {
  22. u32 len;
  23. void __iomem *base;
  24. };
  25. void dss_reg_w(struct dss_io_data *io, u32 offset, u32 value, u32 debug);
  26. u32 dss_reg_r(struct dss_io_data *io, u32 offset, u32 debug);
  27. void dss_reg_dump(void __iomem *base, u32 len, const char *prefix, u32 debug);
  28. #define DSS_REG_W_ND(io, offset, val) dss_reg_w(io, offset, val, false)
  29. #define DSS_REG_W(io, offset, val) dss_reg_w(io, offset, val, true)
  30. #define DSS_REG_R_ND(io, offset) dss_reg_r(io, offset, false)
  31. #define DSS_REG_R(io, offset) dss_reg_r(io, offset, true)
  32. enum dss_vreg_type {
  33. DSS_REG_LDO,
  34. DSS_REG_VS,
  35. };
  36. struct dss_vreg {
  37. struct regulator *vreg; /* vreg handle */
  38. char vreg_name[32];
  39. int min_voltage;
  40. int max_voltage;
  41. int enable_load;
  42. int disable_load;
  43. int pre_on_sleep;
  44. int post_on_sleep;
  45. int pre_off_sleep;
  46. int post_off_sleep;
  47. };
  48. struct dss_gpio {
  49. unsigned int gpio;
  50. unsigned int value;
  51. char gpio_name[32];
  52. };
  53. enum dss_clk_type {
  54. DSS_CLK_AHB, /* no set rate. rate controlled through rpm */
  55. DSS_CLK_PCLK,
  56. DSS_CLK_MMRM, /* set rate called through mmrm driver */
  57. DSS_CLK_OTHER,
  58. };
  59. struct dss_clk_mmrm_cb {
  60. void *phandle;
  61. struct dss_clk *clk;
  62. };
  63. struct dss_clk_mmrm {
  64. unsigned int clk_id;
  65. unsigned int flags;
  66. struct mmrm_client *mmrm_client;
  67. struct dss_clk_mmrm_cb *mmrm_cb_data;
  68. unsigned long mmrm_requested_clk;
  69. wait_queue_head_t mmrm_cb_wq;
  70. };
  71. struct dss_clk {
  72. struct clk *clk; /* clk handle */
  73. char clk_name[32];
  74. enum dss_clk_type type;
  75. unsigned long rate;
  76. unsigned long max_rate;
  77. struct dss_clk_mmrm mmrm;
  78. };
  79. struct dss_module_power {
  80. unsigned int num_vreg;
  81. struct dss_vreg *vreg_config;
  82. unsigned int num_gpio;
  83. struct dss_gpio *gpio_config;
  84. unsigned int num_clk;
  85. struct dss_clk *clk_config;
  86. };
  87. int msm_dss_ioremap_byname(struct platform_device *pdev,
  88. struct dss_io_data *io_data, const char *name);
  89. void msm_dss_iounmap(struct dss_io_data *io_data);
  90. int msm_dss_get_io_mem(struct platform_device *pdev,
  91. struct list_head *mem_list);
  92. void msm_dss_clean_io_mem(struct list_head *mem_list);
  93. int msm_dss_get_pmic_io_mem(struct platform_device *pdev,
  94. struct list_head *mem_list);
  95. int msm_dss_get_gpio_io_mem(const int gpio_pin, struct list_head *mem_list);
  96. int msm_dss_get_io_irq(struct platform_device *pdev,
  97. struct list_head *irq_list, u32 label);
  98. void msm_dss_clean_io_irq(struct list_head *irq_list);
  99. int msm_dss_enable_gpio(struct dss_gpio *in_gpio, int num_gpio, int enable);
  100. int msm_dss_gpio_enable(struct dss_gpio *in_gpio, int num_gpio, int enable);
  101. int msm_dss_get_vreg(struct device *dev, struct dss_vreg *in_vreg,
  102. int num_vreg, int enable);
  103. int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable);
  104. int msm_dss_get_clk(struct device *dev, struct dss_clk *clk_arry, int num_clk);
  105. int msm_dss_mmrm_register(struct device *dev, struct dss_module_power *mp,
  106. int (*cb_fnc)(struct mmrm_client_notifier_data *data), void *phandle,
  107. bool *mmrm_enable);
  108. void msm_dss_mmrm_deregister(struct device *dev, struct dss_module_power *mp);
  109. void msm_dss_put_clk(struct dss_clk *clk_arry, int num_clk);
  110. int msm_dss_clk_set_rate(struct dss_clk *clk_arry, int num_clk);
  111. int msm_dss_single_clk_set_rate(struct dss_clk *clk);
  112. int msm_dss_enable_clk(struct dss_clk *clk_arry, int num_clk, int enable);
  113. int sde_i2c_byte_read(struct i2c_client *client, uint8_t slave_addr,
  114. uint8_t reg_offset, uint8_t *read_buf);
  115. int sde_i2c_byte_write(struct i2c_client *client, uint8_t slave_addr,
  116. uint8_t reg_offset, uint8_t *value);
  117. #endif /* __SDE_IO_UTIL_H__ */