rtc: s5m-rtc: add real-time clock driver for s5m8767
[deliverable/linux.git] / include / linux / mfd / samsung / core.h
CommitLineData
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
17enum 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 */
39struct 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
57int sec_irq_init(struct sec_pmic_dev *sec_pmic);
58void sec_irq_exit(struct sec_pmic_dev *sec_pmic);
59int sec_irq_resume(struct sec_pmic_dev *sec_pmic);
60
61extern int sec_reg_read(struct sec_pmic_dev *sec_pmic, u8 reg, void *dest);
62extern int sec_bulk_read(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf);
63extern int sec_reg_write(struct sec_pmic_dev *sec_pmic, u8 reg, u8 value);
64extern int sec_bulk_write(struct sec_pmic_dev *sec_pmic, u8 reg, int count, u8 *buf);
65extern int sec_reg_update(struct sec_pmic_dev *sec_pmic, u8 reg, u8 val, u8 mask);
66
67struct 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 */
124struct 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 */
135struct 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
150enum 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 */
This page took 0.133939 seconds and 5 git commands to generate.