mirror of
https://github.com/torvalds/linux.git
synced 2024-11-11 22:51:42 +00:00
ACPI / AC: Add a blacklist with PMIC ACPI HIDs with a native charger driver
On some systems we have a native PMIC driver which provides Mains monitoring, while the ACPI ac driver is broken on these systems due to bad DSTDs or because we do not support the proprietary and undocumented ACPI opregions these ACPI battery devices rely on (e.g. BMOP opregion). This leads for example to a ADP1 power_supply which reports itself as always online even if no mains are connected. This commit adds a blacklist with PMIC ACPI HIDs for which we've a native charger or extcon driver and makes the ACPI ac driver not register itself when a PMIC on this list is present. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
parent
dccfae6d4f
commit
af3ec837b8
@ -57,12 +57,23 @@ static int acpi_ac_add(struct acpi_device *device);
|
|||||||
static int acpi_ac_remove(struct acpi_device *device);
|
static int acpi_ac_remove(struct acpi_device *device);
|
||||||
static void acpi_ac_notify(struct acpi_device *device, u32 event);
|
static void acpi_ac_notify(struct acpi_device *device, u32 event);
|
||||||
|
|
||||||
|
struct acpi_ac_bl {
|
||||||
|
const char *hid;
|
||||||
|
int hrv;
|
||||||
|
};
|
||||||
|
|
||||||
static const struct acpi_device_id ac_device_ids[] = {
|
static const struct acpi_device_id ac_device_ids[] = {
|
||||||
{"ACPI0003", 0},
|
{"ACPI0003", 0},
|
||||||
{"", 0},
|
{"", 0},
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(acpi, ac_device_ids);
|
MODULE_DEVICE_TABLE(acpi, ac_device_ids);
|
||||||
|
|
||||||
|
/* Lists of PMIC ACPI HIDs with an (often better) native charger driver */
|
||||||
|
static const struct acpi_ac_bl acpi_ac_blacklist[] = {
|
||||||
|
{ "INT33F4", -1 }, /* X-Powers AXP288 PMIC */
|
||||||
|
{ "INT34D3", 3 }, /* Intel Cherrytrail Whiskey Cove PMIC */
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
static int acpi_ac_resume(struct device *dev);
|
static int acpi_ac_resume(struct device *dev);
|
||||||
#endif
|
#endif
|
||||||
@ -424,11 +435,20 @@ static int acpi_ac_remove(struct acpi_device *device)
|
|||||||
|
|
||||||
static int __init acpi_ac_init(void)
|
static int __init acpi_ac_init(void)
|
||||||
{
|
{
|
||||||
|
unsigned int i;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
if (acpi_disabled)
|
if (acpi_disabled)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
for (i = 0; i < ARRAY_SIZE(acpi_ac_blacklist); i++)
|
||||||
|
if (acpi_dev_present(acpi_ac_blacklist[i].hid, "1",
|
||||||
|
acpi_ac_blacklist[i].hrv)) {
|
||||||
|
pr_info(PREFIX "AC: found native %s PMIC, not loading\n",
|
||||||
|
acpi_ac_blacklist[i].hid);
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||||
acpi_ac_dir = acpi_lock_ac_dir();
|
acpi_ac_dir = acpi_lock_ac_dir();
|
||||||
if (!acpi_ac_dir)
|
if (!acpi_ac_dir)
|
||||||
|
Loading…
Reference in New Issue
Block a user