UBUNTU: ODM: mfd: Add support for IO functions of AAEON devices

BugLink: https://bugs.launchpad.net/bugs/1929504

This adds the supports for multiple IO functions of the
AAEON x86 devices and makes use of the WMI interface to
control the these IO devices including:

- GPIO
- LED
- Watchdog
- HWMON

It also adds the mfd child device drivers to support
the above IO functions.

Signed-off-by: Kunyang_Fan <kunyang_fan@asus.com>
Review-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Review-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
Acked-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
This commit is contained in:
Kunyang_Fan
2021-06-16 13:56:58 +08:00
committed by Paolo Pisati
parent 93d1e6cb39
commit 6bb3e8064a
4 changed files with 102 additions and 0 deletions
+12
View File
@@ -190,6 +190,18 @@ M: Linus Walleij <linus.walleij@linaro.org>
F: Documentation/devicetree/bindings/power/supply/*ab8500*
F: drivers/power/supply/*ab8500*
AAEON DEVICE DRIVER WITH WMI INTERFACE
M: Edward Lin<edward1_lin@asus.com>
M: Kunyang Fan <kunyang_fan@asus.com>
M: Frank Hsieh <frank2_hsieh@asus.com>
M: Jacob Wu <jacob_wu@asus.com>
S: Supported
F: drivers/gpio/gpio-aaeon.c
F: drivers/hwmon/hwmon-aaeon.c
F: drivers/leds/leds-aaeon.c
F: drivers/mfd/mfd-aaeon.c
F: drivers/watchdog/wdt_aaeon.c
ABI/API
L: linux-api@vger.kernel.org
F: include/linux/syscalls.h
+12
View File
@@ -2218,6 +2218,18 @@ config MFD_QCOM_PM8008
under it in the device tree. Additional drivers must be enabled in
order to use the functionality of the device.
config MFD_AAEON
tristate "AAEON WMI MFD devices"
depends on ASUS_WMI
depends on UBUNTU_ODM_DRIVERS
help
Say yes here to support mltiple IO devices on Single Board Computers
produced by AAEON.
This driver leverages the ASUS WMI interface to access device
resources.
menu "Multimedia Capabilities Port drivers"
depends on ARCH_SA1100
+1
View File
@@ -279,6 +279,7 @@ obj-$(CONFIG_MFD_INTEL_M10_BMC_PMCI) += intel-m10-bmc-pmci.o
obj-$(CONFIG_MFD_ATC260X) += atc260x-core.o
obj-$(CONFIG_MFD_ATC260X_I2C) += atc260x-i2c.o
obj-$(CONFIG_MFD_AAEON) += mfd-aaeon.o
rsmu-i2c-objs := rsmu_core.o rsmu_i2c.o
rsmu-spi-objs := rsmu_core.o rsmu_spi.o
+77
View File
@@ -0,0 +1,77 @@
// SPDX-License-Identifier: GPL-2.0-or-later
/*
* UP Board main platform driver and FPGA configuration support
*
* Copyright (c) 2021, AAEON Ltd.
*
* Author: Kunyang_Fan <knuyang_fan@aaeon.com.tw>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/acpi.h>
#include <linux/gpio.h>
#include <linux/kernel.h>
#include <linux/mfd/core.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/leds.h>
#include <linux/wmi.h>
#define AAEON_WMI_MGMT_GUID "97845ED0-4E6D-11DE-8A39-0800200C9A66"
struct aaeon_wmi_priv {
const struct mfd_cell *cells;
size_t ncells;
};
static const struct mfd_cell aaeon_mfd_cells[] = {
{ .name = "gpio-aaeon" },
{ .name = "hwmon-aaeon"},
{ .name = "leds-aaeon"},
{ .name = "wdt-aaeon"},
};
static const struct aaeon_wmi_priv aaeon_wmi_priv_data = {
.cells = aaeon_mfd_cells,
.ncells = ARRAY_SIZE(aaeon_mfd_cells),
};
static int aaeon_wmi_probe(struct wmi_device *wdev, const void *context)
{
struct aaeon_wmi_priv *priv;
if (!wmi_has_guid(AAEON_WMI_MGMT_GUID)) {
dev_info(&wdev->dev, "AAEON Management GUID not found\n");
return -ENODEV;
}
priv = (struct aaeon_wmi_priv *)context;
dev_set_drvdata(&wdev->dev, priv);
return devm_mfd_add_devices(&wdev->dev, 0, priv->cells,
priv->ncells, NULL, 0, NULL);
}
static const struct wmi_device_id aaeon_wmi_id_table[] = {
{ AAEON_WMI_MGMT_GUID, (void *)&aaeon_wmi_priv_data },
{}
};
static struct wmi_driver aaeon_wmi_driver = {
.driver = {
.name = "mfd-aaeon",
},
.id_table = aaeon_wmi_id_table,
.probe = aaeon_wmi_probe,
};
module_wmi_driver(aaeon_wmi_driver);
MODULE_DEVICE_TABLE(wmi, aaeon_wmi_id_table);
MODULE_AUTHOR("Kunyang Fan <kunyang_fan@aaeon.com.tw>");
MODULE_DESCRIPTION("AAEON Board WMI driver");
MODULE_LICENSE("GPL v2");