1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright 2013 Freescale Semiconductor, Inc.
6 /* Power-One ZM7300 DPM */
10 #define WRP_OPCODE 0x01
11 #define WRM_OPCODE 0x02
12 #define RRP_OPCODE 0x11
14 #define DPM_SUCCESS 0x01
15 #define DPM_EXEC_FAIL 0x00
17 static const uint16_t hex_to_1_10mv[] = {
82 /* Read Data d from Register r of POL p */
91 i2c_read(I2C_DPM_ADDR, 0, -3, ret, 2);
92 if (ret[1] == DPM_SUCCESS) { /* the DPM returned success as status */
93 debug("RRP_OPCODE returned success data is %x\n", ret[0]);
100 /* Write Data d into DPM register r (RAM) */
101 int dpm_wrm(u8 r, u8 d)
108 i2c_read(I2C_DPM_ADDR, 0, -3, ret, 1);
109 if (ret[0] == DPM_SUCCESS) { /* the DPM returned success as status */
110 debug("WRM_OPCODE returned success data is %x\n", ret[0]);
117 /* Write Data d into Register r of POL(s) a */
118 int dpm_wrp(u8 r, u8 d)
123 /* only POL0 is present */
130 i2c_read(I2C_DPM_ADDR, 0, -7, ret, 1);
131 if (ret[0] == DPM_SUCCESS) { /* the DPM returned success as status */
132 debug("WRP_OPCODE returned success data is %x\n", ret[0]);
139 /* Uses the DPM command RRP */
140 u8 zm_read(uchar reg)
147 a. Write data to the register
148 b. Read data from register and compare to written value
149 c. Return return_code & voltage_read
151 u8 zm_write(u8 reg, u8 data)
155 /* write data to register */
158 /* read register and compare to written value */
161 printf("zm_write : Comparison register data failed\n");
168 /* zm_write_out_voltage
171 int zm_write_voltage(int voltage)
174 uint16_t voltage_read;
177 vid = (voltage - 5000) / ZM_STEP;
179 ret = zm_write(reg, vid);
181 voltage_read = hex_to_1_10mv[ret];
182 debug("voltage set to %dmV\n", voltage_read/10);
188 /* zm_read_out_voltage
191 int zm_read_voltage(void)
199 voltage = hex_to_1_10mv[ret];
200 debug("Voltage read is %dmV\n", voltage/10);
211 /* Disable using Write-Protect register 0x96 */
213 if ((dpm_wrm(DPM_WP, new_wp_value)) < 0) {
214 printf("Disable Write-Protect register failed\n");
225 /* Enable using Write-Protect register 0x96 */
226 if ((dpm_wrm(DPM_WP, orig_wp_value)) < 0) {
227 printf("Enable Write-Protect register failed\n");