no-OS
All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
lt3074.h
Go to the documentation of this file.
1/*******************************************************************************
2* @file lt3074.h
3* @brief Header file of the LT3074 Driver
4* @authors Cedric Justine Encarnacion (cedricjustine.encarnacion@analog.com)
5********************************************************************************
6* Copyright 2025(c) Analog Devices, Inc.
7*
8* Redistribution and use in source and binary forms, with or without
9* modification, are permitted provided that the following conditions are met:
10*
11* 1. Redistributions of source code must retain the above copyright notice,
12* this list of conditions and the following disclaimer.
13*
14* 2. Redistributions in binary form must reproduce the above copyright notice,
15* this list of conditions and the following disclaimer in the documentation
16* and/or other materials provided with the distribution.
17*
18* 3. Neither the name of Analog Devices, Inc. nor the names of its
19* contributors may be used to endorse or promote products derived from this
20* software without specific prior written permission.
21*
22* THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES, INC. “AS IS” AND ANY EXPRESS OR
23* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
24* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
25* EVENT SHALL ANALOG DEVICES, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
26* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
28* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
31* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32*******************************************************************************/
33#ifndef __LT3074_H__
34#define __LT3074_H__
35
36#include <stdint.h>
37#include <string.h>
38#include "no_os_util.h"
39#include "no_os_i2c.h"
40
41#define LT3074_SEND_BYTE 0 /* Send-only command */
42#define LT3074_BYTE 1 /* Byte */
43#define LT3074_WORD 2 /* Word */
44
45#define LT3074_R0B (LT3074_SEND_BYTE << 8)
46#define LT3074_R1B (LT3074_BYTE << 8)
47#define LT3074_R2B (LT3074_WORD << 8)
48#define LT3074_R6B (6 << 8) /* Block of size 6*/
49
50#define LT3074_SIZE_MSK NO_OS_GENMASK(15,8)
51#define LT3074_CMD(x) ((uint8_t)(x & 0xFF))
52#define LT3074_ADDR_SIZE(x) no_os_field_get(LT3074_SIZE_MSK, x)
53
54/* PMBus registers */
55#define LT3074_PAGE (LT3074_R1B | 0x00)
56#define LT3074_OPERATION (LT3074_R1B | 0x01)
57#define LT3074_ON_OFF_CONFIG (LT3074_R1B | 0x02)
58#define LT3074_CLEAR_FAULTS (LT3074_R0B | 0x03)
59#define LT3074_WRITE_PROTECT (LT3074_R1B | 0x10)
60#define LT3074_CAPABILITY (LT3074_R1B | 0x19)
61#define LT3074_VOUT_MODE (LT3074_R1B | 0x20)
62#define LT3074_VOUT_OV_WARN_LIMIT (LT3074_R2B | 0x42)
63#define LT3074_VOUT_UV_WARN_LIMIT (LT3074_R2B | 0x43)
64#define LT3074_IOUT_OC_FAULT_LIMIT (LT3074_R2B | 0x46)
65#define LT3074_IOUT_OC_FAULT_RESPONSE (LT3074_R1B | 0x47)
66#define LT3074_OT_WARN_LIMIT (LT3074_R2B | 0x51)
67#define LT3074_VIN_OV_WARN_LIMIT (LT3074_R2B | 0x57)
68#define LT3074_VIN_UV_WARN_LIMIT (LT3074_R2B | 0x58)
69#define LT3074_STATUS_BYTE (LT3074_R1B | 0x78)
70#define LT3074_STATUS_WORD (LT3074_R2B | 0x79)
71#define LT3074_STATUS_VOUT (LT3074_R1B | 0x7A)
72#define LT3074_STATUS_IOUT (LT3074_R1B | 0x7B)
73#define LT3074_STATUS_INPUT (LT3074_R1B | 0x7C)
74#define LT3074_STATUS_TEMPERATURE (LT3074_R1B | 0x7D)
75#define LT3074_STATUS_CML (LT3074_R1B | 0x7E)
76#define LT3074_STATUS_MFR_SPECIFIC (LT3074_R1B | 0x80)
77#define LT3074_READ_VIN (LT3074_R2B | 0x88)
78#define LT3074_READ_VOUT (LT3074_R2B | 0x8B)
79#define LT3074_READ_IOUT (LT3074_R2B | 0x8C)
80#define LT3074_READ_TEMPERATURE_1 (LT3074_R2B | 0x8D)
81#define LT3074_REVISION (LT3074_R1B | 0x98)
82#define LT3074_IC_DEVICE_ID (LT3074_R6B | 0xAD)
83#define LT3074_IC_DEVICE_REV (LT3074_R2B | 0xAE)
84
85/* Manufacturer registers */
86#define LT3074_MFR_MARGIN (LT3074_R1B | 0xC4)
87#define LT3074_MFR_READ_VBIAS (LT3074_R2B | 0xC6)
88#define LT3074_MFR_BIAS_OV_WARN_LIMIT (LT3074_R2B | 0xC7)
89#define LT3074_MFR_BIAS_UV_WARN_LIMIT (LT3074_R2B | 0xC8)
90#define LT3074_MFR_IOUT_MIN_WARN_LIMIT (LT3074_R2B | 0xC9)
91#define LT3074_MFR_SPECIAL_ID (LT3074_R2B | 0xE7)
92#define LT3074_MFR_DEFAULT_CONFIG (LT3074_R1B | 0xF5)
93#define LT3074_MFR_RAIL_ADDRESS (LT3074_R1B | 0xFA)
94#define LT3074_MFR_RESET (LT3074_R0B | 0xFD)
95
96/* PMBus-specific parameters */
97#define LT3074_CRC_POLYNOMIAL 0x7
98#define LT3074_MARGIN_HIGH_MSK 0xF0
99#define LT3074_MARGIN_LOW_MSK 0x0F
100#define LT3074_OPERATION_ACCESS_MSK (NO_OS_GENMASK(5,4) | NO_OS_BIT(7))
101#define LT3074_SPECIAL_ID_VALUE 0x1C1D
102
103/* Status types masks */
104#define LT3074_STATUS_BYTE_TYPE_MSK 0x01
105#define LT3074_STATUS_VOUT_TYPE_MSK 0x02
106#define LT3074_STATUS_IOUT_TYPE_MSK 0x04
107#define LT3074_STATUS_INPUT_TYPE_MSK 0x08
108#define LT3074_STATUS_TEMP_TYPE_MSK 0x10
109#define LT3074_STATUS_CML_TYPE_MSK 0x20
110#define LT3074_STATUS_MFR_SPECIFIC_TYPE_MSK 0x40
111#define LT3074_STATUS_WORD_TYPE_MSK 0x80
112#define LT3074_STATUS_ALL_TYPE_MSK 0xFF
113
120
128
140
152
164
174
183
185 uint16_t word;
186 uint8_t byte;
187 uint8_t vout;
188 uint8_t iout;
189 uint8_t input;
190 uint8_t temp;
191 uint8_t cml;
193};
194
195/* Initialize the device structure */
196int lt3074_init(struct lt3074_dev **dev,
198
199/* Free or remove device instance */
200int lt3074_remove(struct lt3074_dev *dev);
201
202/* Send a PMBus command to the device */
203int lt3074_send_byte(struct lt3074_dev *dev, uint32_t cmd);
204
205/* Perform a PMBus read_byte operation */
206int lt3074_read_byte(struct lt3074_dev *dev, uint32_t cmd, uint8_t *data);
207
208/* Perform a PMBus write_byte operation */
209int lt3074_write_byte(struct lt3074_dev *dev, uint32_t cmd, uint8_t value);
210
211/* Perform a PMBus read_word operation */
212int lt3074_read_word(struct lt3074_dev *dev, uint32_t cmd, uint16_t *word);
213
214/* Perform a PMBus write_word operation */
215int lt3074_write_word(struct lt3074_dev *dev, uint32_t cmd, uint16_t word);
216
217/* Perform a PMBus read_word operation then perform conversion*/
218int lt3074_read_word_data(struct lt3074_dev *dev, uint32_t cmd, int *data);
219
220/* Perform conversion then perform a PMBus write_word operation */
221int lt3074_write_word_data(struct lt3074_dev *dev, uint32_t cmd, int data);
222
223/* Read a block of bytes */
224int lt3074_read_block_data(struct lt3074_dev *dev, uint32_t cmd,
225 uint8_t *data, size_t nbytes);
226
227/* Register read */
228int lt3074_reg_read(struct lt3074_dev *dev, uint32_t reg, uint32_t *data);
229
230/* Register write */
231int lt3074_reg_write(struct lt3074_dev *dev, uint32_t reg, uint32_t val);
232
233/* Read specific value type */
234int lt3074_read_value(struct lt3074_dev *dev,
235 enum lt3074_value_type value_type,
236 int *value);
237
238/* Read status */
239int lt3074_read_status(struct lt3074_dev *dev,
240 enum lt3074_status_type status_type,
241 struct lt3074_status *status);
242
243/* Set VOUT margins */
244int lt3074_vout_margin(struct lt3074_dev *dev, enum lt3074_margin margin_high,
245 enum lt3074_margin margin_low);
246
247/* Set fault/warning limit values */
248int lt3074_set_limit(struct lt3074_dev *dev, enum lt3074_limit_type limit,
249 int limit_val);
250
251/* Set operation */
252int lt3074_set_operation(struct lt3074_dev *dev,
253 enum lt3074_operation_type operation);
254
255/* Clear status registers */
256int lt3074_clear_faults(struct lt3074_dev *dev);
257
258/* Turn output ON/OFF */
259int lt3074_set_enable_pin(struct lt3074_dev *dev, bool state);
260
261/* Software reset */
262int lt3074_software_reset(struct lt3074_dev *dev);
263
264#endif /* __LT3074_H__ */
struct ad7616_init_param init_param
Definition ad7616_sdz.c:107
lt3074_value_type
Definition lt3074.h:121
@ LT3074_VIN
Definition lt3074.h:122
@ LT3074_TEMP
Definition lt3074.h:125
@ LT3074_IOUT
Definition lt3074.h:124
@ LT3074_VOUT
Definition lt3074.h:123
@ LT3074_VBIAS
Definition lt3074.h:126
#define LT3074_READ_VOUT
Definition lt3074.h:78
int lt3074_set_operation(struct lt3074_dev *dev, enum lt3074_operation_type operation)
Set operation.
Definition lt3074.c:805
#define LT3074_STATUS_CML_TYPE_MSK
Definition lt3074.h:109
int lt3074_reg_write(struct lt3074_dev *dev, uint32_t reg, uint32_t val)
Generic register write wrapper.
Definition lt3074.c:655
#define LT3074_STATUS_BYTE_TYPE_MSK
Definition lt3074.h:104
int lt3074_clear_faults(struct lt3074_dev *dev)
Clear status registers.
Definition lt3074.c:827
int lt3074_read_status(struct lt3074_dev *dev, enum lt3074_status_type status_type, struct lt3074_status *status)
Read statuses.
Definition lt3074.c:700
#define LT3074_VIN_UV_WARN_LIMIT
Definition lt3074.h:68
lt3074_limit_type
Definition lt3074.h:129
@ LT3074_VOUT_OV_WARN_LIMIT_TYPE
Definition lt3074.h:130
@ LT3074_VBIAS_OV_WARN_LIMIT_TYPE
Definition lt3074.h:136
@ LT3074_IOUT_MIN_WARN_LIMIT_TYPE
Definition lt3074.h:138
@ LT3074_OT_WARN_LIMIT_TYPE
Definition lt3074.h:133
@ LT3074_IOUT_OC_FAULT_LIMIT_TYPE
Definition lt3074.h:132
@ LT3074_VIN_UV_WARN_LIMIT_TYPE
Definition lt3074.h:135
@ LT3074_VOUT_UV_WARN_LIMIT_TYPE
Definition lt3074.h:131
@ LT3074_VBIAS_UV_WARN_LIMIT_TYPE
Definition lt3074.h:137
@ LT3074_VIN_OV_WARN_LIMIT_TYPE
Definition lt3074.h:134
int lt3074_write_word(struct lt3074_dev *dev, uint32_t cmd, uint16_t word)
Perform a raw PMBus write word operation.
Definition lt3074.c:503
#define LT3074_STATUS_MFR_SPECIFIC_TYPE_MSK
Definition lt3074.h:110
#define LT3074_VOUT_OV_WARN_LIMIT
Definition lt3074.h:62
int lt3074_read_value(struct lt3074_dev *dev, enum lt3074_value_type value_type, int *value)
Read a value.
Definition lt3074.c:680
int lt3074_read_block_data(struct lt3074_dev *dev, uint32_t cmd, uint8_t *data, size_t nbytes)
Perform a PMBus read block operation.
Definition lt3074.c:565
int lt3074_set_enable_pin(struct lt3074_dev *dev, bool state)
Enable/Disable the device using the EN pin.
Definition lt3074.c:840
int lt3074_send_byte(struct lt3074_dev *dev, uint32_t cmd)
Send a PMBus command to the device.
Definition lt3074.c:401
#define LT3074_MFR_BIAS_UV_WARN_LIMIT
Definition lt3074.h:89
int lt3074_write_word_data(struct lt3074_dev *dev, uint32_t cmd, int data)
Converts value to register data and do PMBus write word operation.
Definition lt3074.c:544
#define LT3074_VIN_OV_WARN_LIMIT
Definition lt3074.h:67
#define LT3074_MFR_READ_VBIAS
Definition lt3074.h:87
int lt3074_read_byte(struct lt3074_dev *dev, uint32_t cmd, uint8_t *data)
Perform a raw PMBus read byte operation.
Definition lt3074.c:415
int lt3074_read_word(struct lt3074_dev *dev, uint32_t cmd, uint16_t *word)
Perform a raw PMBus read word operation.
Definition lt3074.c:468
int lt3074_read_word_data(struct lt3074_dev *dev, uint32_t cmd, int *data)
Perform a PMBus read word operation and converts to actual value.
Definition lt3074.c:524
#define LT3074_MFR_IOUT_MIN_WARN_LIMIT
Definition lt3074.h:90
int lt3074_software_reset(struct lt3074_dev *dev)
Perform a device software reset.
Definition lt3074.c:851
#define LT3074_MFR_BIAS_OV_WARN_LIMIT
Definition lt3074.h:88
lt3074_status_type
Definition lt3074.h:141
@ LT3074_STATUS_IOUT_TYPE
Definition lt3074.h:144
@ LT3074_STATUS_INPUT_TYPE
Definition lt3074.h:145
@ LT3074_STATUS_VOUT_TYPE
Definition lt3074.h:143
@ LT3074_STATUS_BYTE_TYPE
Definition lt3074.h:142
@ LT3074_STATUS_MFR_SPECIFIC_TYPE
Definition lt3074.h:148
@ LT3074_STATUS_TEMP_TYPE
Definition lt3074.h:146
@ LT3074_STATUS_CML_TYPE
Definition lt3074.h:147
@ LT3074_STATUS_ALL_TYPE
Definition lt3074.h:150
@ LT3074_STATUS_WORD_TYPE
Definition lt3074.h:149
#define LT3074_READ_TEMPERATURE_1
Definition lt3074.h:80
int lt3074_remove(struct lt3074_dev *dev)
Free or remove device instance.
Definition lt3074.c:369
int lt3074_set_limit(struct lt3074_dev *dev, enum lt3074_limit_type limit, int limit_val)
Sets the limit value for a specific fault/warning limits.
Definition lt3074.c:788
lt3074_operation_type
Definition lt3074.h:114
@ LT3074_OPERATION_MARGIN_LOW
Definition lt3074.h:118
@ LT3074_OPERATION_ON
Definition lt3074.h:116
@ LT3074_OPERATION_OFF
Definition lt3074.h:115
@ LT3074_OPERATION_MARGIN_HIGH
Definition lt3074.h:117
int lt3074_write_byte(struct lt3074_dev *dev, uint32_t cmd, uint8_t value)
Perform a raw PMBus write byte operation.
Definition lt3074.c:447
#define LT3074_STATUS_IOUT_TYPE_MSK
Definition lt3074.h:106
#define LT3074_READ_VIN
Definition lt3074.h:77
#define LT3074_READ_IOUT
Definition lt3074.h:79
int lt3074_reg_read(struct lt3074_dev *dev, uint32_t reg, uint32_t *data)
Generic register read wrapper.
Definition lt3074.c:611
#define LT3074_STATUS_INPUT_TYPE_MSK
Definition lt3074.h:107
#define LT3074_STATUS_TEMP_TYPE_MSK
Definition lt3074.h:108
#define LT3074_IOUT_OC_FAULT_LIMIT
Definition lt3074.h:64
#define LT3074_STATUS_VOUT_TYPE_MSK
Definition lt3074.h:105
#define LT3074_OT_WARN_LIMIT
Definition lt3074.h:66
#define LT3074_STATUS_WORD_TYPE_MSK
Definition lt3074.h:111
int lt3074_init(struct lt3074_dev **dev, struct lt3074_init_param *init_param)
Initialize the device structure.
Definition lt3074.c:271
lt3074_margin
Definition lt3074.h:153
@ LT3074_MARGIN_PERCENTAGE_25
Definition lt3074.h:161
@ LT3074_MARGIN_PERCENTAGE_3
Definition lt3074.h:156
@ LT3074_MARGIN_PERCENTAGE_1
Definition lt3074.h:155
@ LT3074_MARGIN_PERCENTAGE_20
Definition lt3074.h:160
@ LT3074_MARGIN_PERCENTAGE_30
Definition lt3074.h:162
@ LT3074_MARGIN_PERCENTAGE_10
Definition lt3074.h:158
@ LT3074_MARGIN_PERCENTAGE_0
Definition lt3074.h:154
@ LT3074_MARGIN_PERCENTAGE_5
Definition lt3074.h:157
@ LT3074_MARGIN_PERCENTAGE_15
Definition lt3074.h:159
#define LT3074_VOUT_UV_WARN_LIMIT
Definition lt3074.h:63
int lt3074_vout_margin(struct lt3074_dev *dev, enum lt3074_margin margin_high, enum lt3074_margin margin_low)
Set output voltage margin.
Definition lt3074.c:769
#define LT3074_STATUS_ALL_TYPE_MSK
Definition lt3074.h:112
Header file of I2C Interface.
Header file of utility functions.
Definition lt3074.h:165
struct no_os_i2c_desc * i2c_desc
Definition lt3074.h:166
bool crc_en
Definition lt3074.h:172
struct no_os_gpio_desc * alert_desc
Definition lt3074.h:169
struct no_os_gpio_desc * en_desc
Definition lt3074.h:168
int lin16_exp
Definition lt3074.h:171
struct no_os_gpio_desc * pg_desc
Definition lt3074.h:167
Definition lt3074.h:175
struct no_os_gpio_init_param * alert_param
Definition lt3074.h:179
struct no_os_gpio_init_param * pg_param
Definition lt3074.h:177
struct no_os_i2c_init_param * i2c_init
Definition lt3074.h:176
struct no_os_gpio_init_param * en_param
Definition lt3074.h:178
bool crc_en
Definition lt3074.h:181
Definition lt3074.h:184
uint8_t input
Definition lt3074.h:189
uint8_t mfr_specific
Definition lt3074.h:192
uint8_t iout
Definition lt3074.h:188
uint8_t byte
Definition lt3074.h:186
uint8_t temp
Definition lt3074.h:190
uint8_t cml
Definition lt3074.h:191
uint16_t word
Definition lt3074.h:185
uint8_t vout
Definition lt3074.h:187
Structure holding the GPIO descriptor.
Definition no_os_gpio.h:84
Structure holding the parameters for GPIO initialization.
Definition no_os_gpio.h:67
Structure holding I2C address descriptor.
Definition no_os_i2c.h:89
Structure holding the parameters for I2C initialization.
Definition no_os_i2c.h:52