static int max77686_buck_volt2hex(int buck, int uV)
{
- unsigned int hex = 0;
- unsigned int hex_max = 0;
+ int hex = 0;
+ int hex_max = 0;
switch (buck) {
case 2:
/* hex = (uV - 600000) / 12500; */
hex = (uV - MAX77686_BUCK_UV_LMIN) / MAX77686_BUCK_UV_LSTEP;
hex_max = MAX77686_BUCK234_VOLT_MAX_HEX;
- /**
- * Those use voltage scaller - temporary not implemented
- * so return just 0
- */
- return -ENOSYS;
+ break;
default:
- /* hex = (uV - 750000) / 50000; */
+ /*
+ * hex = (uV - 750000) / 50000. We assume that dynamic voltage
+ * scaling via GPIOs is not enabled and don't support that.
+ * If this is enabled then the driver will need to take that
+ * into account and check different registers depending on
+ * the current setting. See the datasheet for details.
+ */
hex = (uV - MAX77686_BUCK_UV_HMIN) / MAX77686_BUCK_UV_HSTEP;
hex_max = MAX77686_BUCK_VOLT_MAX_HEX;
break;
if (hex >= 0 && hex <= hex_max)
return hex;
- error("Value: %d uV is wrong for BUCK%d", uV, buck);
+ pr_err("Value: %d uV is wrong for BUCK%d", uV, buck);
return -EINVAL;
}
static int max77686_buck_hex2volt(int buck, int hex)
{
unsigned uV = 0;
- unsigned int hex_max = 0;
+ int hex_max = 0;
if (hex < 0)
goto bad_hex;
return uV;
bad_hex:
- error("Value: %#x is wrong for BUCK%d", hex, buck);
+ pr_err("Value: %#x is wrong for BUCK%d", hex, buck);
return -EINVAL;
}
static int max77686_ldo_volt2hex(int ldo, int uV)
{
- unsigned int hex = 0;
+ int hex = 0;
switch (ldo) {
case 1:
if (hex >= 0 && hex <= MAX77686_LDO_VOLT_MAX_HEX)
return hex;
- error("Value: %d uV is wrong for LDO%d", uV, ldo);
+ pr_err("Value: %d uV is wrong for LDO%d", uV, ldo);
return -EINVAL;
}
return uV;
bad_hex:
- error("Value: %#x is wrong for ldo%d", hex, ldo);
+ pr_err("Value: %#x is wrong for ldo%d", hex, ldo);
return -EINVAL;
}
static int max77686_ldo_val(struct udevice *dev, int op, int *uV)
{
- unsigned int ret, hex, adr;
+ unsigned int adr;
unsigned char val;
- int ldo;
+ int hex, ldo, ret;
if (op == PMIC_OP_GET)
*uV = 0;
ldo = dev->driver_data;
if (ldo < 1 || ldo > MAX77686_LDO_NUM) {
- error("Wrong ldo number: %d", ldo);
+ pr_err("Wrong ldo number: %d", ldo);
return -EINVAL;
}
static int max77686_buck_val(struct udevice *dev, int op, int *uV)
{
- unsigned int hex, ret, mask, adr;
+ unsigned int mask, adr;
unsigned char val;
- int buck;
+ int hex, buck, ret;
buck = dev->driver_data;
if (buck < 1 || buck > MAX77686_BUCK_NUM) {
- error("Wrong buck number: %d", buck);
+ pr_err("Wrong buck number: %d", buck);
return -EINVAL;
}
case 2:
case 3:
case 4:
- /* Those use voltage scallers - will support in the future */
mask = MAX77686_BUCK234_VOLT_MASK;
- return -ENOSYS;
+ break;
default:
mask = MAX77686_BUCK_VOLT_MASK;
+ break;
}
ret = pmic_read(dev->parent, adr, &val, 1);
static int max77686_ldo_mode(struct udevice *dev, int op, int *opmode)
{
- unsigned int ret, adr, mode;
+ unsigned int adr, mode;
unsigned char val;
- int ldo;
+ int ldo, ret;
if (op == PMIC_OP_GET)
*opmode = -EINVAL;
ldo = dev->driver_data;
if (ldo < 1 || ldo > MAX77686_LDO_NUM) {
- error("Wrong ldo number: %d", ldo);
+ pr_err("Wrong ldo number: %d", ldo);
return -EINVAL;
}
}
if (mode == 0xff) {
- error("Wrong mode: %d for ldo%d", *opmode, ldo);
+ pr_err("Wrong mode: %d for ldo%d", *opmode, ldo);
return -EINVAL;
}
switch (on_off) {
case OPMODE_OFF:
- *enable = 0;
+ *enable = false;
break;
case OPMODE_ON:
- *enable = 1;
+ *enable = true;
break;
default:
return -EINVAL;
}
} else if (op == PMIC_OP_SET) {
- switch (*enable) {
- case 0:
- on_off = OPMODE_OFF;
- break;
- case 1:
+ if (*enable)
on_off = OPMODE_ON;
- break;
- default:
- return -EINVAL;
- }
+ else
+ on_off = OPMODE_OFF;
ret = max77686_ldo_mode(dev, op, &on_off);
if (ret)
static int max77686_buck_mode(struct udevice *dev, int op, int *opmode)
{
- unsigned int ret, mask, adr, mode, mode_shift;
+ unsigned int mask, adr, mode, mode_shift;
unsigned char val;
- int buck;
+ int buck, ret;
buck = dev->driver_data;
if (buck < 1 || buck > MAX77686_BUCK_NUM) {
- error("Wrong buck number: %d", buck);
+ pr_err("Wrong buck number: %d", buck);
return -EINVAL;
}
}
if (mode == 0xff) {
- error("Wrong mode: %d for buck: %d\n", *opmode, buck);
+ pr_err("Wrong mode: %d for buck: %d\n", *opmode, buck);
return -EINVAL;
}
return -EINVAL;
}
} else if (op == PMIC_OP_SET) {
- switch (*enable) {
- case 0:
- on_off = OPMODE_OFF;
- break;
- case 1:
+ if (*enable)
on_off = OPMODE_ON;
- break;
- default:
- return -EINVAL;
- }
+ else
+ on_off = OPMODE_OFF;
ret = max77686_buck_mode(dev, op, &on_off);
if (ret)
return max77686_ldo_val(dev, PMIC_OP_SET, &uV);
}
-static bool ldo_get_enable(struct udevice *dev)
+static int ldo_get_enable(struct udevice *dev)
{
bool enable = false;
int ret;
return max77686_buck_val(dev, PMIC_OP_SET, &uV);
}
-static bool buck_get_enable(struct udevice *dev)
+static int buck_get_enable(struct udevice *dev)
{
bool enable = false;
int ret;