All of lore.kernel.org
 help / color / mirror / Atom feed
From: "José Expósito" <jose.exposito89@gmail.com>
To: jikos@kernel.org
Cc: benjamin.tissoires@redhat.com, spbnick@gmail.com,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
	stefanberzl@gmail.com, albertofanjul@gmail.com,
	"José Expósito" <jose.exposito89@gmail.com>
Subject: [PATCH for-5.19/uclogic 1/7] HID: uclogic: Move param printing to a function
Date: Sun,  8 May 2022 18:01:40 +0200	[thread overview]
Message-ID: <20220508160146.13004-2-jose.exposito89@gmail.com> (raw)
In-Reply-To: <20220508160146.13004-1-jose.exposito89@gmail.com>

From: Nikolai Kondrashov <spbnick@gmail.com>

Move parameter printing from a format string/argument list to a function
to allow printing the full parameters, which now wouldn't fit into a
single print call.

Signed-off-by: Nikolai Kondrashov <spbnick@gmail.com>
Signed-off-by: José Expósito <jose.exposito89@gmail.com>
---
 drivers/hid/hid-uclogic-core.c   |   4 +-
 drivers/hid/hid-uclogic-params.c |  89 +++++++++++++++++++++++-
 drivers/hid/hid-uclogic-params.h | 116 ++-----------------------------
 3 files changed, 93 insertions(+), 116 deletions(-)

diff --git a/drivers/hid/hid-uclogic-core.c b/drivers/hid/hid-uclogic-core.c
index 8ef3d1830052..8cac5944e63f 100644
--- a/drivers/hid/hid-uclogic-core.c
+++ b/drivers/hid/hid-uclogic-core.c
@@ -209,8 +209,8 @@ static int uclogic_probe(struct hid_device *hdev,
 		goto failure;
 	}
 	params_initialized = true;
-	hid_dbg(hdev, "parameters:\n" UCLOGIC_PARAMS_FMT_STR,
-		UCLOGIC_PARAMS_FMT_ARGS(&drvdata->params));
+	hid_dbg(hdev, "parameters:\n");
+	uclogic_params_hid_dbg(hdev, &drvdata->params);
 	if (drvdata->params.invalid) {
 		hid_info(hdev, "interface is invalid, ignoring\n");
 		rc = -ENODEV;
diff --git a/drivers/hid/hid-uclogic-params.c b/drivers/hid/hid-uclogic-params.c
index 22f9c4f9da8a..1d9168cc7dc0 100644
--- a/drivers/hid/hid-uclogic-params.c
+++ b/drivers/hid/hid-uclogic-params.c
@@ -29,8 +29,8 @@
  * Returns:
  *	The string representing the type, or NULL if the type is unknown.
  */
-const char *uclogic_params_pen_inrange_to_str(
-			enum uclogic_params_pen_inrange inrange)
+static const char *uclogic_params_pen_inrange_to_str(
+				enum uclogic_params_pen_inrange inrange)
 {
 	switch (inrange) {
 	case UCLOGIC_PARAMS_PEN_INRANGE_NORMAL:
@@ -44,6 +44,91 @@ const char *uclogic_params_pen_inrange_to_str(
 	}
 }
 
+/**
+ * Dump tablet interface pen parameters with hid_dbg(), indented with one tab.
+ *
+ * @hdev:	The HID device the pen parameters describe.
+ * @pen:	The pen parameters to dump.
+ */
+static void uclogic_params_pen_hid_dbg(const struct hid_device *hdev,
+					const struct uclogic_params_pen *pen)
+{
+	size_t i;
+
+	hid_dbg(hdev, "\t.usage_invalid = %s\n",
+		(pen->usage_invalid ? "true" : "false"));
+	hid_dbg(hdev, "\t.desc_ptr = %p\n", pen->desc_ptr);
+	hid_dbg(hdev, "\t.desc_size = %u\n", pen->desc_size);
+	hid_dbg(hdev, "\t.id = %u\n", pen->id);
+	hid_dbg(hdev, "\t.subreport_list = {\n");
+	for (i = 0; i < ARRAY_SIZE(pen->subreport_list); i++) {
+		hid_dbg(hdev, "\t\t{0x%02hhx, %hhu}%s\n",
+			pen->subreport_list[i].value,
+			pen->subreport_list[i].id,
+			i < (ARRAY_SIZE(pen->subreport_list) - 1) ? "," : "");
+	}
+	hid_dbg(hdev, "\t}\n");
+	hid_dbg(hdev, "\t.inrange = %s\n",
+		uclogic_params_pen_inrange_to_str(pen->inrange));
+	hid_dbg(hdev, "\t.fragmented_hires = %s\n",
+		(pen->fragmented_hires ? "true" : "false"));
+	hid_dbg(hdev, "\t.tilt_y_flipped = %s\n",
+		(pen->tilt_y_flipped ? "true" : "false"));
+}
+
+/**
+ * Dump tablet interface frame parameters with hid_dbg(), indented with two
+ * tabs.
+ *
+ * @hdev:	The HID device the pen parameters describe.
+ * @frame:	The frame parameters to dump.
+ */
+static void uclogic_params_frame_hid_dbg(
+				const struct hid_device *hdev,
+				const struct uclogic_params_frame *frame)
+{
+	hid_dbg(hdev, "\t\t.desc_ptr = %p\n", frame->desc_ptr);
+	hid_dbg(hdev, "\t\t.desc_size = %u\n", frame->desc_size);
+	hid_dbg(hdev, "\t\t.id = %u\n", frame->id);
+	hid_dbg(hdev, "\t\t.suffix = %s\n", frame->suffix);
+	hid_dbg(hdev, "\t\t.re_lsb = %u\n", frame->re_lsb);
+	hid_dbg(hdev, "\t\t.dev_id_byte = %u\n", frame->dev_id_byte);
+	hid_dbg(hdev, "\t\t.touch_ring_byte = %u\n", frame->touch_ring_byte);
+	hid_dbg(hdev, "\t\t.touch_ring_max = %hhd\n", frame->touch_ring_max);
+	hid_dbg(hdev, "\t\t.touch_ring_flip_at = %hhd\n",
+		frame->touch_ring_flip_at);
+	hid_dbg(hdev, "\t\t.bitmap_dial_byte = %u\n",
+		frame->bitmap_dial_byte);
+}
+
+/**
+ * Dump tablet interface parameters with hid_dbg().
+ *
+ * @hdev:	The HID device the parameters describe.
+ * @params:	The parameters to dump.
+ */
+void uclogic_params_hid_dbg(const struct hid_device *hdev,
+				const struct uclogic_params *params)
+{
+	size_t i;
+
+	hid_dbg(hdev, ".invalid = %s\n",
+		params->invalid ? "true" : "false");
+	hid_dbg(hdev, ".desc_ptr = %p\n", params->desc_ptr);
+	hid_dbg(hdev, ".desc_size = %u\n", params->desc_size);
+	hid_dbg(hdev, ".pen = {\n");
+	uclogic_params_pen_hid_dbg(hdev, &params->pen);
+	hid_dbg(hdev, "\t}\n");
+	hid_dbg(hdev, ".frame_list = {\n");
+	for (i = 0; i < ARRAY_SIZE(params->frame_list); i++) {
+		hid_dbg(hdev, "\t{\n");
+		uclogic_params_frame_hid_dbg(hdev, &params->frame_list[i]);
+		hid_dbg(hdev, "\t}%s\n",
+			i < (ARRAY_SIZE(params->frame_list) - 1) ? "," : "");
+	}
+	hid_dbg(hdev, "}\n");
+}
+
 /**
  * uclogic_params_get_str_desc - retrieve a string descriptor from a HID
  * device interface, putting it into a kmalloc-allocated buffer as is, without
diff --git a/drivers/hid/hid-uclogic-params.h b/drivers/hid/hid-uclogic-params.h
index fb2001018c46..c7573f70d35c 100644
--- a/drivers/hid/hid-uclogic-params.h
+++ b/drivers/hid/hid-uclogic-params.h
@@ -29,11 +29,6 @@ enum uclogic_params_pen_inrange {
 	UCLOGIC_PARAMS_PEN_INRANGE_NONE,
 };
 
-/* Convert a pen in-range reporting type to a string */
-extern const char *uclogic_params_pen_inrange_to_str(
-			enum uclogic_params_pen_inrange inrange);
-
-
 /*
  * Pen report's subreport data.
  */
@@ -213,113 +208,6 @@ struct uclogic_params {
 extern int uclogic_params_init(struct uclogic_params *params,
 				struct hid_device *hdev);
 
-/* Tablet interface parameters *printf format string */
-#define UCLOGIC_PARAMS_FMT_STR \
-	".invalid = %s\n"                   \
-	".desc_ptr = %p\n"                  \
-	".desc_size = %u\n"                 \
-	".pen = {\n"                        \
-	"\t.usage_invalid = %s\n"           \
-	"\t.desc_ptr = %p\n"                \
-	"\t.desc_size = %u\n"               \
-	"\t.id = %u\n"                      \
-	"\t.subreport_list = {\n"           \
-	"\t\t{0x%02hhx, %hhu},\n"           \
-	"\t\t{0x%02hhx, %hhu},\n"           \
-	"\t\t{0x%02hhx, %hhu},\n"           \
-	"\t}\n"                             \
-	"\t.inrange = %s\n"                 \
-	"\t.fragmented_hires = %s\n"        \
-	"\t.tilt_y_flipped = %s\n"          \
-	"}\n"                               \
-	".frame_list = {\n"                 \
-	"\t{\n"                             \
-	"\t\t.desc_ptr = %p\n"              \
-	"\t\t.desc_size = %u\n"             \
-	"\t\t.id = %u\n"                    \
-	"\t\t.suffix = %s\n"                \
-	"\t\t.re_lsb = %u\n"                \
-	"\t\t.dev_id_byte = %u\n"           \
-	"\t\t.touch_ring_byte = %u\n"       \
-	"\t\t.touch_ring_max = %hhd\n"      \
-	"\t\t.touch_ring_flip_at = %hhd\n"  \
-	"\t\t.bitmap_dial_byte = %u\n"      \
-	"\t},\n"                            \
-	"\t{\n"                             \
-	"\t\t.desc_ptr = %p\n"              \
-	"\t\t.desc_size = %u\n"             \
-	"\t\t.id = %u\n"                    \
-	"\t\t.suffix = %s\n"                \
-	"\t\t.re_lsb = %u\n"                \
-	"\t\t.dev_id_byte = %u\n"           \
-	"\t\t.touch_ring_byte = %u\n"       \
-	"\t\t.touch_ring_max = %hhd\n"      \
-	"\t\t.touch_ring_flip_at = %hhd\n"  \
-	"\t\t.bitmap_dial_byte = %u\n"      \
-	"\t},\n"                            \
-	"\t{\n"                             \
-	"\t\t.desc_ptr = %p\n"              \
-	"\t\t.desc_size = %u\n"             \
-	"\t\t.id = %u\n"                    \
-	"\t\t.suffix = %s\n"                \
-	"\t\t.re_lsb = %u\n"                \
-	"\t\t.dev_id_byte = %u\n"           \
-	"\t\t.touch_ring_byte = %u\n"       \
-	"\t\t.touch_ring_max = %hhd\n"      \
-	"\t\t.touch_ring_flip_at = %hhd\n"  \
-	"\t\t.bitmap_dial_byte = %u\n"      \
-	"\t},\n"                            \
-	"}\n"
-
-/* Tablet interface parameters *printf format arguments */
-#define UCLOGIC_PARAMS_FMT_ARGS(_params) \
-	((_params)->invalid ? "true" : "false"),                    \
-	(_params)->desc_ptr,                                        \
-	(_params)->desc_size,                                       \
-	((_params)->pen.usage_invalid ? "true" : "false"),          \
-	(_params)->pen.desc_ptr,                                    \
-	(_params)->pen.desc_size,                                   \
-	(_params)->pen.id,                                          \
-	(_params)->pen.subreport_list[0].value,                     \
-	(_params)->pen.subreport_list[0].id,                        \
-	(_params)->pen.subreport_list[1].value,                     \
-	(_params)->pen.subreport_list[1].id,                        \
-	(_params)->pen.subreport_list[2].value,                     \
-	(_params)->pen.subreport_list[2].id,                        \
-	uclogic_params_pen_inrange_to_str((_params)->pen.inrange),  \
-	((_params)->pen.fragmented_hires ? "true" : "false"),       \
-	((_params)->pen.tilt_y_flipped ? "true" : "false"),         \
-	(_params)->frame_list[0].desc_ptr,                          \
-	(_params)->frame_list[0].desc_size,                         \
-	(_params)->frame_list[0].id,                                \
-	(_params)->frame_list[0].suffix,                            \
-	(_params)->frame_list[0].re_lsb,                            \
-	(_params)->frame_list[0].dev_id_byte,                       \
-	(_params)->frame_list[0].touch_ring_byte,                   \
-	(_params)->frame_list[0].touch_ring_max,                    \
-	(_params)->frame_list[0].touch_ring_flip_at,                \
-	(_params)->frame_list[0].bitmap_dial_byte,                  \
-	(_params)->frame_list[1].desc_ptr,                          \
-	(_params)->frame_list[1].desc_size,                         \
-	(_params)->frame_list[1].id,                                \
-	(_params)->frame_list[1].suffix,                            \
-	(_params)->frame_list[1].re_lsb,                            \
-	(_params)->frame_list[1].dev_id_byte,                       \
-	(_params)->frame_list[1].touch_ring_byte,                   \
-	(_params)->frame_list[1].touch_ring_max,                    \
-	(_params)->frame_list[1].touch_ring_flip_at,                \
-	(_params)->frame_list[1].bitmap_dial_byte,                  \
-	(_params)->frame_list[2].desc_ptr,                          \
-	(_params)->frame_list[2].desc_size,                         \
-	(_params)->frame_list[2].id,                                \
-	(_params)->frame_list[2].suffix,                            \
-	(_params)->frame_list[2].re_lsb,                            \
-	(_params)->frame_list[2].dev_id_byte,                       \
-	(_params)->frame_list[2].touch_ring_byte,                   \
-	(_params)->frame_list[2].touch_ring_max,                    \
-	(_params)->frame_list[2].touch_ring_flip_at,                \
-	(_params)->frame_list[2].bitmap_dial_byte
-
 /* Get a replacement report descriptor for a tablet's interface. */
 extern int uclogic_params_get_desc(const struct uclogic_params *params,
 					__u8 **pdesc,
@@ -328,4 +216,8 @@ extern int uclogic_params_get_desc(const struct uclogic_params *params,
 /* Free resources used by tablet interface's parameters */
 extern void uclogic_params_cleanup(struct uclogic_params *params);
 
+/* Dump tablet interface parameters with hid_dbg() */
+extern void uclogic_params_hid_dbg(const struct hid_device *hdev,
+					const struct uclogic_params *params);
+
 #endif /* _HID_UCLOGIC_PARAMS_H */
-- 
2.25.1


  reply	other threads:[~2022-05-08 16:02 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-08 16:01 [PATCH for-5.19/uclogic 0/7] DIGImend patches, part VI José Expósito
2022-05-08 16:01 ` José Expósito [this message]
2022-05-08 17:16   ` [PATCH for-5.19/uclogic 1/7] HID: uclogic: Move param printing to a function kernel test robot
2022-05-08 17:32     ` José Expósito
2022-05-08 17:32       ` José Expósito
2022-05-08 18:39   ` kernel test robot
2022-05-08 16:01 ` [PATCH for-5.19/uclogic 2/7] HID: uclogic: Return raw parameters from v2 pen init José Expósito
2022-05-08 16:01 ` [PATCH for-5.19/uclogic 3/7] HID: uclogic: Do not focus on touch ring only José Expósito
2022-05-08 16:01 ` [PATCH for-5.19/uclogic 4/7] HID: uclogic: Always shift touch reports to zero José Expósito
2022-05-08 16:01 ` [PATCH for-5.19/uclogic 5/7] HID: uclogic: Differentiate touch ring and touch strip José Expósito
2022-05-08 16:01 ` [PATCH for-5.19/uclogic 6/7] HID: uclogic: Add pen support for XP-PEN Star 06 José Expósito
2022-05-08 16:01 ` [PATCH for-5.19/uclogic 7/7] HID: uclogic: Switch to Digitizer usage for styluses José Expósito
2022-05-11 12:20 ` [PATCH for-5.19/uclogic 0/7] DIGImend patches, part VI Jiri Kosina

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=20220508160146.13004-2-jose.exposito89@gmail.com \
    --to=jose.exposito89@gmail.com \
    --cc=albertofanjul@gmail.com \
    --cc=benjamin.tissoires@redhat.com \
    --cc=jikos@kernel.org \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=spbnick@gmail.com \
    --cc=stefanberzl@gmail.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.