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:
committed by
Paolo Pisati
parent
93d1e6cb39
commit
6bb3e8064a
+12
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
Reference in New Issue
Block a user