xref: /linux-6.15/include/linux/mfd/samsung/core.h (revision ef264cf0)
1 /*
2  * core.h
3  *
4  * copyright (c) 2011 Samsung Electronics Co., Ltd
5  *              http://www.samsung.com
6  *
7  *  This program is free software; you can redistribute  it and/or modify it
8  *  under  the terms of  the GNU General  Public License as published by the
9  *  Free Software Foundation;  either version 2 of the  License, or (at your
10  *  option) any later version.
11  *
12  */
13 
14 #ifndef __LINUX_MFD_SEC_CORE_H
15 #define __LINUX_MFD_SEC_CORE_H
16 
17 enum sec_device_type {
18 	S5M8751X,
19 	S5M8763X,
20 	S5M8767X,
21 	S2MPA01,
22 	S2MPS11X,
23 	S2MPS14X,
24 };
25 
26 /**
27  * struct sec_pmic_dev - s2m/s5m master device for sub-drivers
28  * @dev:		Master device of the chip
29  * @pdata:		Platform data populated with data from DTS
30  *			or board files
31  * @regmap_pmic:	Regmap associated with PMIC's I2C address
32  * @i2c:		I2C client of the main driver
33  * @device_type:	Type of device, matches enum sec_device_type
34  * @irq_base:		Base IRQ number for device, required for IRQs
35  * @irq:		Generic IRQ number for device
36  * @irq_data:		Runtime data structure for IRQ controller
37  * @ono:		Power onoff IRQ number for s5m87xx
38  * @wakeup:		Whether or not this is a wakeup device
39  * @wtsr_smpl:		Whether or not to enable in RTC driver the Watchdog
40  *			Timer Software Reset (registers set to default value
41  *			after PWRHOLD falling) and Sudden Momentary Power Loss
42  *			(PMIC will enter power on sequence after short drop in
43  *			VBATT voltage).
44  */
45 struct sec_pmic_dev {
46 	struct device *dev;
47 	struct sec_platform_data *pdata;
48 	struct regmap *regmap_pmic;
49 	struct i2c_client *i2c;
50 
51 	unsigned long device_type;
52 	int irq_base;
53 	int irq;
54 	struct regmap_irq_chip_data *irq_data;
55 
56 	int ono;
57 	bool wakeup;
58 	bool wtsr_smpl;
59 };
60 
61 int sec_irq_init(struct sec_pmic_dev *sec_pmic);
62 void sec_irq_exit(struct sec_pmic_dev *sec_pmic);
63 int sec_irq_resume(struct sec_pmic_dev *sec_pmic);
64 
65 struct sec_platform_data {
66 	struct sec_regulator_data	*regulators;
67 	struct sec_opmode_data		*opmode;
68 	int				device_type;
69 	int				num_regulators;
70 
71 	int				irq_base;
72 	int				(*cfg_pmic_irq)(void);
73 
74 	int				ono;
75 	bool				wakeup;
76 	bool				buck_voltage_lock;
77 
78 	int				buck_gpios[3];
79 	int				buck_ds[3];
80 	unsigned int			buck2_voltage[8];
81 	bool				buck2_gpiodvs;
82 	unsigned int			buck3_voltage[8];
83 	bool				buck3_gpiodvs;
84 	unsigned int			buck4_voltage[8];
85 	bool				buck4_gpiodvs;
86 
87 	int				buck_set1;
88 	int				buck_set2;
89 	int				buck_set3;
90 	int				buck2_enable;
91 	int				buck3_enable;
92 	int				buck4_enable;
93 	int				buck_default_idx;
94 	int				buck2_default_idx;
95 	int				buck3_default_idx;
96 	int				buck4_default_idx;
97 
98 	int				buck_ramp_delay;
99 
100 	int				buck2_ramp_delay;
101 	int				buck34_ramp_delay;
102 	int				buck5_ramp_delay;
103 	int				buck16_ramp_delay;
104 	int				buck7810_ramp_delay;
105 	int				buck9_ramp_delay;
106 	int				buck24_ramp_delay;
107 	int				buck3_ramp_delay;
108 	int				buck7_ramp_delay;
109 	int				buck8910_ramp_delay;
110 
111 	bool				buck1_ramp_enable;
112 	bool				buck2_ramp_enable;
113 	bool				buck3_ramp_enable;
114 	bool				buck4_ramp_enable;
115 	bool				buck6_ramp_enable;
116 
117 	int				buck2_init;
118 	int				buck3_init;
119 	int				buck4_init;
120 };
121 
122 /**
123  * sec_regulator_data - regulator data
124  * @id: regulator id
125  * @initdata: regulator init data (contraints, supplies, ...)
126  */
127 struct sec_regulator_data {
128 	int				id;
129 	struct regulator_init_data	*initdata;
130 	struct device_node		*reg_node;
131 	int				ext_control_gpio;
132 };
133 
134 /*
135  * sec_opmode_data - regulator operation mode data
136  * @id: regulator id
137  * @mode: regulator operation mode
138  */
139 struct sec_opmode_data {
140 	int id;
141 	unsigned int mode;
142 };
143 
144 /*
145  * samsung regulator operation mode
146  * SEC_OPMODE_OFF	Regulator always OFF
147  * SEC_OPMODE_ON	Regulator always ON
148  * SEC_OPMODE_LOWPOWER  Regulator is on in low-power mode
149  * SEC_OPMODE_SUSPEND   Regulator is changed by PWREN pin
150  *			If PWREN is high, regulator is on
151  *			If PWREN is low, regulator is off
152  */
153 
154 enum sec_opmode {
155 	SEC_OPMODE_OFF,
156 	SEC_OPMODE_ON,
157 	SEC_OPMODE_LOWPOWER,
158 	SEC_OPMODE_SUSPEND,
159 };
160 
161 #endif /*  __LINUX_MFD_SEC_CORE_H */
162