Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
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
17enum 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 */
45struct 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
61int sec_irq_init(struct sec_pmic_dev *sec_pmic);
62void sec_irq_exit(struct sec_pmic_dev *sec_pmic);
63int sec_irq_resume(struct sec_pmic_dev *sec_pmic);
64
65struct 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 */
127struct 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 */
139struct 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
154enum 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 */