All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiner Kallweit <hkallweit1@gmail.com>
To: Jiri Kosina <jikos@kernel.org>
Cc: linux-input@vger.kernel.org
Subject: [PATCH] hid: core: add managed version of hid_hw_start
Date: Wed, 6 Jan 2016 15:37:36 +0100	[thread overview]
Message-ID: <568D26B0.9080301@gmail.com> (raw)

Most calls to hid_hw_stop are boilerplate code. The function comment
states: "This is usually called from remove function or from probe
when something failed and hid_hw_start was called already."

A managed version of hid_hw_start allows to avoid this boilerplate
code in most cases (similar to the other devm_ functions). 
hid_hw_stop is called automatically before the device is deleted.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
 drivers/hid/hid-core.c | 22 ++++++++++++++++++++++
 include/linux/hid.h    |  3 +++
 2 files changed, 25 insertions(+)

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index e95f23f..61c6f63 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -2752,6 +2752,28 @@ int hid_check_keys_pressed(struct hid_device *hid)
 
 EXPORT_SYMBOL_GPL(hid_check_keys_pressed);
 
+static void __hid_hw_stop(void *data)
+{
+	hid_hw_stop((struct hid_device *)data);
+}
+
+int __must_check devm_hid_hw_start(struct hid_device *hdev,
+				   unsigned int connect_mask)
+{
+	int ret;
+
+	ret = hid_hw_start(hdev, connect_mask);
+	if (ret)
+		return ret;
+
+	ret = devm_add_action(&hdev->dev, __hid_hw_stop, hdev);
+	if (ret)
+		hid_hw_stop(hdev);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(devm_hid_hw_start);
+
 static int __init hid_init(void)
 {
 	int ret;
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 75b66ec..2d85b3e 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -774,6 +774,9 @@ extern bool hid_ignore(struct hid_device *);
 extern int hid_add_device(struct hid_device *);
 extern void hid_destroy_device(struct hid_device *);
 
+extern int __must_check devm_hid_hw_start(struct hid_device *hdev,
+					  unsigned int connect_mask);
+
 extern int __must_check __hid_register_driver(struct hid_driver *,
 		struct module *, const char *mod_name);
 
-- 
2.6.4



             reply	other threads:[~2016-01-06 14:37 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-06 14:37 Heiner Kallweit [this message]
2016-01-08  9:51 ` [PATCH] hid: core: add managed version of hid_hw_start Jiri Kosina
2016-01-10 14:33   ` Heiner Kallweit

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=568D26B0.9080301@gmail.com \
    --to=hkallweit1@gmail.com \
    --cc=jikos@kernel.org \
    --cc=linux-input@vger.kernel.org \
    /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.