Commit | Line | Data |
---|---|---|
54227bcf SK |
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 | ||
54227bcf SK |
17 | enum sec_device_type { |
18 | S5M8751X, | |
19 | S5M8763X, | |
20 | S5M8767X, | |
9b6d1343 | 21 | S2MPS11X, |
54227bcf SK |
22 | }; |
23 | ||
24 | /** | |
25 | * struct sec_pmic_dev - s5m87xx master device for sub-drivers | |
26 | * @dev: master device of the chip (can be used to access platform data) | |
26aec009 | 27 | * @pdata: pointer to private data used to pass platform data to child |
54227bcf SK |
28 | * @i2c: i2c client private data for regulator |
29 | * @rtc: i2c client private data for rtc | |
30 | * @iolock: mutex for serializing io access | |
31 | * @irqlock: mutex for buslock | |
32 | * @irq_base: base IRQ number for sec-pmic, required for IRQs | |
33 | * @irq: generic IRQ number for s5m87xx | |
34 | * @ono: power onoff IRQ number for s5m87xx | |
35 | * @irq_masks_cur: currently active value | |
36 | * @irq_masks_cache: cached hardware value | |
37 | * @type: indicate which s5m87xx "variant" is used | |
38 | */ | |
39 | struct sec_pmic_dev { | |
40 | struct device *dev; | |
26aec009 | 41 | struct sec_platform_data *pdata; |
54227bcf SK |
42 | struct regmap *regmap; |
43 | struct i2c_client *i2c; | |
44 | struct i2c_client *rtc; | |
54227bcf SK |
45 | |
46 | int device_type; | |
47 | int irq_base; | |
48 | int irq; | |
6445b84a SK |
49 | struct regmap_irq_chip_data *irq_data; |
50 | ||
54227bcf | 51 | int ono; |
54227bcf SK |
52 | int type; |
53 | bool wakeup; | |
5bccae6e | 54 | bool wtsr_smpl; |
54227bcf SK |
55 | }; |
56 | ||
57 | int sec_irq_init(struct sec_pmic_dev *sec_pmic); | |
58 | void sec_irq_exit(struct sec_pmic_dev *sec_pmic); | |
59 | int sec_irq_resume(struct sec_pmic_dev *sec_pmic); | |
60 | ||
61 | extern int sec_reg_read(struct sec_pmic_dev *sec_pmic, u8 reg, void *dest); | |
62 | extern int sec_bulk_read(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf); | |
63 | extern int sec_reg_write(struct sec_pmic_dev *sec_pmic, u8 reg, u8 value); | |
64 | extern int sec_bulk_write(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf); | |
65 | extern int sec_reg_update(struct sec_pmic_dev *sec_pmic, u8 reg, u8 val, u8 mask); | |
66 | ||
67 | struct sec_platform_data { | |
68 | struct sec_regulator_data *regulators; | |
69 | struct sec_opmode_data *opmode; | |
70 | int device_type; | |
71 | int num_regulators; | |
72 | ||
73 | int irq_base; | |
74 | int (*cfg_pmic_irq)(void); | |
75 | ||
76 | int ono; | |
77 | bool wakeup; | |
78 | bool buck_voltage_lock; | |
79 | ||
80 | int buck_gpios[3]; | |
81 | int buck_ds[3]; | |
26aec009 | 82 | unsigned int buck2_voltage[8]; |
54227bcf | 83 | bool buck2_gpiodvs; |
26aec009 | 84 | unsigned int buck3_voltage[8]; |
54227bcf | 85 | bool buck3_gpiodvs; |
26aec009 | 86 | unsigned int buck4_voltage[8]; |
54227bcf SK |
87 | bool buck4_gpiodvs; |
88 | ||
89 | int buck_set1; | |
90 | int buck_set2; | |
91 | int buck_set3; | |
92 | int buck2_enable; | |
93 | int buck3_enable; | |
94 | int buck4_enable; | |
95 | int buck_default_idx; | |
96 | int buck2_default_idx; | |
97 | int buck3_default_idx; | |
98 | int buck4_default_idx; | |
99 | ||
100 | int buck_ramp_delay; | |
9b6d1343 SK |
101 | |
102 | int buck2_ramp_delay; | |
103 | int buck34_ramp_delay; | |
104 | int buck5_ramp_delay; | |
105 | int buck16_ramp_delay; | |
106 | int buck7810_ramp_delay; | |
107 | int buck9_ramp_delay; | |
108 | ||
54227bcf SK |
109 | bool buck2_ramp_enable; |
110 | bool buck3_ramp_enable; | |
111 | bool buck4_ramp_enable; | |
9b6d1343 | 112 | bool buck6_ramp_enable; |
54227bcf SK |
113 | |
114 | int buck2_init; | |
115 | int buck3_init; | |
116 | int buck4_init; | |
117 | }; | |
118 | ||
119 | /** | |
120 | * sec_regulator_data - regulator data | |
121 | * @id: regulator id | |
122 | * @initdata: regulator init data (contraints, supplies, ...) | |
123 | */ | |
124 | struct sec_regulator_data { | |
125 | int id; | |
126 | struct regulator_init_data *initdata; | |
26aec009 | 127 | struct device_node *reg_node; |
54227bcf SK |
128 | }; |
129 | ||
130 | /* | |
131 | * sec_opmode_data - regulator operation mode data | |
132 | * @id: regulator id | |
133 | * @mode: regulator operation mode | |
134 | */ | |
135 | struct sec_opmode_data { | |
136 | int id; | |
26aec009 | 137 | unsigned int mode; |
54227bcf SK |
138 | }; |
139 | ||
140 | /* | |
141 | * samsung regulator operation mode | |
142 | * SEC_OPMODE_OFF Regulator always OFF | |
143 | * SEC_OPMODE_ON Regulator always ON | |
144 | * SEC_OPMODE_LOWPOWER Regulator is on in low-power mode | |
145 | * SEC_OPMODE_SUSPEND Regulator is changed by PWREN pin | |
146 | * If PWREN is high, regulator is on | |
147 | * If PWREN is low, regulator is off | |
148 | */ | |
149 | ||
150 | enum sec_opmode { | |
151 | SEC_OPMODE_OFF, | |
152 | SEC_OPMODE_ON, | |
153 | SEC_OPMODE_LOWPOWER, | |
154 | SEC_OPMODE_SUSPEND, | |
155 | }; | |
156 | ||
157 | #endif /* __LINUX_MFD_SEC_CORE_H */ |