1 | /* SPDX-License-Identifier: GPL-2.0+ */ |
2 | /* |
3 | * Copyright (c) 2011 Samsung Electronics Co., Ltd |
4 | * http://www.samsung.com |
5 | */ |
6 | |
7 | #ifndef __LINUX_MFD_SEC_CORE_H |
8 | #define __LINUX_MFD_SEC_CORE_H |
9 | |
10 | /* Macros to represent minimum voltages for LDO/BUCK */ |
11 | #define MIN_3000_MV 3000000 |
12 | #define MIN_2500_MV 2500000 |
13 | #define MIN_2000_MV 2000000 |
14 | #define MIN_1800_MV 1800000 |
15 | #define MIN_1500_MV 1500000 |
16 | #define MIN_1400_MV 1400000 |
17 | #define MIN_1000_MV 1000000 |
18 | |
19 | #define MIN_900_MV 900000 |
20 | #define MIN_850_MV 850000 |
21 | #define MIN_800_MV 800000 |
22 | #define MIN_750_MV 750000 |
23 | #define MIN_650_MV 650000 |
24 | #define MIN_600_MV 600000 |
25 | #define MIN_500_MV 500000 |
26 | |
27 | /* Ramp delay in uV/us */ |
28 | #define RAMP_DELAY_12_MVUS 12000 |
29 | |
30 | /* Macros to represent steps for LDO/BUCK */ |
31 | #define STEP_50_MV 50000 |
32 | #define STEP_25_MV 25000 |
33 | #define STEP_12_5_MV 12500 |
34 | #define STEP_6_25_MV 6250 |
35 | |
36 | struct gpio_desc; |
37 | |
38 | enum sec_device_type { |
39 | S5M8767X, |
40 | S2MPA01, |
41 | S2MPS11X, |
42 | S2MPS13X, |
43 | S2MPS14X, |
44 | S2MPS15X, |
45 | S2MPU02, |
46 | }; |
47 | |
48 | /** |
49 | * struct sec_pmic_dev - s2m/s5m master device for sub-drivers |
50 | * @dev: Master device of the chip |
51 | * @pdata: Platform data populated with data from DTS |
52 | * or board files |
53 | * @regmap_pmic: Regmap associated with PMIC's I2C address |
54 | * @i2c: I2C client of the main driver |
55 | * @device_type: Type of device, matches enum sec_device_type |
56 | * @irq_base: Base IRQ number for device, required for IRQs |
57 | * @irq: Generic IRQ number for device |
58 | * @irq_data: Runtime data structure for IRQ controller |
59 | * @wakeup: Whether or not this is a wakeup device |
60 | */ |
61 | struct sec_pmic_dev { |
62 | struct device *dev; |
63 | struct sec_platform_data *pdata; |
64 | struct regmap *regmap_pmic; |
65 | struct i2c_client *i2c; |
66 | |
67 | unsigned long device_type; |
68 | int irq; |
69 | struct regmap_irq_chip_data *irq_data; |
70 | }; |
71 | |
72 | int sec_irq_init(struct sec_pmic_dev *sec_pmic); |
73 | void sec_irq_exit(struct sec_pmic_dev *sec_pmic); |
74 | int sec_irq_resume(struct sec_pmic_dev *sec_pmic); |
75 | |
76 | struct sec_platform_data { |
77 | struct sec_regulator_data *regulators; |
78 | struct sec_opmode_data *opmode; |
79 | int num_regulators; |
80 | |
81 | int buck_gpios[3]; |
82 | int buck_ds[3]; |
83 | unsigned int buck2_voltage[8]; |
84 | bool buck2_gpiodvs; |
85 | unsigned int buck3_voltage[8]; |
86 | bool buck3_gpiodvs; |
87 | unsigned int buck4_voltage[8]; |
88 | bool buck4_gpiodvs; |
89 | |
90 | int buck_default_idx; |
91 | int buck_ramp_delay; |
92 | |
93 | bool buck2_ramp_enable; |
94 | bool buck3_ramp_enable; |
95 | bool buck4_ramp_enable; |
96 | |
97 | int buck2_init; |
98 | int buck3_init; |
99 | int buck4_init; |
100 | /* Whether or not manually set PWRHOLD to low during shutdown. */ |
101 | bool manual_poweroff; |
102 | /* Disable the WRSTBI (buck voltage warm reset) when probing? */ |
103 | bool disable_wrstbi; |
104 | }; |
105 | |
106 | /** |
107 | * sec_regulator_data - regulator data |
108 | * @id: regulator id |
109 | * @initdata: regulator init data (contraints, supplies, ...) |
110 | */ |
111 | struct sec_regulator_data { |
112 | int id; |
113 | struct regulator_init_data *initdata; |
114 | struct device_node *reg_node; |
115 | struct gpio_desc *ext_control_gpiod; |
116 | }; |
117 | |
118 | /* |
119 | * sec_opmode_data - regulator operation mode data |
120 | * @id: regulator id |
121 | * @mode: regulator operation mode |
122 | */ |
123 | struct sec_opmode_data { |
124 | int id; |
125 | unsigned int mode; |
126 | }; |
127 | |
128 | /* |
129 | * samsung regulator operation mode |
130 | * SEC_OPMODE_OFF Regulator always OFF |
131 | * SEC_OPMODE_ON Regulator always ON |
132 | * SEC_OPMODE_LOWPOWER Regulator is on in low-power mode |
133 | * SEC_OPMODE_SUSPEND Regulator is changed by PWREN pin |
134 | * If PWREN is high, regulator is on |
135 | * If PWREN is low, regulator is off |
136 | */ |
137 | |
138 | enum sec_opmode { |
139 | SEC_OPMODE_OFF, |
140 | SEC_OPMODE_ON, |
141 | SEC_OPMODE_LOWPOWER, |
142 | SEC_OPMODE_SUSPEND, |
143 | }; |
144 | |
145 | #endif /* __LINUX_MFD_SEC_CORE_H */ |
146 | |