提交 72ebe5a0 编写于 作者: H Hans de Goede 提交者: Rafael J. Wysocki

ACPI / PMIC: xpower: Add support for the GPI1 regulator to the OpRegion handler

Some Bay Trail devices use a GPI1 regulator field (address 0x4c) in
their 0x8d power OpRegion, add support for this.

This fixes AE_BAD_PARAMETER errors getting thrown on these devices and
fixes these errors causing these devices to not suspend.
Signed-off-by: NHans de Goede <hdegoede@redhat.com>
Reviewed-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
上级 41f1830f
......@@ -21,6 +21,11 @@
#include "intel_pmic.h"
#define XPOWER_GPADC_LOW 0x5b
#define XPOWER_GPI1_CTRL 0x92
#define GPI1_LDO_MASK GENMASK(2, 0)
#define GPI1_LDO_ON (3 << 0)
#define GPI1_LDO_OFF (4 << 0)
static struct pmic_table power_table[] = {
{
......@@ -118,6 +123,10 @@ static struct pmic_table power_table[] = {
.reg = 0x10,
.bit = 0x00
}, /* BUC6 */
{
.address = 0x4c,
.reg = 0x92,
}, /* GPI1 */
};
/* TMP0 - TMP5 are the same, all from GPADC */
......@@ -156,7 +165,12 @@ static int intel_xpower_pmic_get_power(struct regmap *regmap, int reg,
if (regmap_read(regmap, reg, &data))
return -EIO;
*value = (data & BIT(bit)) ? 1 : 0;
/* GPIO1 LDO regulator needs special handling */
if (reg == XPOWER_GPI1_CTRL)
*value = ((data & GPI1_LDO_MASK) == GPI1_LDO_ON);
else
*value = (data & BIT(bit)) ? 1 : 0;
return 0;
}
......@@ -165,6 +179,11 @@ static int intel_xpower_pmic_update_power(struct regmap *regmap, int reg,
{
int data;
/* GPIO1 LDO regulator needs special handling */
if (reg == XPOWER_GPI1_CTRL)
return regmap_update_bits(regmap, reg, GPI1_LDO_MASK,
on ? GPI1_LDO_ON : GPI1_LDO_OFF);
if (regmap_read(regmap, reg, &data))
return -EIO;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册