2 * Copyright 2013 Freescale Semiconductor, Inc.
4 * SPDX-License-Identifier: GPL-2.0+
7 /* Power-One ZM7300 DPM */
11 #define WRP_OPCODE 0x01
12 #define WRM_OPCODE 0x02
13 #define RRP_OPCODE 0x11
15 #define DPM_SUCCESS 0x01
16 #define DPM_EXEC_FAIL 0x00
18 static const uint16_t hex_to_1_10mv[] = {
83 /* Read Data d from Register r of POL p */
92 i2c_read(I2C_DPM_ADDR, 0, -3, ret, 2);
93 if (ret[1] == DPM_SUCCESS) { /* the DPM returned success as status */
94 debug("RRP_OPCODE returned success data is %x\n", ret[0]);
101 /* Write Data d into DPM register r (RAM) */
102 int dpm_wrm(u8 r, u8 d)
109 i2c_read(I2C_DPM_ADDR, 0, -3, ret, 1);
110 if (ret[0] == DPM_SUCCESS) { /* the DPM returned success as status */
111 debug("WRM_OPCODE returned success data is %x\n", ret[0]);
118 /* Write Data d into Register r of POL(s) a */
119 int dpm_wrp(u8 r, u8 d)
124 /* only POL0 is present */
131 i2c_read(I2C_DPM_ADDR, 0, -7, ret, 1);
132 if (ret[0] == DPM_SUCCESS) { /* the DPM returned success as status */
133 debug("WRP_OPCODE returned success data is %x\n", ret[0]);
140 /* Uses the DPM command RRP */
141 u8 zm_read(uchar reg)
148 a. Write data to the register
149 b. Read data from register and compare to written value
150 c. Return return_code & voltage_read
152 u8 zm_write(u8 reg, u8 data)
156 /* write data to register */
159 /* read register and compare to written value */
162 printf("zm_write : Comparison register data failed\n");
169 /* zm_write_out_voltage
172 int zm_write_voltage(int voltage)
175 uint16_t voltage_read;
178 vid = (voltage - 5000) / ZM_STEP;
180 ret = zm_write(reg, vid);
182 voltage_read = hex_to_1_10mv[ret];
183 debug("voltage set to %dmV\n", voltage_read/10);
189 /* zm_read_out_voltage
192 int zm_read_voltage(void)
200 voltage = hex_to_1_10mv[ret];
201 debug("Voltage read is %dmV\n", voltage/10);
212 /* Disable using Write-Protect register 0x96 */
214 if ((dpm_wrm(DPM_WP, new_wp_value)) < 0) {
215 printf("Disable Write-Protect register failed\n");
226 /* Enable using Write-Protect register 0x96 */
227 if ((dpm_wrm(DPM_WP, orig_wp_value)) < 0) {
228 printf("Enable Write-Protect register failed\n");