From patchwork Mon Apr 20 21:09:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ping Cheng X-Patchwork-Id: 6244331 X-Patchwork-Delegate: jikos@jikos.cz Return-Path: X-Original-To: patchwork-linux-input@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 907959F313 for ; Mon, 20 Apr 2015 21:10:08 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id A3869203F7 for ; Mon, 20 Apr 2015 21:10:07 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9EB4B203F3 for ; Mon, 20 Apr 2015 21:10:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754304AbbDTVKF (ORCPT ); Mon, 20 Apr 2015 17:10:05 -0400 Received: from mail-pd0-f176.google.com ([209.85.192.176]:34416 "EHLO mail-pd0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753357AbbDTVKE (ORCPT ); Mon, 20 Apr 2015 17:10:04 -0400 Received: by pdbqa5 with SMTP id qa5so219151563pdb.1 for ; Mon, 20 Apr 2015 14:10:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=wrvsEfko/c5BrPEakbrgQg1hU8MscBECOV5n+tnqhHA=; b=pppXdwp6GVb0WpHs3iHC9yhGujAtu5KduRwAj4buhTNgy51aMAv68gzWrafZyb6AzI EwHJNb3HyzLwY1EvIRkxpg4e+c7NOHeWjLhQErxCvZrZmm0lK+jtwMSjgKURoDVDVGMk FeZnRhsG6lhYdxxGBxITkcshisMmXPplFzOgs5oqo8JqwstOydnCk4lKgLf1Gz5iQUjg 1BWRJCPi1W3LHA2RuMUhcnqEdD8cj6vifjfKT/f77EdbF9UUxqK0csHF1jJIv01+dGsr jNeuK15330ZEW66nVZDJjtRuk+7I78BLY74nbsm9Iv5PTWyTFdKa7yDkeIRHFhc44kp6 ZQdw== X-Received: by 10.68.191.101 with SMTP id gx5mr31729437pbc.148.1429564203978; Mon, 20 Apr 2015 14:10:03 -0700 (PDT) Received: from wacom-XPS-8500.wacom.com ([67.51.163.2]) by mx.google.com with ESMTPSA id o4sm15436215pdh.22.2015.04.20.14.10.03 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 20 Apr 2015 14:10:03 -0700 (PDT) From: Ping Cheng X-Google-Original-From: Ping Cheng To: jkosina@suse.cz Cc: linux-input@vger.kernel.org, killertofu@gmail.com, Ping Cheng Subject: [PATCH v2] HID: wacom: retrieve name from HID descriptor for generic devices Date: Mon, 20 Apr 2015 14:09:59 -0700 Message-Id: <1429564199-16873-1-git-send-email-pingc@wacom.com> X-Mailer: git-send-email 1.9.1 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP HID generic devices share the same default name, "Wacom HID". This causes userland programs to show same device names for different devices, which would confuse end users with same device names for different devices too. This patch uses name retrieved from HID descriptor, if a meaningful name is reported. Otherwise, affix its product ID to "Wacom HID". Signed-off-by: Ping Cheng --- v2: updated with Jason's pid affix and extract whitespace suggestions. --- drivers/hid/wacom_sys.c | 53 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 42 insertions(+), 11 deletions(-) diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c index 1b00d8d..a857cd2 100644 --- a/drivers/hid/wacom_sys.c +++ b/drivers/hid/wacom_sys.c @@ -1392,6 +1392,47 @@ static size_t wacom_compute_pktlen(struct hid_device *hdev) return size; } +static void wacom_update_name(struct wacom *wacom) +{ + struct wacom_wac *wacom_wac = &wacom->wacom_wac; + struct wacom_features *features = &wacom_wac->features; + + /* Generic devices name unspecified */ + if ((features->type == HID_GENERIC) && !strcmp("Wacom HID", features->name)) { + if (strstr(wacom->hdev->name, "Wacom") || + strstr(wacom->hdev->name, "wacom") || + strstr(wacom->hdev->name, "WACOM")) { + /* name is in HID descriptor, use it */ + strlcpy(wacom_wac->name, wacom->hdev->name, + sizeof(wacom_wac->name)); + + /* strip out excess whitespaces */ + while (1) { + char *gap = strstr(wacom_wac->name, " "); + if (gap == NULL) + break; + memmove(gap, gap+1, strlen(gap)); + } + } else { + /* no meaningful name retrieved. use product ID */ + snprintf(wacom_wac->name, sizeof(wacom_wac->name), + "%s %x", features->name, wacom->hdev->product); + } + } else { + strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name)); + } + snprintf(wacom_wac->pad_name, sizeof(wacom_wac->pad_name), + "%s Pad", wacom_wac->name); + + /* Append the device type to the name */ + if (features->device_type != BTN_TOOL_FINGER) + strlcat(wacom_wac->name, " Pen", WACOM_NAME_MAX); + else if (features->touch_max) + strlcat(wacom_wac->name, " Finger", WACOM_NAME_MAX); + else + strlcat(wacom_wac->name, " Pad", WACOM_NAME_MAX); +} + static int wacom_probe(struct hid_device *hdev, const struct hid_device_id *id) { @@ -1517,17 +1558,7 @@ static int wacom_probe(struct hid_device *hdev, } wacom_calculate_res(features); - strlcpy(wacom_wac->name, features->name, sizeof(wacom_wac->name)); - snprintf(wacom_wac->pad_name, sizeof(wacom_wac->pad_name), - "%s Pad", features->name); - - /* Append the device type to the name */ - if (features->device_type != BTN_TOOL_FINGER) - strlcat(wacom_wac->name, " Pen", WACOM_NAME_MAX); - else if (features->touch_max) - strlcat(wacom_wac->name, " Finger", WACOM_NAME_MAX); - else - strlcat(wacom_wac->name, " Pad", WACOM_NAME_MAX); + wacom_update_name(wacom); error = wacom_add_shared_data(hdev); if (error)