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)
150 a. Write data to the register
151 b. Read data from register and compare to written value
152 c. Return return_code & voltage_read
154 u8 zm_write(u8 reg, u8 data)
158 /* write data to register */
161 /* read register and compare to written value */
164 printf("zm_write : Comparison register data failed\n");
171 /* zm_write_out_voltage
174 int zm_write_voltage(int voltage)
177 uint16_t voltage_read;
180 vid = (voltage - 5000) / ZM_STEP;
182 ret = zm_write(reg, vid);
184 voltage_read = hex_to_1_10mv[ret];
185 debug("voltage set to %dmV\n", voltage_read/10);
191 /* zm_read_out_voltage
194 int zm_read_voltage(void)
202 voltage = hex_to_1_10mv[ret];
203 debug("Voltage read is %dmV\n", voltage/10);
214 /* Disable using Write-Protect register 0x96 */
216 if ((dpm_wrm(DPM_WP, new_wp_value)) < 0) {
217 printf("Disable Write-Protect register failed\n");
228 /* Enable using Write-Protect register 0x96 */
229 if ((dpm_wrm(DPM_WP, orig_wp_value)) < 0) {
230 printf("Enable Write-Protect register failed\n");