All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Pearson <markpearson@lenovo.com>
To: <markpearson@lenovo.com>
Cc: <hdegoede@redhat.com>, <mgross@linux.intel.com>,
	<platform-driver-x86@vger.kernel.org>, <divya.bharathi@dell.com>,
	<prasanth.ksr@dell.com>, <mario.limonciello@dell.com>
Subject: [PATCH v2 1/3] platform/x86: firmware_attributes_class: Create helper file for handling firmware-attributes class registration events
Date: Sat, 8 May 2021 21:57:06 -0400	[thread overview]
Message-ID: <20210509015708.112766-1-markpearson@lenovo.com> (raw)
In-Reply-To: <markpearson@lenovo.com>

This will be used by the Dell and Lenovo WMI management drivers to
prevent both drivers being active.

Signed-off-by: Mark Pearson <markpearson@lenovo.com>
---
Changes in v2:
 This is a new file requested as part of the review of the proposed
think_lmi.c driver. Labeling as V2 to keep series consistent (hope
that's correct).

 drivers/platform/x86/Kconfig                  |  6 +++
 drivers/platform/x86/Makefile                 |  1 +
 .../platform/x86/firmware_attributes_class.c  | 51 +++++++++++++++++++
 .../platform/x86/firmware_attributes_class.h  | 13 +++++
 4 files changed, 71 insertions(+)
 create mode 100644 drivers/platform/x86/firmware_attributes_class.c
 create mode 100644 drivers/platform/x86/firmware_attributes_class.h

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 2714f7c38..b0e1e5f65 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -1076,6 +1076,12 @@ config TOUCHSCREEN_DMI
 	  the OS-image for the device. This option supplies the missing info.
 	  Enable this for x86 tablets with Silead or Chipone touchscreens.
 
+config FW_ATTR_CLASS
+	tristate "Firmware attributes class helper module"
+	help
+	  This option should be enabled by any modules using the firmware
+	  attributes class.
+
 config INTEL_IMR
 	bool "Intel Isolated Memory Region support"
 	depends on X86_INTEL_QUARK && IOSF_MBI
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index dcc8cdb95..147573f69 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -115,6 +115,7 @@ obj-$(CONFIG_TOPSTAR_LAPTOP)	+= topstar-laptop.o
 obj-$(CONFIG_I2C_MULTI_INSTANTIATE)	+= i2c-multi-instantiate.o
 obj-$(CONFIG_MLX_PLATFORM)		+= mlx-platform.o
 obj-$(CONFIG_TOUCHSCREEN_DMI)		+= touchscreen_dmi.o
+obj-$(CONFIG_FW_ATTR_CLASS)             += firmware_attributes_class.o
 
 # Intel uncore drivers
 obj-$(CONFIG_INTEL_IPS)				+= intel_ips.o
diff --git a/drivers/platform/x86/firmware_attributes_class.c b/drivers/platform/x86/firmware_attributes_class.c
new file mode 100644
index 000000000..4ed959d6c
--- /dev/null
+++ b/drivers/platform/x86/firmware_attributes_class.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/* Firmware attributes class helper module */
+
+#include <linux/mutex.h>
+#include <linux/device/class.h>
+#include <linux/module.h>
+
+static DEFINE_MUTEX(fw_attr_lock);
+bool fw_attr_inuse;
+
+static struct class firmware_attributes_class = {
+	.name = "firmware-attributes",
+};
+
+int fw_attributes_class_register(struct class **fw_attr_class)
+{
+	int err;
+
+	mutex_lock(&fw_attr_lock);
+	/* We can only have one active FW attribute class */
+	if (fw_attr_inuse) {
+		mutex_unlock(&fw_attr_lock);
+		return -EEXIST;
+	}
+
+	err = class_register(&firmware_attributes_class);
+	if (err) {
+		mutex_unlock(&fw_attr_lock);
+		return err;
+	}
+	fw_attr_inuse = true;
+	*fw_attr_class = &firmware_attributes_class;
+	mutex_unlock(&fw_attr_lock);
+	return 0;
+}
+EXPORT_SYMBOL_GPL(fw_attributes_class_register);
+
+void fw_attributes_class_remove(void)
+{
+	mutex_lock(&fw_attr_lock);
+	fw_attr_inuse = false;
+	class_unregister(&firmware_attributes_class);
+	mutex_unlock(&fw_attr_lock);
+}
+EXPORT_SYMBOL_GPL(fw_attributes_class_remove);
+
+MODULE_AUTHOR("Mark Pearson <markpearson@lenovo.com>");
+MODULE_LICENSE("GPL");
+
+
diff --git a/drivers/platform/x86/firmware_attributes_class.h b/drivers/platform/x86/firmware_attributes_class.h
new file mode 100644
index 000000000..e479a5720
--- /dev/null
+++ b/drivers/platform/x86/firmware_attributes_class.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+
+/* Firmware attributes class helper module */
+
+#ifndef FW_ATTR_CLASS_H
+#define FW_ATTR_CLASS_H
+
+int fw_attributes_class_register(struct class **fw_attr_class);
+void fw_attributes_class_remove(void);
+
+#endif /* FW_ATTR_CLASS_H */
+
+
-- 
2.31.1


             reply	other threads:[~2021-05-09  1:57 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-09  1:57 Mark Pearson [this message]
2021-05-09  1:57 ` [PATCH v2 2/3] platform/x86: dell-wmi-sysman: Use firmware_attributes_class helper Mark Pearson
2021-05-19 16:17   ` Hans de Goede
2021-05-09  1:57 ` [PATCH v2 3/3] platform/x86: think-lmi: Add WMI interface support on Lenovo platforms Mark Pearson
2021-05-19 17:06   ` Hans de Goede
2021-05-20 17:18     ` [External] " Mark Pearson
2021-05-21  8:10       ` Hans de Goede
2021-05-21  9:37         ` Hans de Goede
2021-05-21 15:55         ` Mark Pearson
2021-05-21 16:55           ` Hans de Goede
2021-05-21 19:00             ` Mark Pearson
2021-05-24 10:19             ` Ksr, Prasanth
2021-05-24 15:27               ` Hans de Goede
2021-05-25 14:02                 ` Mark Pearson
2021-05-22 11:04   ` Andy Shevchenko
2021-05-25 15:14     ` [External] " Mark Pearson
2021-05-25 16:18       ` Andy Shevchenko
2021-05-25 16:50         ` Mark Pearson
2021-05-25 16:29       ` Hans de Goede
2021-05-25 16:52         ` Mark Pearson
2021-05-19 16:15 ` [PATCH v2 1/3] platform/x86: firmware_attributes_class: Create helper file for handling firmware-attributes class registration events Hans de Goede
2021-05-19 16:45   ` [External] " Mark Pearson
2021-05-19 16:19 ` Hans de Goede

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210509015708.112766-1-markpearson@lenovo.com \
    --to=markpearson@lenovo.com \
    --cc=divya.bharathi@dell.com \
    --cc=hdegoede@redhat.com \
    --cc=mario.limonciello@dell.com \
    --cc=mgross@linux.intel.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=prasanth.ksr@dell.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.