sde_io_util.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2012, 2017-2020, 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. #ifdef DEBUG
  13. #define DEV_DBG(fmt, args...) pr_err(fmt, ##args)
  14. #else
  15. #define DEV_DBG(fmt, args...) pr_debug(fmt, ##args)
  16. #endif
  17. #define DEV_INFO(fmt, args...) pr_info(fmt, ##args)
  18. #define DEV_WARN(fmt, args...) pr_warn(fmt, ##args)
  19. #define DEV_ERR(fmt, args...) pr_err(fmt, ##args)
  20. struct dss_io_data {
  21. u32 len;
  22. void __iomem *base;
  23. };
  24. void dss_reg_w(struct dss_io_data *io, u32 offset, u32 value, u32 debug);
  25. u32 dss_reg_r(struct dss_io_data *io, u32 offset, u32 debug);
  26. void dss_reg_dump(void __iomem *base, u32 len, const char *prefix, u32 debug);
  27. #define DSS_REG_W_ND(io, offset, val) dss_reg_w(io, offset, val, false)
  28. #define DSS_REG_W(io, offset, val) dss_reg_w(io, offset, val, true)
  29. #define DSS_REG_R_ND(io, offset) dss_reg_r(io, offset, false)
  30. #define DSS_REG_R(io, offset) dss_reg_r(io, offset, true)
  31. enum dss_vreg_type {
  32. DSS_REG_LDO,
  33. DSS_REG_VS,
  34. };
  35. struct dss_vreg {
  36. struct regulator *vreg; /* vreg handle */
  37. char vreg_name[32];
  38. int min_voltage;
  39. int max_voltage;
  40. int enable_load;
  41. int disable_load;
  42. int pre_on_sleep;
  43. int post_on_sleep;
  44. int pre_off_sleep;
  45. int post_off_sleep;
  46. };
  47. struct dss_gpio {
  48. unsigned int gpio;
  49. unsigned int value;
  50. char gpio_name[32];
  51. };
  52. enum dss_clk_type {
  53. DSS_CLK_AHB, /* no set rate. rate controlled through rpm */
  54. DSS_CLK_PCLK,
  55. DSS_CLK_OTHER,
  56. };
  57. struct dss_clk {
  58. struct clk *clk; /* clk handle */
  59. char clk_name[32];
  60. enum dss_clk_type type;
  61. unsigned long rate;
  62. unsigned long max_rate;
  63. };
  64. struct dss_module_power {
  65. unsigned int num_vreg;
  66. struct dss_vreg *vreg_config;
  67. unsigned int num_gpio;
  68. struct dss_gpio *gpio_config;
  69. unsigned int num_clk;
  70. struct dss_clk *clk_config;
  71. };
  72. int msm_dss_ioremap_byname(struct platform_device *pdev,
  73. struct dss_io_data *io_data, const char *name);
  74. void msm_dss_iounmap(struct dss_io_data *io_data);
  75. int msm_dss_enable_gpio(struct dss_gpio *in_gpio, int num_gpio, int enable);
  76. int msm_dss_gpio_enable(struct dss_gpio *in_gpio, int num_gpio, int enable);
  77. int msm_dss_get_vreg(struct device *dev, struct dss_vreg *in_vreg,
  78. int num_vreg, int enable);
  79. int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable);
  80. int msm_dss_get_clk(struct device *dev, struct dss_clk *clk_arry, int num_clk);
  81. void msm_dss_put_clk(struct dss_clk *clk_arry, int num_clk);
  82. int msm_dss_clk_set_rate(struct dss_clk *clk_arry, int num_clk);
  83. int msm_dss_single_clk_set_rate(struct dss_clk *clk);
  84. int msm_dss_enable_clk(struct dss_clk *clk_arry, int num_clk, int enable);
  85. int sde_i2c_byte_read(struct i2c_client *client, uint8_t slave_addr,
  86. uint8_t reg_offset, uint8_t *read_buf);
  87. int sde_i2c_byte_write(struct i2c_client *client, uint8_t slave_addr,
  88. uint8_t reg_offset, uint8_t *value);
  89. #endif /* __SDE_IO_UTIL_H__ */