mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-02-17 22:49:02 +00:00
board/freescale/vid: enables writes to all commands for LTC3882
Enable writes to all commands for LTC3882 Signed-off-by: Biwen Li <biwen.li@nxp.com> Reviewed-by: Priyanka Jain <priyanka.jain@nxp.com>
This commit is contained in:
parent
f3555bd285
commit
026703174a
2 changed files with 58 additions and 3 deletions
|
@ -379,6 +379,7 @@ static int set_voltage_to_LTC(int i2caddress, int vdd)
|
|||
{
|
||||
int ret, vdd_last, vdd_target = vdd;
|
||||
int count = 100, temp = 0;
|
||||
unsigned char value;
|
||||
|
||||
/* Scale up to the LTC resolution is 1/4096V */
|
||||
vdd = (vdd * 4096) / 1000;
|
||||
|
@ -391,16 +392,51 @@ static int set_voltage_to_LTC(int i2caddress, int vdd)
|
|||
|
||||
/* Write the desired voltage code to the regulator */
|
||||
#ifndef CONFIG_DM_I2C
|
||||
/* Check write protect state */
|
||||
ret = i2c_read(I2C_VOL_MONITOR_ADDR,
|
||||
PMBUS_CMD_WRITE_PROTECT, 1,
|
||||
(void *)&value, sizeof(value));
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
if (value != EN_WRITE_ALL_CMD) {
|
||||
value = EN_WRITE_ALL_CMD;
|
||||
ret = i2c_write(I2C_VOL_MONITOR_ADDR,
|
||||
PMBUS_CMD_WRITE_PROTECT, 1,
|
||||
(void *)&value, sizeof(value));
|
||||
if (ret)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
ret = i2c_write(I2C_VOL_MONITOR_ADDR,
|
||||
PMBUS_CMD_PAGE_PLUS_WRITE, 1, (void *)&buff, 5);
|
||||
PMBUS_CMD_PAGE_PLUS_WRITE, 1,
|
||||
(void *)&buff, sizeof(buff));
|
||||
#else
|
||||
struct udevice *dev;
|
||||
|
||||
ret = i2c_get_chip_for_busnum(0, I2C_VOL_MONITOR_ADDR, 1, &dev);
|
||||
if (!ret)
|
||||
if (!ret) {
|
||||
/* Check write protect state */
|
||||
ret = dm_i2c_read(dev,
|
||||
PMBUS_CMD_WRITE_PROTECT,
|
||||
(void *)&value, sizeof(value));
|
||||
if (ret)
|
||||
goto exit;
|
||||
|
||||
if (value != EN_WRITE_ALL_CMD) {
|
||||
value = EN_WRITE_ALL_CMD;
|
||||
ret = dm_i2c_write(dev,
|
||||
PMBUS_CMD_WRITE_PROTECT,
|
||||
(void *)&value, sizeof(value));
|
||||
if (ret)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
ret = dm_i2c_write(dev, PMBUS_CMD_PAGE_PLUS_WRITE,
|
||||
(void *)&buff, 5);
|
||||
(void *)&buff, sizeof(buff));
|
||||
}
|
||||
#endif
|
||||
exit:
|
||||
if (ret) {
|
||||
printf("VID: I2C failed to write to the volatge regulator\n");
|
||||
return -1;
|
||||
|
|
|
@ -18,6 +18,25 @@
|
|||
/* step the IR regulator in 5mV increments */
|
||||
#define IR_VDD_STEP_DOWN 5
|
||||
#define IR_VDD_STEP_UP 5
|
||||
|
||||
/* LTC3882 */
|
||||
#define PMBUS_CMD_WRITE_PROTECT 0x10
|
||||
/*
|
||||
* WRITE_PROTECT command supported values
|
||||
* 0x80: Disable all writes except WRITE_PROTECT, PAGE,
|
||||
* STORE_USER_ALL and MFR_EE_UNLOCK commands.
|
||||
* 0x40: Disable all writes except WRITE_PROTECT, PAGE, STORE_USER_ALL,
|
||||
* MFR_EE_UNLOCK, OPERATION, CLEAR_PEAKS and CLEAR_FAULTS commands.
|
||||
* Individual faults can also be cleared by writing a 1 to the
|
||||
* respective status bit.
|
||||
* 0x20: Disable all writes except WRITE_PROTECT, PAGE, STORE_USER_ ALL,
|
||||
* MFR_EE_UNLOCK, OPERATION, CLEAR_PEAKS, CLEAR_FAULTS, ON_OFF_CONFIG
|
||||
* and VOUT_COMMAND commands. Individual faults can be cleared by
|
||||
* writing a 1 to the respective status bit.
|
||||
* 0x00: Enables write to all commands
|
||||
*/
|
||||
#define EN_WRITE_ALL_CMD (0)
|
||||
|
||||
int adjust_vdd(ulong vdd_override);
|
||||
|
||||
#endif /* __VID_H_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue