blob: 028f3e3f2bdecc2b7f8e37655fe04b94d32f2e13 [file] [log] [blame]
Sachin Bhayareeeb88892018-01-02 16:36:01 +05301/* Copyright (c) 2012, 2017-2018, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef __MDSS_IO_UTIL_H__
14#define __MDSS_IO_UTIL_H__
15
16#include <linux/gpio.h>
17#include <linux/platform_device.h>
18#include <linux/regulator/consumer.h>
19#include <linux/i2c.h>
20#include <linux/types.h>
21
22#ifdef DEBUG
23#define DEV_DBG(fmt, args...) pr_err(fmt, ##args)
24#else
25#define DEV_DBG(fmt, args...) pr_debug(fmt, ##args)
26#endif
27#define DEV_INFO(fmt, args...) pr_info(fmt, ##args)
28#define DEV_WARN(fmt, args...) pr_warn(fmt, ##args)
29#define DEV_ERR(fmt, args...) pr_err(fmt, ##args)
30
31struct dss_io_data {
32 u32 len;
33 void __iomem *base;
34};
35
36void dss_reg_w(struct dss_io_data *io, u32 offset, u32 value, u32 debug);
37u32 dss_reg_r(struct dss_io_data *io, u32 offset, u32 debug);
38void dss_reg_dump(void __iomem *base, u32 len, const char *prefix, u32 debug);
39
40#define DSS_REG_W_ND(io, offset, val) dss_reg_w(io, offset, val, false)
41#define DSS_REG_W(io, offset, val) dss_reg_w(io, offset, val, true)
42#define DSS_REG_R_ND(io, offset) dss_reg_r(io, offset, false)
43#define DSS_REG_R(io, offset) dss_reg_r(io, offset, true)
44
45enum dss_vreg_type {
46 DSS_REG_LDO,
47 DSS_REG_VS,
48};
49
50enum dss_vreg_mode {
51 DSS_REG_MODE_ENABLE,
52 DSS_REG_MODE_DISABLE,
53 DSS_REG_MODE_LP,
54 DSS_REG_MODE_ULP,
55 DSS_REG_MODE_MAX,
56};
57
58struct dss_vreg {
59 struct regulator *vreg; /* vreg handle */
60 char vreg_name[32];
61 int min_voltage;
62 int max_voltage;
63 u32 load[DSS_REG_MODE_MAX];
64 int pre_on_sleep;
65 int post_on_sleep;
66 int pre_off_sleep;
67 int post_off_sleep;
68};
69
70struct dss_gpio {
71 unsigned int gpio;
72 unsigned int value;
73 char gpio_name[32];
74};
75
76enum dss_clk_type {
77 DSS_CLK_AHB, /* no set rate. rate controlled through rpm */
78 DSS_CLK_PCLK,
79 DSS_CLK_OTHER,
80};
81
82struct dss_clk {
83 struct clk *clk; /* clk handle */
84 char clk_name[32];
85 enum dss_clk_type type;
86 unsigned long rate;
87};
88
89struct dss_module_power {
90 unsigned int num_vreg;
91 struct dss_vreg *vreg_config;
92 unsigned int num_gpio;
93 struct dss_gpio *gpio_config;
94 unsigned int num_clk;
95 struct dss_clk *clk_config;
96};
97
98int msm_dss_ioremap_byname(struct platform_device *pdev,
99 struct dss_io_data *io_data, const char *name);
100void msm_dss_iounmap(struct dss_io_data *io_data);
101
102int msm_dss_enable_gpio(struct dss_gpio *in_gpio, int num_gpio, int enable);
103int msm_dss_gpio_enable(struct dss_gpio *in_gpio, int num_gpio, int enable);
104
105int msm_dss_config_vreg(struct device *dev, struct dss_vreg *in_vreg,
106 int num_vreg, int config);
107int msm_dss_enable_vreg(struct dss_vreg *in_vreg, int num_vreg, int enable);
108int msm_dss_config_vreg_opt_mode(struct dss_vreg *in_vreg, int num_vreg,
109 enum dss_vreg_mode mode);
110
111int msm_dss_get_clk(struct device *dev, struct dss_clk *clk_arry, int num_clk);
112void msm_dss_put_clk(struct dss_clk *clk_arry, int num_clk);
113int msm_dss_clk_set_rate(struct dss_clk *clk_arry, int num_clk);
114int msm_dss_enable_clk(struct dss_clk *clk_arry, int num_clk, int enable);
115
116int mdss_i2c_byte_read(struct i2c_client *client, uint8_t slave_addr,
117 uint8_t reg_offset, uint8_t *read_buf);
118int mdss_i2c_byte_write(struct i2c_client *client, uint8_t slave_addr,
119 uint8_t reg_offset, uint8_t *value);
120
121#endif /* __MDSS_IO_UTIL_H__ */