~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/hwmon/pmbus.h

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * pmbus.h - Common defines and structures for PMBus devices
 
3
 *
 
4
 * Copyright (c) 2010, 2011 Ericsson AB.
 
5
 *
 
6
 * This program is free software; you can redistribute it and/or modify
 
7
 * it under the terms of the GNU General Public License as published by
 
8
 * the Free Software Foundation; either version 2 of the License, or
 
9
 * (at your option) any later version.
 
10
 *
 
11
 * This program is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 
14
 * GNU General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU General Public License
 
17
 * along with this program; if not, write to the Free Software
 
18
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
19
 */
 
20
 
 
21
#ifndef PMBUS_H
 
22
#define PMBUS_H
 
23
 
 
24
/*
 
25
 * Registers
 
26
 */
 
27
#define PMBUS_PAGE                      0x00
 
28
#define PMBUS_OPERATION                 0x01
 
29
#define PMBUS_ON_OFF_CONFIG             0x02
 
30
#define PMBUS_CLEAR_FAULTS              0x03
 
31
#define PMBUS_PHASE                     0x04
 
32
 
 
33
#define PMBUS_CAPABILITY                0x19
 
34
#define PMBUS_QUERY                     0x1A
 
35
 
 
36
#define PMBUS_VOUT_MODE                 0x20
 
37
#define PMBUS_VOUT_COMMAND              0x21
 
38
#define PMBUS_VOUT_TRIM                 0x22
 
39
#define PMBUS_VOUT_CAL_OFFSET           0x23
 
40
#define PMBUS_VOUT_MAX                  0x24
 
41
#define PMBUS_VOUT_MARGIN_HIGH          0x25
 
42
#define PMBUS_VOUT_MARGIN_LOW           0x26
 
43
#define PMBUS_VOUT_TRANSITION_RATE      0x27
 
44
#define PMBUS_VOUT_DROOP                0x28
 
45
#define PMBUS_VOUT_SCALE_LOOP           0x29
 
46
#define PMBUS_VOUT_SCALE_MONITOR        0x2A
 
47
 
 
48
#define PMBUS_COEFFICIENTS              0x30
 
49
#define PMBUS_POUT_MAX                  0x31
 
50
 
 
51
#define PMBUS_FAN_CONFIG_12             0x3A
 
52
#define PMBUS_FAN_COMMAND_1             0x3B
 
53
#define PMBUS_FAN_COMMAND_2             0x3C
 
54
#define PMBUS_FAN_CONFIG_34             0x3D
 
55
#define PMBUS_FAN_COMMAND_3             0x3E
 
56
#define PMBUS_FAN_COMMAND_4             0x3F
 
57
 
 
58
#define PMBUS_VOUT_OV_FAULT_LIMIT       0x40
 
59
#define PMBUS_VOUT_OV_FAULT_RESPONSE    0x41
 
60
#define PMBUS_VOUT_OV_WARN_LIMIT        0x42
 
61
#define PMBUS_VOUT_UV_WARN_LIMIT        0x43
 
62
#define PMBUS_VOUT_UV_FAULT_LIMIT       0x44
 
63
#define PMBUS_VOUT_UV_FAULT_RESPONSE    0x45
 
64
#define PMBUS_IOUT_OC_FAULT_LIMIT       0x46
 
65
#define PMBUS_IOUT_OC_FAULT_RESPONSE    0x47
 
66
#define PMBUS_IOUT_OC_LV_FAULT_LIMIT    0x48
 
67
#define PMBUS_IOUT_OC_LV_FAULT_RESPONSE 0x49
 
68
#define PMBUS_IOUT_OC_WARN_LIMIT        0x4A
 
69
#define PMBUS_IOUT_UC_FAULT_LIMIT       0x4B
 
70
#define PMBUS_IOUT_UC_FAULT_RESPONSE    0x4C
 
71
 
 
72
#define PMBUS_OT_FAULT_LIMIT            0x4F
 
73
#define PMBUS_OT_FAULT_RESPONSE         0x50
 
74
#define PMBUS_OT_WARN_LIMIT             0x51
 
75
#define PMBUS_UT_WARN_LIMIT             0x52
 
76
#define PMBUS_UT_FAULT_LIMIT            0x53
 
77
#define PMBUS_UT_FAULT_RESPONSE         0x54
 
78
#define PMBUS_VIN_OV_FAULT_LIMIT        0x55
 
79
#define PMBUS_VIN_OV_FAULT_RESPONSE     0x56
 
80
#define PMBUS_VIN_OV_WARN_LIMIT         0x57
 
81
#define PMBUS_VIN_UV_WARN_LIMIT         0x58
 
82
#define PMBUS_VIN_UV_FAULT_LIMIT        0x59
 
83
 
 
84
#define PMBUS_IIN_OC_FAULT_LIMIT        0x5B
 
85
#define PMBUS_IIN_OC_WARN_LIMIT         0x5D
 
86
 
 
87
#define PMBUS_POUT_OP_FAULT_LIMIT       0x68
 
88
#define PMBUS_POUT_OP_WARN_LIMIT        0x6A
 
89
#define PMBUS_PIN_OP_WARN_LIMIT         0x6B
 
90
 
 
91
#define PMBUS_STATUS_BYTE               0x78
 
92
#define PMBUS_STATUS_WORD               0x79
 
93
#define PMBUS_STATUS_VOUT               0x7A
 
94
#define PMBUS_STATUS_IOUT               0x7B
 
95
#define PMBUS_STATUS_INPUT              0x7C
 
96
#define PMBUS_STATUS_TEMPERATURE        0x7D
 
97
#define PMBUS_STATUS_CML                0x7E
 
98
#define PMBUS_STATUS_OTHER              0x7F
 
99
#define PMBUS_STATUS_MFR_SPECIFIC       0x80
 
100
#define PMBUS_STATUS_FAN_12             0x81
 
101
#define PMBUS_STATUS_FAN_34             0x82
 
102
 
 
103
#define PMBUS_READ_VIN                  0x88
 
104
#define PMBUS_READ_IIN                  0x89
 
105
#define PMBUS_READ_VCAP                 0x8A
 
106
#define PMBUS_READ_VOUT                 0x8B
 
107
#define PMBUS_READ_IOUT                 0x8C
 
108
#define PMBUS_READ_TEMPERATURE_1        0x8D
 
109
#define PMBUS_READ_TEMPERATURE_2        0x8E
 
110
#define PMBUS_READ_TEMPERATURE_3        0x8F
 
111
#define PMBUS_READ_FAN_SPEED_1          0x90
 
112
#define PMBUS_READ_FAN_SPEED_2          0x91
 
113
#define PMBUS_READ_FAN_SPEED_3          0x92
 
114
#define PMBUS_READ_FAN_SPEED_4          0x93
 
115
#define PMBUS_READ_DUTY_CYCLE           0x94
 
116
#define PMBUS_READ_FREQUENCY            0x95
 
117
#define PMBUS_READ_POUT                 0x96
 
118
#define PMBUS_READ_PIN                  0x97
 
119
 
 
120
#define PMBUS_REVISION                  0x98
 
121
#define PMBUS_MFR_ID                    0x99
 
122
#define PMBUS_MFR_MODEL                 0x9A
 
123
#define PMBUS_MFR_REVISION              0x9B
 
124
#define PMBUS_MFR_LOCATION              0x9C
 
125
#define PMBUS_MFR_DATE                  0x9D
 
126
#define PMBUS_MFR_SERIAL                0x9E
 
127
 
 
128
/*
 
129
 * CAPABILITY
 
130
 */
 
131
#define PB_CAPABILITY_SMBALERT          (1<<4)
 
132
#define PB_CAPABILITY_ERROR_CHECK       (1<<7)
 
133
 
 
134
/*
 
135
 * VOUT_MODE
 
136
 */
 
137
#define PB_VOUT_MODE_MODE_MASK          0xe0
 
138
#define PB_VOUT_MODE_PARAM_MASK         0x1f
 
139
 
 
140
#define PB_VOUT_MODE_LINEAR             0x00
 
141
#define PB_VOUT_MODE_VID                0x20
 
142
#define PB_VOUT_MODE_DIRECT             0x40
 
143
 
 
144
/*
 
145
 * Fan configuration
 
146
 */
 
147
#define PB_FAN_2_PULSE_MASK             ((1 << 0) | (1 << 1))
 
148
#define PB_FAN_2_RPM                    (1 << 2)
 
149
#define PB_FAN_2_INSTALLED              (1 << 3)
 
150
#define PB_FAN_1_PULSE_MASK             ((1 << 4) | (1 << 5))
 
151
#define PB_FAN_1_RPM                    (1 << 6)
 
152
#define PB_FAN_1_INSTALLED              (1 << 7)
 
153
 
 
154
/*
 
155
 * STATUS_BYTE, STATUS_WORD (lower)
 
156
 */
 
157
#define PB_STATUS_NONE_ABOVE            (1<<0)
 
158
#define PB_STATUS_CML                   (1<<1)
 
159
#define PB_STATUS_TEMPERATURE           (1<<2)
 
160
#define PB_STATUS_VIN_UV                (1<<3)
 
161
#define PB_STATUS_IOUT_OC               (1<<4)
 
162
#define PB_STATUS_VOUT_OV               (1<<5)
 
163
#define PB_STATUS_OFF                   (1<<6)
 
164
#define PB_STATUS_BUSY                  (1<<7)
 
165
 
 
166
/*
 
167
 * STATUS_WORD (upper)
 
168
 */
 
169
#define PB_STATUS_UNKNOWN               (1<<8)
 
170
#define PB_STATUS_OTHER                 (1<<9)
 
171
#define PB_STATUS_FANS                  (1<<10)
 
172
#define PB_STATUS_POWER_GOOD_N          (1<<11)
 
173
#define PB_STATUS_WORD_MFR              (1<<12)
 
174
#define PB_STATUS_INPUT                 (1<<13)
 
175
#define PB_STATUS_IOUT_POUT             (1<<14)
 
176
#define PB_STATUS_VOUT                  (1<<15)
 
177
 
 
178
/*
 
179
 * STATUS_IOUT
 
180
 */
 
181
#define PB_POUT_OP_WARNING              (1<<0)
 
182
#define PB_POUT_OP_FAULT                (1<<1)
 
183
#define PB_POWER_LIMITING               (1<<2)
 
184
#define PB_CURRENT_SHARE_FAULT          (1<<3)
 
185
#define PB_IOUT_UC_FAULT                (1<<4)
 
186
#define PB_IOUT_OC_WARNING              (1<<5)
 
187
#define PB_IOUT_OC_LV_FAULT             (1<<6)
 
188
#define PB_IOUT_OC_FAULT                (1<<7)
 
189
 
 
190
/*
 
191
 * STATUS_VOUT, STATUS_INPUT
 
192
 */
 
193
#define PB_VOLTAGE_UV_FAULT             (1<<4)
 
194
#define PB_VOLTAGE_UV_WARNING           (1<<5)
 
195
#define PB_VOLTAGE_OV_WARNING           (1<<6)
 
196
#define PB_VOLTAGE_OV_FAULT             (1<<7)
 
197
 
 
198
/*
 
199
 * STATUS_INPUT
 
200
 */
 
201
#define PB_PIN_OP_WARNING               (1<<0)
 
202
#define PB_IIN_OC_WARNING               (1<<1)
 
203
#define PB_IIN_OC_FAULT                 (1<<2)
 
204
 
 
205
/*
 
206
 * STATUS_TEMPERATURE
 
207
 */
 
208
#define PB_TEMP_UT_FAULT                (1<<4)
 
209
#define PB_TEMP_UT_WARNING              (1<<5)
 
210
#define PB_TEMP_OT_WARNING              (1<<6)
 
211
#define PB_TEMP_OT_FAULT                (1<<7)
 
212
 
 
213
/*
 
214
 * STATUS_FAN
 
215
 */
 
216
#define PB_FAN_AIRFLOW_WARNING          (1<<0)
 
217
#define PB_FAN_AIRFLOW_FAULT            (1<<1)
 
218
#define PB_FAN_FAN2_SPEED_OVERRIDE      (1<<2)
 
219
#define PB_FAN_FAN1_SPEED_OVERRIDE      (1<<3)
 
220
#define PB_FAN_FAN2_WARNING             (1<<4)
 
221
#define PB_FAN_FAN1_WARNING             (1<<5)
 
222
#define PB_FAN_FAN2_FAULT               (1<<6)
 
223
#define PB_FAN_FAN1_FAULT               (1<<7)
 
224
 
 
225
/*
 
226
 * CML_FAULT_STATUS
 
227
 */
 
228
#define PB_CML_FAULT_OTHER_MEM_LOGIC    (1<<0)
 
229
#define PB_CML_FAULT_OTHER_COMM         (1<<1)
 
230
#define PB_CML_FAULT_PROCESSOR          (1<<3)
 
231
#define PB_CML_FAULT_MEMORY             (1<<4)
 
232
#define PB_CML_FAULT_PACKET_ERROR       (1<<5)
 
233
#define PB_CML_FAULT_INVALID_DATA       (1<<6)
 
234
#define PB_CML_FAULT_INVALID_COMMAND    (1<<7)
 
235
 
 
236
enum pmbus_sensor_classes {
 
237
        PSC_VOLTAGE_IN = 0,
 
238
        PSC_VOLTAGE_OUT,
 
239
        PSC_CURRENT_IN,
 
240
        PSC_CURRENT_OUT,
 
241
        PSC_POWER,
 
242
        PSC_TEMPERATURE,
 
243
        PSC_FAN,
 
244
        PSC_NUM_CLASSES         /* Number of power sensor classes */
 
245
};
 
246
 
 
247
#define PMBUS_PAGES     32      /* Per PMBus specification */
 
248
 
 
249
/* Functionality bit mask */
 
250
#define PMBUS_HAVE_VIN          (1 << 0)
 
251
#define PMBUS_HAVE_VCAP         (1 << 1)
 
252
#define PMBUS_HAVE_VOUT         (1 << 2)
 
253
#define PMBUS_HAVE_IIN          (1 << 3)
 
254
#define PMBUS_HAVE_IOUT         (1 << 4)
 
255
#define PMBUS_HAVE_PIN          (1 << 5)
 
256
#define PMBUS_HAVE_POUT         (1 << 6)
 
257
#define PMBUS_HAVE_FAN12        (1 << 7)
 
258
#define PMBUS_HAVE_FAN34        (1 << 8)
 
259
#define PMBUS_HAVE_TEMP         (1 << 9)
 
260
#define PMBUS_HAVE_TEMP2        (1 << 10)
 
261
#define PMBUS_HAVE_TEMP3        (1 << 11)
 
262
#define PMBUS_HAVE_STATUS_VOUT  (1 << 12)
 
263
#define PMBUS_HAVE_STATUS_IOUT  (1 << 13)
 
264
#define PMBUS_HAVE_STATUS_INPUT (1 << 14)
 
265
#define PMBUS_HAVE_STATUS_TEMP  (1 << 15)
 
266
#define PMBUS_HAVE_STATUS_FAN12 (1 << 16)
 
267
#define PMBUS_HAVE_STATUS_FAN34 (1 << 17)
 
268
 
 
269
struct pmbus_driver_info {
 
270
        int pages;              /* Total number of pages */
 
271
        bool direct[PSC_NUM_CLASSES];
 
272
                                /* true if device uses direct data format
 
273
                                   for the given sensor class */
 
274
        /*
 
275
         * Support one set of coefficients for each sensor type
 
276
         * Used for chips providing data in direct mode.
 
277
         */
 
278
        int m[PSC_NUM_CLASSES]; /* mantissa for direct data format */
 
279
        int b[PSC_NUM_CLASSES]; /* offset */
 
280
        int R[PSC_NUM_CLASSES]; /* exponent */
 
281
 
 
282
        u32 func[PMBUS_PAGES];  /* Functionality, per page */
 
283
        /*
 
284
         * The following functions map manufacturing specific register values
 
285
         * to PMBus standard register values. Specify only if mapping is
 
286
         * necessary.
 
287
         */
 
288
        int (*read_byte_data)(struct i2c_client *client, int page, int reg);
 
289
        /*
 
290
         * The identify function determines supported PMBus functionality.
 
291
         * This function is only necessary if a chip driver supports multiple
 
292
         * chips, and the chip functionality is not pre-determined.
 
293
         */
 
294
        int (*identify)(struct i2c_client *client,
 
295
                        struct pmbus_driver_info *info);
 
296
};
 
297
 
 
298
/* Function declarations */
 
299
 
 
300
int pmbus_set_page(struct i2c_client *client, u8 page);
 
301
int pmbus_read_word_data(struct i2c_client *client, u8 page, u8 reg);
 
302
void pmbus_clear_faults(struct i2c_client *client);
 
303
bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg);
 
304
bool pmbus_check_word_register(struct i2c_client *client, int page, int reg);
 
305
int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
 
306
                   struct pmbus_driver_info *info);
 
307
int pmbus_do_remove(struct i2c_client *client);
 
308
const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client
 
309
                                                      *client);
 
310
 
 
311
#endif /* PMBUS_H */