~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to drivers/hwmon/pmbus.h

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

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 */