From patchwork Tue Sep 10 15:45:31 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798834 Received: from szxga08-in.huawei.com (szxga08-in.huawei.com [45.249.212.255]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3AC114204D; Tue, 10 Sep 2024 15:36:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.255 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982605; cv=none; b=aof50jgCMZYWYrBHAb2/A4QQhc5OhWiBex66AJxvPkTCTZYdmMalX/rxYgK2qRKolMyGJTZCX20LFZ9Sb3UTFzb49oz4H3VfWzyLB4Aq2doqRHFkhA/BpXtnA435zzWQEABTzE8E+ZaV4q3FZu78oz5JJ/UcrKt1toQC7IZWiWI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982605; c=relaxed/simple; bh=JDsJ+OZ3jYZU4cKZmtna7iy8Om1JPFShPB0vE/3mBRg=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=L1ydY4iVdWvDi5brxRagyqJ8YeijuMPgREjaqs0089sukD6K8+4TApC4AfIEBPOjCbhom4EML6aNiChAcIGRk9Tgj/xYWrRosLaHxTZZAiKjgsvDHIqrq0SGhJfTdl3iq6tjYqp1puJCTgNU/BL86qH8zCKzqHnW+IzwO3BfD/0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.255 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.174]) by szxga08-in.huawei.com (SkyGuard) with ESMTP id 4X377p3ScMz13KkC; Tue, 10 Sep 2024 23:35:34 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 0804E140158; Tue, 10 Sep 2024 23:36:40 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:39 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 01/15] HID: core: Use devm_add_action_or_reset helper to manage hid resources Date: Tue, 10 Sep 2024 23:45:31 +0800 Message-ID: <20240910154545.736786-2-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) By adding a custom action to the device, it can bind the hid resource to the hid_device life cycle. The framework automatically close and stop the hid resources before hid_device is released, and the users do not need to pay attention to the timing of hid resource release. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-2-lizetao1@huawei.com/ v1 -> v2: Add function usage constraints in comments v1: https://lore.kernel.org/all/20240904123607.3407364-2-lizetao1@huawei.com/ drivers/hid/hid-core.c | 44 ++++++++++++++++++++++++++++++++++++++++++ include/linux/hid.h | 2 ++ 2 files changed, 46 insertions(+) diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 30de92d0bf0f..132c81639753 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -2416,6 +2416,50 @@ void hid_hw_close(struct hid_device *hdev) } EXPORT_SYMBOL_GPL(hid_hw_close); +static void hid_hw_close_and_stop(void *data) +{ + struct hid_device *hdev = data; + + hid_hw_close(hdev); + hid_hw_stop(hdev); +} + +/** + * devm_hid_hw_start_and_open - manage hid resources through custom action + * + * @hdev: hid device + * @connect_mask: which outputs to connect, see HID_CONNECT_* + * + * Bind the hid resource to the hid_device life cycle and register + * an action to release the hid resource. The users do not need to + * pay attention to the release of hid. + * + * Some usage constraints of this function: hid_device also needs to be + * allocated through the Devres API, such as devm_kzalloc; hid_hw_stop should + * be followed immediately by hid_hw_close in the remove operation. + */ + +int devm_hid_hw_start_and_open(struct hid_device *hdev, unsigned int connect_mask) +{ + int ret; + + ret = hid_hw_start(hdev, connect_mask); + if (ret) { + hid_err(hdev, "hw start failed with %d\n", ret); + return ret; + } + + ret = hid_hw_open(hdev); + if (ret) { + hid_err(hdev, "hw open failed with %d\n", ret); + hid_hw_stop(hdev); + return ret; + } + + return devm_add_action_or_reset(&hdev->dev, hid_hw_close_and_stop, hdev); +} +EXPORT_SYMBOL_GPL(devm_hid_hw_start_and_open); + /** * hid_hw_request - send report request to device * diff --git a/include/linux/hid.h b/include/linux/hid.h index 121d5b8bc867..0ce217aa5f62 100644 --- a/include/linux/hid.h +++ b/include/linux/hid.h @@ -1125,6 +1125,8 @@ int __must_check hid_hw_start(struct hid_device *hdev, void hid_hw_stop(struct hid_device *hdev); int __must_check hid_hw_open(struct hid_device *hdev); void hid_hw_close(struct hid_device *hdev); +int __must_check devm_hid_hw_start_and_open(struct hid_device *hdev, + unsigned int connect_mask); void hid_hw_request(struct hid_device *hdev, struct hid_report *report, enum hid_class_request reqtype); int __hid_hw_raw_request(struct hid_device *hdev, From patchwork Tue Sep 10 15:45:32 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798835 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30FEE193081; Tue, 10 Sep 2024 15:36:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982605; cv=none; b=MdRfVzfgxM9QtspEf3YYVNaGMXEWvwL0l6/voI4EOM4BLKgv+Od1Q2EcNypuhcllV98kkRrLvu1StJmDXhSRkZdRMmacIcjsLaHkMLnqfv9rzhEwToQMgKRd/5AKvE3d27cFhlMX23nruXbG6+HVqzz/UxjsR66E09Z/vLqjmQY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982605; c=relaxed/simple; bh=BpxgEr0zyi4zGYHNCoSUiqjIKuCesB7lSW2wi3WskVU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hD5QIiN2HmDNavMdKK98qY1vJVci2ApGUCstlUhJSxX0EVgGmc/hY/MQ8esffSn6Uf0eU/fWKSEpY62+jm2qL97ygETPoCyJixCV8JZjqCHa0uGqYHSexnKnktrewOziy2CKlmBvb7zZ1YK/QD0SIhIgff0fJ1FCofB5GJmdp14= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.162.112]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4X378X4BDsz1j8KR; Tue, 10 Sep 2024 23:36:12 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id ADF4D1401F3; Tue, 10 Sep 2024 23:36:40 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:39 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 02/15] HID: cp2112: Use devm_hid_hw_start_and_open in cp2112_probe() Date: Tue, 10 Sep 2024 23:45:32 +0800 Message-ID: <20240910154545.736786-3-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the cp2112 module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the err_hid_close and err_hid_stop lables. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-3-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-3-lizetao1@huawei.com/ drivers/hid/hid-cp2112.c | 26 +++----------------------- 1 file changed, 3 insertions(+), 23 deletions(-) diff --git a/drivers/hid/hid-cp2112.c b/drivers/hid/hid-cp2112.c index 20a0d1315d90..6d65c65f1b83 100644 --- a/drivers/hid/hid-cp2112.c +++ b/drivers/hid/hid-cp2112.c @@ -1215,22 +1215,14 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) return ret; } - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "hw start failed\n"); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "hw open failed\n"); - goto err_hid_stop; - } ret = hid_hw_power(hdev, PM_HINT_FULLON); if (ret < 0) { hid_err(hdev, "power management error: %d\n", ret); - goto err_hid_close; + return ret; } ret = cp2112_hid_get(hdev, CP2112_GET_VERSION_INFO, buf, sizeof(buf), @@ -1334,10 +1326,6 @@ static int cp2112_probe(struct hid_device *hdev, const struct hid_device_id *id) i2c_del_adapter(&dev->adap); err_power_normal: hid_hw_power(hdev, PM_HINT_NORMAL); -err_hid_close: - hid_hw_close(hdev); -err_hid_stop: - hid_hw_stop(hdev); return ret; } @@ -1354,14 +1342,6 @@ static void cp2112_remove(struct hid_device *hdev) } gpiochip_remove(&dev->gc); - /* i2c_del_adapter has finished removing all i2c devices from our - * adapter. Well behaved devices should no longer call our cp2112_xfer - * and should have waited for any pending calls to finish. It has also - * waited for device_unregister(&adap->dev) to complete. Therefore we - * can safely free our struct cp2112_device. - */ - hid_hw_close(hdev); - hid_hw_stop(hdev); } static int cp2112_raw_event(struct hid_device *hdev, struct hid_report *report, From patchwork Tue Sep 10 15:45:33 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798836 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 326AA198E65; Tue, 10 Sep 2024 15:36:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982606; cv=none; b=Lwvg83kALbQznpG/A4FX71WwIEtqR0VmVrO5rc6uF6NFCut5bZzbhDBsDYjYcoGhEYmtbNKfP4HIvcgA+ktDKFnd1HeODlU54QVdMoL8tQED2vpCuHHCZjMQEWTt8pdhjU/eX3n+Uk0mZXMbd4tNfw+MLNiQx21KLEiBZDBhgQg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982606; c=relaxed/simple; bh=82CoUIteJAh97jfHHke1JjzahJLKXLBNntKOxQM8+nA=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=ZDzazYKyAKEQH3tPoSgJD/9tCZpFpNo7do68MOde3M9ZvtSyZxwweuldhYRbWb3VPMbjEv87qIZuOh49yKz1DmEqa60UJ70Z+g2sRjeEJg794EPOwT/VgS7wuWwOIpot5qMuihJQ0RDElHVjjzqON2AreBQxAj52U02jA4vQUL4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.88.163]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4X378X6nwXz2DbwJ; Tue, 10 Sep 2024 23:36:12 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 40A5C180042; Tue, 10 Sep 2024 23:36:41 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:40 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 03/15] HID: ft260: Use devm_hid_hw_start_and_open in ft260_probe() Date: Tue, 10 Sep 2024 23:45:33 +0800 Message-ID: <20240910154545.736786-4-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the ft260 module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the err_hid_close, err_hid_stop and err_i2c_free lables, and directly return the error code when an error occurs. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-4-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-4-lizetao1@huawei.com/ drivers/hid/hid-ft260.c | 32 +++++++------------------------- 1 file changed, 7 insertions(+), 25 deletions(-) diff --git a/drivers/hid/hid-ft260.c b/drivers/hid/hid-ft260.c index 333341e80b0e..272165ebf46c 100644 --- a/drivers/hid/hid-ft260.c +++ b/drivers/hid/hid-ft260.c @@ -976,23 +976,15 @@ static int ft260_probe(struct hid_device *hdev, const struct hid_device_id *id) return ret; } - ret = hid_hw_start(hdev, 0); - if (ret) { - hid_err(hdev, "failed to start HID HW\n"); + ret = devm_hid_hw_start_and_open(hdev, 0); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "failed to open HID HW\n"); - goto err_hid_stop; - } ret = ft260_hid_feature_report_get(hdev, FT260_CHIP_VERSION, (u8 *)&version, sizeof(version)); if (ret < 0) { hid_err(hdev, "failed to retrieve chip version\n"); - goto err_hid_close; + return ret; } hid_info(hdev, "chip code: %02x%02x %02x%02x\n", @@ -1001,7 +993,7 @@ static int ft260_probe(struct hid_device *hdev, const struct hid_device_id *id) ret = ft260_is_interface_enabled(hdev); if (ret <= 0) - goto err_hid_close; + return ret; hid_info(hdev, "USB HID v%x.%02x Device [%s] on %s\n", hdev->version >> 8, hdev->version & 0xff, hdev->name, @@ -1028,24 +1020,17 @@ static int ft260_probe(struct hid_device *hdev, const struct hid_device_id *id) ret = i2c_add_adapter(&dev->adap); if (ret) { hid_err(hdev, "failed to add i2c adapter\n"); - goto err_hid_close; + return ret; } ret = sysfs_create_group(&hdev->dev.kobj, &ft260_attr_group); if (ret < 0) { hid_err(hdev, "failed to create sysfs attrs\n"); - goto err_i2c_free; + i2c_del_adapter(&dev->adap); + return ret; } return 0; - -err_i2c_free: - i2c_del_adapter(&dev->adap); -err_hid_close: - hid_hw_close(hdev); -err_hid_stop: - hid_hw_stop(hdev); - return ret; } static void ft260_remove(struct hid_device *hdev) @@ -1057,9 +1042,6 @@ static void ft260_remove(struct hid_device *hdev) sysfs_remove_group(&hdev->dev.kobj, &ft260_attr_group); i2c_del_adapter(&dev->adap); - - hid_hw_close(hdev); - hid_hw_stop(hdev); } static int ft260_raw_event(struct hid_device *hdev, struct hid_report *report, From patchwork Tue Sep 10 15:45:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798848 Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C03BB199FDB; Tue, 10 Sep 2024 15:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982626; cv=none; b=a0u7zCJS0EJv1Wret5tbouFmExFFI5wJqsEWMFI3xOTR8FLEK5ma9ipXFMOfJ5860O5Qy4WLPKkJB/+i4cAYWP+WhswiLy0Nnm/BtcZ3+dK08GBZ1aNGfep/862WflbURNoEkByGuNjhj9kj2/2Me/VtTrfDs84PlpH5RoNXyQ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982626; c=relaxed/simple; bh=ini3owQEdr1AG+MD9QCkp98/2njfkgaf0iJhkpStzEY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=m/Ywv87R83u9463JAXWkUq+gyCbf+UVWOKvnHV2qXi+6LU6SYYsvhjghG2l42rxAIbJnKFh36R8iW5zNvmAspN62YTwWlDhuqgf2vsMTe+N65YyD0kObCD+rbjUCRAwCOKekg5Bm3MwYFxJyzR1HC+25BEYLIqe3nhUbGL7GxfY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4X379M2TlVz1xx9t; Tue, 10 Sep 2024 23:36:55 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id B3E581A0190; Tue, 10 Sep 2024 23:36:56 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:41 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 04/15] HID: mcp2200: Use devm_hid_hw_start_and_open in mcp2200_probe() Date: Tue, 10 Sep 2024 23:45:34 +0800 Message-ID: <20240910154545.736786-5-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the mcp2200 module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. So there is no need to close and stop hid when an error occurs. At the same time, since there is no need to do any operations in mcp2200_remove() now, so delete .remote operation. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-5-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-5-lizetao1@huawei.com/ drivers/hid/hid-mcp2200.c | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/drivers/hid/hid-mcp2200.c b/drivers/hid/hid-mcp2200.c index bf57f7f6caa0..56d72fc5623d 100644 --- a/drivers/hid/hid-mcp2200.c +++ b/drivers/hid/hid-mcp2200.c @@ -329,22 +329,13 @@ static int mcp2200_probe(struct hid_device *hdev, const struct hid_device_id *id return ret; } - ret = hid_hw_start(hdev, 0); - if (ret) { - hid_err(hdev, "can't start hardware\n"); + ret = devm_hid_hw_start_and_open(hdev, 0); + if (ret) return ret; - } hid_info(hdev, "USB HID v%x.%02x Device [%s] on %s\n", hdev->version >> 8, hdev->version & 0xff, hdev->name, hdev->phys); - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "can't open device\n"); - hid_hw_stop(hdev); - return ret; - } - mutex_init(&mcp->lock); init_completion(&mcp->wait_in_report); hid_set_drvdata(hdev, mcp); @@ -356,20 +347,12 @@ static int mcp2200_probe(struct hid_device *hdev, const struct hid_device_id *id ret = devm_gpiochip_add_data(&hdev->dev, &mcp->gc, mcp); if (ret < 0) { hid_err(hdev, "Unable to register gpiochip\n"); - hid_hw_close(hdev); - hid_hw_stop(hdev); return ret; } return 0; } -static void mcp2200_remove(struct hid_device *hdev) -{ - hid_hw_close(hdev); - hid_hw_stop(hdev); -} - static const struct hid_device_id mcp2200_devices[] = { { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_MCP2200) }, { } @@ -380,7 +363,6 @@ static struct hid_driver mcp2200_driver = { .name = "mcp2200", .id_table = mcp2200_devices, .probe = mcp2200_probe, - .remove = mcp2200_remove, .raw_event = mcp2200_raw_event, }; From patchwork Tue Sep 10 15:45:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798849 Received: from szxga06-in.huawei.com (szxga06-in.huawei.com [45.249.212.32]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DA09B1A00F4; Tue, 10 Sep 2024 15:37:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.32 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982627; cv=none; b=cpGAHTEFWBVUtojNdqBCijdhUgfnzO34ZFBSOlhMZRlC0VvpojezN6XE3rIlEbPCFF1azAVlkniIlSYNUxM5Wv3nn4cwk7ER6h/R/bB9Uc8kyiVItYrvPW+x6zIkTkcHBu82KcgHBoiRydZVQ46cx+EPcIrDniYO8ACGWxxzL9Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982627; c=relaxed/simple; bh=7qi4mBYuK0ZnEPIUgHeNiz19kDlMvrLoPLzh2Iqhiy0=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=JTdeX6kkeKqdmR0HHUMFpORUeDo/wcmwH9o+cUgHSBLGJ6wkF8PccrlEiNOuGYuuRCapHkXr0dtYpenECinlnUEakFc5bDdoCunEvFxltVteDbMLrYV1S6E8TGOrp2YNAukWjbO5yAk9Wy2tV9VJzA3vmYr8xDS6QEAfCAlEeDk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4X379M2z5Cz1xxDH; Tue, 10 Sep 2024 23:36:55 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id C28E01A0191; Tue, 10 Sep 2024 23:36:56 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:41 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 05/15] HID: mcp2221: Use devm_hid_hw_start_and_open in mcp2221_probe() Date: Tue, 10 Sep 2024 23:45:35 +0800 Message-ID: <20240910154545.736786-6-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the mcp2221 module use devm_add_action_or_reset() to manage device resource for HID unregistration, now that a universal interface has been provided, use a universal interface to replace it. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-6-lizetao1@huawei.com/ v1 -> v2: None v1: https://lore.kernel.org/all/20240904123607.3407364-6-lizetao1@huawei.com/ drivers/hid/hid-mcp2221.c | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/drivers/hid/hid-mcp2221.c b/drivers/hid/hid-mcp2221.c index 0f93c22a479f..3b8269f7e923 100644 --- a/drivers/hid/hid-mcp2221.c +++ b/drivers/hid/hid-mcp2221.c @@ -932,15 +932,6 @@ static int mcp2221_raw_event(struct hid_device *hdev, return 1; } -/* Device resource managed function for HID unregistration */ -static void mcp2221_hid_unregister(void *ptr) -{ - struct hid_device *hdev = ptr; - - hid_hw_close(hdev); - hid_hw_stop(hdev); -} - /* This is needed to be sure hid_hw_stop() isn't called twice by the subsystem */ static void mcp2221_remove(struct hid_device *hdev) { @@ -1141,31 +1132,18 @@ static int mcp2221_probe(struct hid_device *hdev, * This driver uses the .raw_event callback and therefore does not need any * HID_CONNECT_xxx flags. */ - ret = hid_hw_start(hdev, 0); - if (ret) { - hid_err(hdev, "can't start hardware\n"); + ret = devm_hid_hw_start_and_open(hdev, 0); + if (ret) return ret; - } hid_info(hdev, "USB HID v%x.%02x Device [%s] on %s\n", hdev->version >> 8, hdev->version & 0xff, hdev->name, hdev->phys); - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "can't open device\n"); - hid_hw_stop(hdev); - return ret; - } - mutex_init(&mcp->lock); init_completion(&mcp->wait_in_report); hid_set_drvdata(hdev, mcp); mcp->hdev = hdev; - ret = devm_add_action_or_reset(&hdev->dev, mcp2221_hid_unregister, hdev); - if (ret) - return ret; - hid_device_io_start(hdev); /* Set I2C bus clock diviser */ From patchwork Tue Sep 10 15:45:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798838 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D894195F22; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982620; cv=none; b=O0LL8cnNNfUEBwC+a9TpWZhNlbeF0nmkzKC8fo2hxHXWCwuzAe5nB8kiaP3e18iapL/Dva/c9rhr3csWeoVhcUvYNV/khB6SbTquIerMeb7zxyAPjJNLbLiUGGCLo0vrls5+14bEvPhw5jsnSkaOJG32Dn3j+3STtZhKDcDgSgY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982620; c=relaxed/simple; bh=WCfs992GQASkoWSrFRk//DSH3Y3151jfop8OjJGZiDw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=peb5KO95gwYuJou2wpvC8nGhA9CdMkMv3j6X5yO4Y+zgYiII2IlWirXEHGtY/9urmsuX+hqOwS65eGybhipTzSv/7up+h8ZLJqQhg8yM0mxMONdpzmYMgbGdhcu5/1cbrOn6p6+xZ8NHPj/6KtsHA2vFVvUIs6keHdDcRxadIUY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4X378r5BcWz1j8Lp; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id D03211A0194; Tue, 10 Sep 2024 23:36:56 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:42 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 06/15] HID: nintendo: Use devm_hid_hw_start_and_open in nintendo_hid_probe() Date: Tue, 10 Sep 2024 23:45:36 +0800 Message-ID: <20240910154545.736786-7-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the nintendo module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the err_close and err_stop lables. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-7-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-7-lizetao1@huawei.com/ drivers/hid/hid-nintendo.c | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/drivers/hid/hid-nintendo.c b/drivers/hid/hid-nintendo.c index 58cd0506e431..45ac4fd3c7ea 100644 --- a/drivers/hid/hid-nintendo.c +++ b/drivers/hid/hid-nintendo.c @@ -2673,31 +2673,23 @@ static int nintendo_hid_probe(struct hid_device *hdev, */ hdev->version |= 0x8000; - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "HW start failed\n"); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) goto err_wq; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "cannot start hardware I/O\n"); - goto err_stop; - } hid_device_io_start(hdev); ret = joycon_init(hdev); if (ret) { hid_err(hdev, "Failed to initialize controller; ret=%d\n", ret); - goto err_close; + goto err_wq; } /* Initialize the leds */ ret = joycon_leds_create(ctlr); if (ret) { hid_err(hdev, "Failed to create leds; ret=%d\n", ret); - goto err_close; + goto err_wq; } /* Initialize the battery power supply */ @@ -2720,10 +2712,6 @@ static int nintendo_hid_probe(struct hid_device *hdev, err_ida: ida_free(&nintendo_player_id_allocator, ctlr->player_id); -err_close: - hid_hw_close(hdev); -err_stop: - hid_hw_stop(hdev); err_wq: destroy_workqueue(ctlr->rumble_queue); err: @@ -2745,9 +2733,6 @@ static void nintendo_hid_remove(struct hid_device *hdev) destroy_workqueue(ctlr->rumble_queue); ida_free(&nintendo_player_id_allocator, ctlr->player_id); - - hid_hw_close(hdev); - hid_hw_stop(hdev); } #ifdef CONFIG_PM From patchwork Tue Sep 10 15:45:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798840 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22311199FB9; Tue, 10 Sep 2024 15:36:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982620; cv=none; b=C7uHQvNiNYv2tEYQUrHXxdsu9KfLr7gZd5joT1M30XisSHvMrRY7oJOEFCX5jL+Or1ocIwZ6VJfnCES57gr/f2gZJdz/do3pmw1mn8wIt9lMCF4IRZqfHh4sX7Pge9KQSrV7JuFgBN3UoVNgewSo7eMtd4EHyeAhfLDeh2kqJsE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982620; c=relaxed/simple; bh=Aj8Sn/pHGc8KNUlr2pTm0MMQLApMOSFBlbN6zQm70NU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=PQspsk3dcILXyqos6A8v/wKTyzQIB4Jk159Z98sDkW797srfUXZ6JPZ/+K+2nW3S90G0MTX++CQkSfYlQNjIbZcfAam0gCpGSyAcDAmRPTPj1B/HarlSOkQuoEsc1M70eu6g+QMBSA6HOfMvxW2rkP5yj6xyiZ6t9t8wiyucP5M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4X378r4FjQz2DbyL; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id DEB471A0190; Tue, 10 Sep 2024 23:36:56 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:42 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 07/15] HID: playstation: Use devm_hid_hw_start_and_open in ps_probe() Date: Tue, 10 Sep 2024 23:45:37 +0800 Message-ID: <20240910154545.736786-8-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the playstation module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the err_close and err_stop lables, and directly return the error code when an error occurs. Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-8-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-10-lizetao1@huawei.com/ drivers/hid/hid-playstation.c | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/drivers/hid/hid-playstation.c b/drivers/hid/hid-playstation.c index 0d90d7ee693c..6dddb9451a37 100644 --- a/drivers/hid/hid-playstation.c +++ b/drivers/hid/hid-playstation.c @@ -2704,41 +2704,25 @@ static int ps_probe(struct hid_device *hdev, const struct hid_device_id *id) return ret; } - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "Failed to start HID device\n"); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "Failed to open HID device\n"); - goto err_stop; - } if (id->driver_data == PS_TYPE_PS4_DUALSHOCK4) { dev = dualshock4_create(hdev); if (IS_ERR(dev)) { hid_err(hdev, "Failed to create dualshock4.\n"); - ret = PTR_ERR(dev); - goto err_close; + return PTR_ERR(dev); } } else if (id->driver_data == PS_TYPE_PS5_DUALSENSE) { dev = dualsense_create(hdev); if (IS_ERR(dev)) { hid_err(hdev, "Failed to create dualsense.\n"); - ret = PTR_ERR(dev); - goto err_close; + return PTR_ERR(dev); } } return ret; - -err_close: - hid_hw_close(hdev); -err_stop: - hid_hw_stop(hdev); - return ret; } static void ps_remove(struct hid_device *hdev) @@ -2750,9 +2734,6 @@ static void ps_remove(struct hid_device *hdev) if (dev->remove) dev->remove(dev); - - hid_hw_close(hdev); - hid_hw_stop(hdev); } static const struct hid_device_id ps_devices[] = { From patchwork Tue Sep 10 15:45:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798839 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 16418191476; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982620; cv=none; b=Gh8PzLwSTOzfYX4TCSz+MVD0DPkuPH//1rJBUPaeLdIDVfGpycsT3zIkjI4aXBpcYY09C9JV0kq2jIzU55Kf07X29hvQXDZBfdszk82he/Bc/8eScqXKfopY687/EosMNf4c2UF6HyfkidtdJhUAKbT192xxHNHtlGhl8/lnOo4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982620; c=relaxed/simple; bh=25i+UONXCDs5rFYVr2iA7Gp3T0NOZ2v/NTfArg/wAh4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=foumtPQ+afNdejrJX80qqMXLH1PW6nvJrrIr44NRSxdxLvY/8p0qTiqwhUdkcFpw1y/tFm3fREwgdl7+no7NmMxJcyhC1hbkrcM/vlGwXRqWaFGJTbR7cVhS7vt3Wcj24/CZf+jIqEmHv2AgytKgMK7740lCei5FYKaqv19p9Hg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4X378r5sfzz1j8MK; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id EC42E1A0191; Tue, 10 Sep 2024 23:36:56 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:43 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 08/15] hwmon: (aquacomputer_d5next) Use devm_hid_hw_start_and_open in aqc_probe() Date: Tue, 10 Sep 2024 23:45:38 +0800 Message-ID: <20240910154545.736786-9-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the aquacomputer_d5next module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the fail_and_close and fail_and_stop lables, and directly return the error code when an error occurs. Reviewed-by: Aleksa Savic Acked-by: Guenter Roeck Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-9-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-13-lizetao1@huawei.com/ drivers/hwmon/aquacomputer_d5next.c | 39 +++++++---------------------- 1 file changed, 9 insertions(+), 30 deletions(-) diff --git a/drivers/hwmon/aquacomputer_d5next.c b/drivers/hwmon/aquacomputer_d5next.c index 8e55cd2f46f5..9b66ff0fe6e1 100644 --- a/drivers/hwmon/aquacomputer_d5next.c +++ b/drivers/hwmon/aquacomputer_d5next.c @@ -1556,14 +1556,10 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) if (ret) return ret; - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); if (ret) return ret; - ret = hid_hw_open(hdev); - if (ret) - goto fail_and_stop; - switch (hdev->product) { case USB_PRODUCT_ID_AQUAERO: /* @@ -1577,10 +1573,8 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) * they present. The two other devices have the type of the second element in * their respective collections set to 1, while the real device has it set to 0. */ - if (hdev->collection[1].type != 0) { - ret = -ENODEV; - goto fail_and_close; - } + if (hdev->collection[1].type != 0) + return -ENODEV; priv->kind = aquaero; @@ -1740,10 +1734,8 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) * Choose the right Leakshield device, because * the other one acts as a keyboard */ - if (hdev->type != 2) { - ret = -ENODEV; - goto fail_and_close; - } + if (hdev->type != 2) + return -ENODEV; priv->kind = leakshield; @@ -1865,30 +1857,20 @@ static int aqc_probe(struct hid_device *hdev, const struct hid_device_id *id) priv->name = aqc_device_names[priv->kind]; priv->buffer = devm_kzalloc(&hdev->dev, priv->buffer_size, GFP_KERNEL); - if (!priv->buffer) { - ret = -ENOMEM; - goto fail_and_close; - } + if (!priv->buffer) + return -ENOMEM; mutex_init(&priv->mutex); priv->hwmon_dev = hwmon_device_register_with_info(&hdev->dev, priv->name, priv, &aqc_chip_info, NULL); - if (IS_ERR(priv->hwmon_dev)) { - ret = PTR_ERR(priv->hwmon_dev); - goto fail_and_close; - } + if (IS_ERR(priv->hwmon_dev)) + return PTR_ERR(priv->hwmon_dev); aqc_debugfs_init(priv); return 0; - -fail_and_close: - hid_hw_close(hdev); -fail_and_stop: - hid_hw_stop(hdev); - return ret; } static void aqc_remove(struct hid_device *hdev) @@ -1897,9 +1879,6 @@ static void aqc_remove(struct hid_device *hdev) debugfs_remove_recursive(priv->debugfs); hwmon_device_unregister(priv->hwmon_dev); - - hid_hw_close(hdev); - hid_hw_stop(hdev); } static const struct hid_device_id aqc_table[] = { From patchwork Tue Sep 10 15:45:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798842 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DB0E199FDD; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982621; cv=none; b=UB5Q+9LZEkgMPKeRpDbBAmFnhMEhvgNJKLU5LFAz77bmKLbglWB3udnBuBFgqnrqo6Os1UMX2g7vbTmeYTCVX494vaCQc5rSD1XQJ7OaeKKaLp8Zxif6ibxadjJpkND47fKyDdNiKP/9LALKZNguRKc50ssHev+BX3tMl17zvFs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982621; c=relaxed/simple; bh=UYqUV/+0xxkQ217GZFO2A4w57i9wMoXZbrZenJwe+AY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=HDQY02rNwdgc3hLJHHuzlQDI2p1wfqOcTGVFmHa82MnSRs+kKWHWTbGP/1hJ8KV5uOLajn/l8fle4H0pzZBGik3TKlRDkh2AONLNntMm8UYzx/FRukZLFuGY4HwgeIQ9GGCnZ+IArILZS8Wlx32fhFcXKawkbWGDXRuFbPfGyQI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4X378r4xn6z2Dc4h; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 05C071A0188; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:44 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 09/15] hwmon: (asus_rog_ryujin) Use devm_hid_hw_start_and_open in rog_ryujin_probe() Date: Tue, 10 Sep 2024 23:45:39 +0800 Message-ID: <20240910154545.736786-10-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the rog_ryujin module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the fail_and_close and fail_and_stop lables, and directly return the error code when an error occurs. Further optimization, use devm_hwmon_device_register_with_info to replace hwmon_device_register_with_info, the remote operation can be completely deleted, and the rog_ryujin_data structure no longer needs to hold hwmon device. Acked-by: Guenter Roeck Reviewed-by: Aleksa Savic Signed-off-by: Li Zetao --- v2 -> v3: Added asus_rog_ryujin to prefix subject. v2: https://lore.kernel.org/all/580835b6-928e-4cef-b083-1b48caa1c046@roeck-us.net/ v1 -> v2: 1) Further optimize using devm_hwmon_device_register_with_info and remove the .remove operation 2) Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-14-lizetao1@huawei.com/ drivers/hwmon/asus_rog_ryujin.c | 47 +++++---------------------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/drivers/hwmon/asus_rog_ryujin.c b/drivers/hwmon/asus_rog_ryujin.c index f8b20346a995..ef0d9b72a824 100644 --- a/drivers/hwmon/asus_rog_ryujin.c +++ b/drivers/hwmon/asus_rog_ryujin.c @@ -80,7 +80,6 @@ static const char *const rog_ryujin_speed_label[] = { struct rog_ryujin_data { struct hid_device *hdev; - struct device *hwmon_dev; /* For locking access to buffer */ struct mutex buffer_lock; /* For queueing multiple readers */ @@ -497,6 +496,7 @@ static int rog_ryujin_raw_event(struct hid_device *hdev, struct hid_report *repo static int rog_ryujin_probe(struct hid_device *hdev, const struct hid_device_id *id) { struct rog_ryujin_data *priv; + struct device *hwmon_dev; int ret; priv = devm_kzalloc(&hdev->dev, sizeof(*priv), GFP_KERNEL); @@ -520,23 +520,13 @@ static int rog_ryujin_probe(struct hid_device *hdev, const struct hid_device_id } /* Enable hidraw so existing user-space tools can continue to work */ - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "hid hw start failed with %d\n", ret); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "hid hw open failed with %d\n", ret); - goto fail_and_stop; - } priv->buffer = devm_kzalloc(&hdev->dev, MAX_REPORT_LENGTH, GFP_KERNEL); - if (!priv->buffer) { - ret = -ENOMEM; - goto fail_and_close; - } + if (!priv->buffer) + return -ENOMEM; mutex_init(&priv->status_report_request_mutex); mutex_init(&priv->buffer_lock); @@ -548,31 +538,9 @@ static int rog_ryujin_probe(struct hid_device *hdev, const struct hid_device_id init_completion(&priv->cooler_duty_set); init_completion(&priv->controller_duty_set); - priv->hwmon_dev = hwmon_device_register_with_info(&hdev->dev, "rog_ryujin", + hwmon_dev = devm_hwmon_device_register_with_info(&hdev->dev, "rog_ryujin", priv, &rog_ryujin_chip_info, NULL); - if (IS_ERR(priv->hwmon_dev)) { - ret = PTR_ERR(priv->hwmon_dev); - hid_err(hdev, "hwmon registration failed with %d\n", ret); - goto fail_and_close; - } - - return 0; - -fail_and_close: - hid_hw_close(hdev); -fail_and_stop: - hid_hw_stop(hdev); - return ret; -} - -static void rog_ryujin_remove(struct hid_device *hdev) -{ - struct rog_ryujin_data *priv = hid_get_drvdata(hdev); - - hwmon_device_unregister(priv->hwmon_dev); - - hid_hw_close(hdev); - hid_hw_stop(hdev); + return PTR_ERR_OR_ZERO(hwmon_dev); } static const struct hid_device_id rog_ryujin_table[] = { @@ -586,7 +554,6 @@ static struct hid_driver rog_ryujin_driver = { .name = "rog_ryujin", .id_table = rog_ryujin_table, .probe = rog_ryujin_probe, - .remove = rog_ryujin_remove, .raw_event = rog_ryujin_raw_event, }; From patchwork Tue Sep 10 15:45:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798841 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 44D48199FD7; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982621; cv=none; b=nhkGec81OsVdjbPirkOKitIVZyuZDO7NbBGTOZFJpJ3KQ3qnjNC595Tk4OD5QIg7AACPPSLnGvRM3OUneLUROwmOLKjcdFD9nxXfoi24TdoisPD2WhUzib78umRw/8V0FdX4DaqHwhgHp9wHW/kMPTbCOHeJ6XH0/fkUIoC3YEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982621; c=relaxed/simple; bh=/3SfGZur229jt8c6RIivd+a0zOHoE6Aq9wRdyxlUDxw=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=h0XPs2XkH76wglZopfoDVzWonvUMNk7FMWUlWHI81Nq2xypSd7McX6Gwp4YkqXfKHU5lAgs5RUNoteIGQRR9KCzhbSQVjXhzzR8qgfAjbb4blqOCH90AyeD+wE1Wc7noowDW6I31pNzExqdaFgdiOnLWQ6cEoqA2SayLZ8XWWcU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4X378r6g4Hz1j8Ms; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 138A91A0190; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:44 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 10/15] hwmon: (corsair-cpro) Use devm_hid_hw_start_and_open in ccp_probe() Date: Tue, 10 Sep 2024 23:45:40 +0800 Message-ID: <20240910154545.736786-11-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the corsair-cpro module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the out_hw_close and hid_hw_stop lables, and directly return the error code when an error occurs. Acked-by: Marius Zachmann Acked-by: Guenter Roeck Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-11-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-15-lizetao1@huawei.com/ drivers/hwmon/corsair-cpro.c | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/drivers/hwmon/corsair-cpro.c b/drivers/hwmon/corsair-cpro.c index e1a7f7aa7f80..7bba30840f32 100644 --- a/drivers/hwmon/corsair-cpro.c +++ b/drivers/hwmon/corsair-cpro.c @@ -601,14 +601,10 @@ static int ccp_probe(struct hid_device *hdev, const struct hid_device_id *id) if (ret) return ret; - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); if (ret) return ret; - ret = hid_hw_open(hdev); - if (ret) - goto out_hw_stop; - ccp->hdev = hdev; hid_set_drvdata(hdev, ccp); @@ -621,28 +617,20 @@ static int ccp_probe(struct hid_device *hdev, const struct hid_device_id *id) /* temp and fan connection status only updates when device is powered on */ ret = get_temp_cnct(ccp); if (ret) - goto out_hw_close; + return ret; ret = get_fan_cnct(ccp); if (ret) - goto out_hw_close; + return ret; ccp_debugfs_init(ccp); ccp->hwmon_dev = hwmon_device_register_with_info(&hdev->dev, "corsaircpro", ccp, &ccp_chip_info, NULL); - if (IS_ERR(ccp->hwmon_dev)) { - ret = PTR_ERR(ccp->hwmon_dev); - goto out_hw_close; - } + if (IS_ERR(ccp->hwmon_dev)) + return PTR_ERR(ccp->hwmon_dev); return 0; - -out_hw_close: - hid_hw_close(hdev); -out_hw_stop: - hid_hw_stop(hdev); - return ret; } static void ccp_remove(struct hid_device *hdev) @@ -651,8 +639,6 @@ static void ccp_remove(struct hid_device *hdev) debugfs_remove_recursive(ccp->debugfs); hwmon_device_unregister(ccp->hwmon_dev); - hid_hw_close(hdev); - hid_hw_stop(hdev); } static const struct hid_device_id ccp_devices[] = { From patchwork Tue Sep 10 15:45:41 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798845 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 701EF19A28B; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982622; cv=none; b=A0n2R04CvR6WN4d99FzcV+QNQdx6sENXOmvKHUQl4PAXrCtQgjsdP71kIl5gmu6u6eOwukZtsbHdW7h+9Dc2jnaOSchgqnR9ZLyjp1hXIyQACorZRYzDsztZJtZi6geqauLbxYbp3MF57FhDCtl56YUEAHJAyHlNMyE3KCiKoyQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982622; c=relaxed/simple; bh=uc7u5wB4LeMQ5k5CzWuYbkW0/7xI8rraHHxJe0euFvU=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nO/Sy78z4dozMmgtj+ZnlSiPgpy6qPJPGtmImLr7z9T5cx/KfHkf3eMhNxY1jrJNM2COZk+qcWnNU6cXISxeNlIWzvAaT4SxO0uPx9RcaqFu5OXLNTNTD4HY6bhX5nCclCAmcAoUZkIgiojN63ULKpL9Sf4WIBt2gmV+QPzxkM0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4X378r5kzLz2Dc4j; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 20FE71A0191; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:45 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 11/15] hwmon: (corsair-psu) Use devm_hid_hw_start_and_open in corsairpsu_probe() Date: Tue, 10 Sep 2024 23:45:41 +0800 Message-ID: <20240910154545.736786-12-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the corsair-psu module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the fail_and_close and fail_and_stop lables, and directly return the error code when an error occurs. Reviewed-by: Wilken Gottwalt Acked-by: Guenter Roeck Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-12-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-15-lizetao1@huawei.com/ drivers/hwmon/corsair-psu.c | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/drivers/hwmon/corsair-psu.c b/drivers/hwmon/corsair-psu.c index f8f22b8a67cd..b574ec9cd00f 100644 --- a/drivers/hwmon/corsair-psu.c +++ b/drivers/hwmon/corsair-psu.c @@ -787,14 +787,10 @@ static int corsairpsu_probe(struct hid_device *hdev, const struct hid_device_id if (ret) return ret; - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); if (ret) return ret; - ret = hid_hw_open(hdev); - if (ret) - goto fail_and_stop; - priv->hdev = hdev; hid_set_drvdata(hdev, priv); mutex_init(&priv->lock); @@ -805,13 +801,13 @@ static int corsairpsu_probe(struct hid_device *hdev, const struct hid_device_id ret = corsairpsu_init(priv); if (ret < 0) { dev_err(&hdev->dev, "unable to initialize device (%d)\n", ret); - goto fail_and_stop; + return ret; } ret = corsairpsu_fwinfo(priv); if (ret < 0) { dev_err(&hdev->dev, "unable to query firmware (%d)\n", ret); - goto fail_and_stop; + return ret; } corsairpsu_get_criticals(priv); @@ -820,20 +816,12 @@ static int corsairpsu_probe(struct hid_device *hdev, const struct hid_device_id priv->hwmon_dev = hwmon_device_register_with_info(&hdev->dev, "corsairpsu", priv, &corsairpsu_chip_info, NULL); - if (IS_ERR(priv->hwmon_dev)) { - ret = PTR_ERR(priv->hwmon_dev); - goto fail_and_close; - } + if (IS_ERR(priv->hwmon_dev)) + return PTR_ERR(priv->hwmon_dev); corsairpsu_debugfs_init(priv); return 0; - -fail_and_close: - hid_hw_close(hdev); -fail_and_stop: - hid_hw_stop(hdev); - return ret; } static void corsairpsu_remove(struct hid_device *hdev) @@ -842,8 +830,6 @@ static void corsairpsu_remove(struct hid_device *hdev) debugfs_remove_recursive(priv->debugfs); hwmon_device_unregister(priv->hwmon_dev); - hid_hw_close(hdev); - hid_hw_stop(hdev); } static int corsairpsu_raw_event(struct hid_device *hdev, struct hid_report *report, u8 *data, From patchwork Tue Sep 10 15:45:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798847 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6DA99199FDB; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982623; cv=none; b=m1IVMpX1xdb/dxfhN/v/42P3PLvBK7Ll3Ed1tvfz98aEQFZfij+sVMyzax7UExcCK4+KT07WZoc8OnwLx0/yylJV7ICXwss8GEjJNrFd7oiFBwEbX1CszhuYVdvw7FaOXpq1oFf2k34u+81BnZRqkvOdigJhOjUz0z+fktw7D38= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982623; c=relaxed/simple; bh=iTFC6Tib+y7aOz4hW2DQiNvumbaug4wygRwoOqlsx3A=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=nK28td37g2c88+D86b3PfaduHh6K2wuBzolczs7ygrPVXzBKlKBmg2kaBJuTrTdoCOymhg0gNQIGh1J8t5O21GLQLJDZx01gyznnLxDVS8DW72NdwTw9n5bfsxBDLEVXIFW1oDPVWJiw+cF7q6PbSi5Fz+9MMbUdFanI1ZcHcNY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4X378s0LRyz1j8Md; Tue, 10 Sep 2024 23:36:29 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 2E95A1A0188; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:46 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 12/15] hwmon: (gigabyte_waterforce) Use devm_hid_hw_start_and_open in waterforce_probe() Date: Tue, 10 Sep 2024 23:45:42 +0800 Message-ID: <20240910154545.736786-13-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the waterforce module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the fail_and_close and fail_and_stop lables, and directly return the error code when an error occurs. Reviewed-by: Aleksa Savic Acked-by: Guenter Roeck Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-13-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-16-lizetao1@huawei.com/ drivers/hwmon/gigabyte_waterforce.c | 29 +++++------------------------ 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/drivers/hwmon/gigabyte_waterforce.c b/drivers/hwmon/gigabyte_waterforce.c index 8129d7b3ceaf..9052d1c3d5aa 100644 --- a/drivers/hwmon/gigabyte_waterforce.c +++ b/drivers/hwmon/gigabyte_waterforce.c @@ -337,23 +337,13 @@ static int waterforce_probe(struct hid_device *hdev, const struct hid_device_id /* * Enable hidraw so existing user-space tools can continue to work. */ - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "hid hw start failed with %d\n", ret); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "hid hw open failed with %d\n", ret); - goto fail_and_stop; - } priv->buffer = devm_kzalloc(&hdev->dev, MAX_REPORT_LENGTH, GFP_KERNEL); - if (!priv->buffer) { - ret = -ENOMEM; - goto fail_and_close; - } + if (!priv->buffer) + return -ENOMEM; mutex_init(&priv->status_report_request_mutex); mutex_init(&priv->buffer_lock); @@ -371,18 +361,12 @@ static int waterforce_probe(struct hid_device *hdev, const struct hid_device_id if (IS_ERR(priv->hwmon_dev)) { ret = PTR_ERR(priv->hwmon_dev); hid_err(hdev, "hwmon registration failed with %d\n", ret); - goto fail_and_close; + return ret; } waterforce_debugfs_init(priv); return 0; - -fail_and_close: - hid_hw_close(hdev); -fail_and_stop: - hid_hw_stop(hdev); - return ret; } static void waterforce_remove(struct hid_device *hdev) @@ -391,9 +375,6 @@ static void waterforce_remove(struct hid_device *hdev) debugfs_remove_recursive(priv->debugfs); hwmon_device_unregister(priv->hwmon_dev); - - hid_hw_close(hdev); - hid_hw_stop(hdev); } static const struct hid_device_id waterforce_table[] = { From patchwork Tue Sep 10 15:45:43 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798846 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8642019A292; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982622; cv=none; b=NCquK9PxdTV5HI001ybz/LJa9C54erLDjiq/RIfZqonPT9ShYuIh2sPoUt48X5UJekPeEjOj4WETPIQe2pGGLWE398ipD0UYp5HOq5uFgN9L3KIRlq/m6X3jOnF3SkYmnVE/mxvgpc2hq/o5nS45Pmf9XKZQ24Mz0tOAuWK2ZmA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982622; c=relaxed/simple; bh=/FicOUxbRNycXt+JjadIdZ2FfSxJ3eNpgCU/5da5OTo=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qXhBl0yJi5xivyzO8XeOBT2yrymL7T4euwyjbdhTg/uYGMQwNw7et/puNOE1AeOzrb7Q0O0jjeMT/7UkN3pW0toH4LNFipd76LUiCw89AOf3hAwQ91pp+cZbclz/e1IWZZKl4R13WHQ8IETG+QnLVyEqQabPXjOpnht7Pr64onA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4X378r6XKJz2Dc4k; Tue, 10 Sep 2024 23:36:28 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 3C4A71A0190; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:46 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 13/15] hwmon: (nzxt-kraken2) Use devm_hid_hw_start_and_open in kraken2_probe() Date: Tue, 10 Sep 2024 23:45:43 +0800 Message-ID: <20240910154545.736786-14-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the nzxt-kraken2 module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the fail_and_close and fail_and_stop lables, and directly return the error code when an error occurs. Further optimization, use devm_hwmon_device_register_with_info to replace hwmon_device_register_with_info, the remote operation can be completely deleted, and the kraken2_priv_data no longer needs to hold hwmon device. Acked-by: Jonas Malaco Acked-by: Guenter Roeck Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-14-lizetao1@huawei.com/ v1 -> v2: 1) Further optimize using devm_hwmon_device_register_with_info and remove the .remove operation 2) Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-18-lizetao1@huawei.com/ drivers/hwmon/nzxt-kraken2.c | 45 ++++++------------------------------ 1 file changed, 7 insertions(+), 38 deletions(-) diff --git a/drivers/hwmon/nzxt-kraken2.c b/drivers/hwmon/nzxt-kraken2.c index 7caf387eb144..5b618fc2c17f 100644 --- a/drivers/hwmon/nzxt-kraken2.c +++ b/drivers/hwmon/nzxt-kraken2.c @@ -29,7 +29,6 @@ static const char *const kraken2_fan_label[] = { struct kraken2_priv_data { struct hid_device *hid_dev; - struct device *hwmon_dev; s32 temp_input[1]; u16 fan_input[2]; unsigned long updated; /* jiffies */ @@ -133,6 +132,7 @@ static int kraken2_probe(struct hid_device *hdev, const struct hid_device_id *id) { struct kraken2_priv_data *priv; + struct device *hwmon_dev; int ret; priv = devm_kzalloc(&hdev->dev, sizeof(*priv), GFP_KERNEL); @@ -158,44 +158,14 @@ static int kraken2_probe(struct hid_device *hdev, /* * Enable hidraw so existing user-space tools can continue to work. */ - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "hid hw start failed with %d\n", ret); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "hid hw open failed with %d\n", ret); - goto fail_and_stop; - } - - priv->hwmon_dev = hwmon_device_register_with_info(&hdev->dev, "kraken2", - priv, &kraken2_chip_info, - NULL); - if (IS_ERR(priv->hwmon_dev)) { - ret = PTR_ERR(priv->hwmon_dev); - hid_err(hdev, "hwmon registration failed with %d\n", ret); - goto fail_and_close; - } - - return 0; - -fail_and_close: - hid_hw_close(hdev); -fail_and_stop: - hid_hw_stop(hdev); - return ret; -} - -static void kraken2_remove(struct hid_device *hdev) -{ - struct kraken2_priv_data *priv = hid_get_drvdata(hdev); - - hwmon_device_unregister(priv->hwmon_dev); - hid_hw_close(hdev); - hid_hw_stop(hdev); + hwmon_dev = devm_hwmon_device_register_with_info(&hdev->dev, "kraken2", + priv, &kraken2_chip_info, + NULL); + return PTR_ERR_OR_ZERO(hwmon_dev); } static const struct hid_device_id kraken2_table[] = { @@ -209,7 +179,6 @@ static struct hid_driver kraken2_driver = { .name = "nzxt-kraken2", .id_table = kraken2_table, .probe = kraken2_probe, - .remove = kraken2_remove, .raw_event = kraken2_raw_event, }; From patchwork Tue Sep 10 15:45:44 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798844 Received: from szxga05-in.huawei.com (szxga05-in.huawei.com [45.249.212.191]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 88A2219ABBD; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.191 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982622; cv=none; b=ugh5a60TRknP/9pCrD7Yd3nMgZEuYnv93iLnQxJS4W3pAXT3EMxG6xIuUMY9kA4AyfibgjQ9SBYEcxe7FdufahMyX24jz2rRN0fNEtcF/m3m2x7iBJP7YY/CCaRVZYqI2CO/eMDmkmfmti+VIDQ0z01JwvyLGlNnkhLv6C5efoU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982622; c=relaxed/simple; bh=8ykD/AS/fwG8dSMjZIPtP5G72F/K7cY7tggrJuM7Ylc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=GM/QfYsPSfqNPsyiczg10mbq2tYiYpzln76Evi2nt3oppGkWn/YalSBz61RyYTItI7oQ0thpFysiZQCAxCjAAJUZ4dL6e39w+l0mNnd6Z1IUJCaKXe+66JZaXIFz+qLmIkgpgV8Rs07jqSnhIp5RWfRGN/f0C6xG4eurGAeSQEk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.191 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4X378s189qz1j8Pq; Tue, 10 Sep 2024 23:36:29 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 49FCC1A0191; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:47 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 14/15] hwmon: (nzxt-kraken3) Use devm_hid_hw_start_and_open in kraken3_probe() Date: Tue, 10 Sep 2024 23:45:44 +0800 Message-ID: <20240910154545.736786-15-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the nzxt-kraken3 module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the fail_and_close and fail_and_stop lables, and directly return the error code when an error occurs. Acked-by: Guenter Roeck Reviewed-by: Aleksa Savic Signed-off-by: Li Zetao --- v2 -> v3: Change "nzxt-kraken2" to "nzxt-kraken3" in the commit message. v2: https://lore.kernel.org/all/20240909012313.500341-15-lizetao1@huawei.com/ v1 -> v2: Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-19-lizetao1@huawei.com/ drivers/hwmon/nzxt-kraken3.c | 34 +++++++--------------------------- 1 file changed, 7 insertions(+), 27 deletions(-) diff --git a/drivers/hwmon/nzxt-kraken3.c b/drivers/hwmon/nzxt-kraken3.c index 00f3ac90a290..71b8c21cfe1b 100644 --- a/drivers/hwmon/nzxt-kraken3.c +++ b/drivers/hwmon/nzxt-kraken3.c @@ -897,17 +897,9 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id } /* Enable hidraw so existing user-space tools can continue to work */ - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); - if (ret) { - hid_err(hdev, "hid hw start failed with %d\n", ret); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); + if (ret) return ret; - } - - ret = hid_hw_open(hdev); - if (ret) { - hid_err(hdev, "hid hw open failed with %d\n", ret); - goto fail_and_stop; - } switch (hdev->product) { case USB_PRODUCT_ID_X53: @@ -928,15 +920,12 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id device_name = "kraken2023elite"; break; default: - ret = -ENODEV; - goto fail_and_close; + return -ENODEV; } priv->buffer = devm_kzalloc(&hdev->dev, MAX_REPORT_LENGTH, GFP_KERNEL); - if (!priv->buffer) { - ret = -ENOMEM; - goto fail_and_close; - } + if (!priv->buffer) + return -ENOMEM; mutex_init(&priv->buffer_lock); mutex_init(&priv->z53_status_request_lock); @@ -948,7 +937,7 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id ret = kraken3_init_device(hdev); if (ret < 0) { hid_err(hdev, "device init failed with %d\n", ret); - goto fail_and_close; + return ret; } ret = kraken3_get_fw_ver(hdev); @@ -960,18 +949,12 @@ static int kraken3_probe(struct hid_device *hdev, const struct hid_device_id *id if (IS_ERR(priv->hwmon_dev)) { ret = PTR_ERR(priv->hwmon_dev); hid_err(hdev, "hwmon registration failed with %d\n", ret); - goto fail_and_close; + return ret; } kraken3_debugfs_init(priv, device_name); return 0; - -fail_and_close: - hid_hw_close(hdev); -fail_and_stop: - hid_hw_stop(hdev); - return ret; } static void kraken3_remove(struct hid_device *hdev) @@ -980,9 +963,6 @@ static void kraken3_remove(struct hid_device *hdev) debugfs_remove_recursive(priv->debugfs); hwmon_device_unregister(priv->hwmon_dev); - - hid_hw_close(hdev); - hid_hw_stop(hdev); } static const struct hid_device_id kraken3_table[] = { From patchwork Tue Sep 10 15:45:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Li Zetao X-Patchwork-Id: 13798843 Received: from szxga04-in.huawei.com (szxga04-in.huawei.com [45.249.212.190]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87A3819AA75; Tue, 10 Sep 2024 15:36:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=45.249.212.190 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982621; cv=none; b=QjHV3qPzQyzuUF4n2Ahhd4ZcmokdXRqp3Ht9U3srI5+sso/Q3DemmC/E+8ISWej/MgAiQOWzMKs4oOohXKUV4U45pmR+5OoIcoWaRtaWJhRF8brT40gwtGudE/pnxXq7es3/8PiJXhP4mvmLy2AWQ+8h0iYhcs1r/68EICJdims= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725982621; c=relaxed/simple; bh=fPodBcRmooQc412mo89NDHrao5EJWLAEnyMWs+S2xpE=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=hkBV3r59Lfnijmbrad2fJglvLJlqDIBB5AXSL9iUII4Kqql4UrZglOxiOyGqvC6NYTtr4169jjZXjr8kxB3r05lP1DhRMAm6KUPbAdyOzITJt09qXmxv9YOZUTY4K5DnrFBaNyiIhP7Rxou1dk18uUcBSansKCGn6BaAsuXG6yI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com; spf=pass smtp.mailfrom=huawei.com; arc=none smtp.client-ip=45.249.212.190 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=huawei.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=huawei.com Received: from mail.maildlp.com (unknown [172.19.163.17]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4X378s0DjHz2Dc4l; Tue, 10 Sep 2024 23:36:29 +0800 (CST) Received: from kwepemd500012.china.huawei.com (unknown [7.221.188.25]) by mail.maildlp.com (Postfix) with ESMTPS id 57FB31A0188; Tue, 10 Sep 2024 23:36:57 +0800 (CST) Received: from huawei.com (10.90.53.73) by kwepemd500012.china.huawei.com (7.221.188.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1258.34; Tue, 10 Sep 2024 23:36:47 +0800 From: Li Zetao To: , , , , , , , , , , , , , , , CC: , , , Subject: [PATCH -next v3 15/15] hwmon: (nzxt-smart2) Use devm_hid_hw_start_and_open in nzxt_smart2_hid_probe() Date: Tue, 10 Sep 2024 23:45:45 +0800 Message-ID: <20240910154545.736786-16-lizetao1@huawei.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240910154545.736786-1-lizetao1@huawei.com> References: <20240910154545.736786-1-lizetao1@huawei.com> Precedence: bulk X-Mailing-List: linux-hwmon@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: dggems704-chm.china.huawei.com (10.3.19.181) To kwepemd500012.china.huawei.com (7.221.188.25) Currently, the nzxt-smart2 module needs to maintain hid resources by itself. Use devm_hid_hw_start_and_open helper to ensure that hid resources are consistent with the device life cycle, and release hid resources before device is released. At the same time, it can avoid the goto-release encoding, drop the out_hw_close and out_hw_stop lables, and directly return the error code when an error occurs. Further optimization, use devm_hwmon_device_register_with_info to replace hwmon_device_register_with_info, the remote operation can be completely deleted, and the drvdata no longer needs to hold hwmon device Acked-by: Guenter Roeck Signed-off-by: Li Zetao --- v2 -> v3: None v2: https://lore.kernel.org/all/20240909012313.500341-16-lizetao1@huawei.com/ v1 -> v2: 1) Further optimize using devm_hwmon_device_register_with_info and remove the .remove operation 2) Adjust commit information v1: https://lore.kernel.org/all/20240904123607.3407364-20-lizetao1@huawei.com/ drivers/hwmon/nzxt-smart2.c | 38 +++++-------------------------------- 1 file changed, 5 insertions(+), 33 deletions(-) diff --git a/drivers/hwmon/nzxt-smart2.c b/drivers/hwmon/nzxt-smart2.c index df6fa72a6b59..9c6d020ac896 100644 --- a/drivers/hwmon/nzxt-smart2.c +++ b/drivers/hwmon/nzxt-smart2.c @@ -172,7 +172,6 @@ struct set_fan_speed_report { struct drvdata { struct hid_device *hid; - struct device *hwmon; u8 fan_duty_percent[FAN_CHANNELS]; u16 fan_rpm[FAN_CHANNELS]; @@ -730,6 +729,7 @@ static int nzxt_smart2_hid_probe(struct hid_device *hdev, const struct hid_device_id *id) { struct drvdata *drvdata; + struct device *hwmon; int ret; drvdata = devm_kzalloc(&hdev->dev, sizeof(struct drvdata), GFP_KERNEL); @@ -750,44 +750,17 @@ static int nzxt_smart2_hid_probe(struct hid_device *hdev, if (ret) return ret; - ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW); + ret = devm_hid_hw_start_and_open(hdev, HID_CONNECT_HIDRAW); if (ret) return ret; - ret = hid_hw_open(hdev); - if (ret) - goto out_hw_stop; - hid_device_io_start(hdev); init_device(drvdata, UPDATE_INTERVAL_DEFAULT_MS); - drvdata->hwmon = - hwmon_device_register_with_info(&hdev->dev, "nzxtsmart2", drvdata, - &nzxt_smart2_chip_info, NULL); - if (IS_ERR(drvdata->hwmon)) { - ret = PTR_ERR(drvdata->hwmon); - goto out_hw_close; - } - - return 0; - -out_hw_close: - hid_hw_close(hdev); - -out_hw_stop: - hid_hw_stop(hdev); - return ret; -} - -static void nzxt_smart2_hid_remove(struct hid_device *hdev) -{ - struct drvdata *drvdata = hid_get_drvdata(hdev); - - hwmon_device_unregister(drvdata->hwmon); - - hid_hw_close(hdev); - hid_hw_stop(hdev); + hwmon = devm_hwmon_device_register_with_info(&hdev->dev, "nzxtsmart2", drvdata, + &nzxt_smart2_chip_info, NULL); + return PTR_ERR_OR_ZERO(hwmon); } static const struct hid_device_id nzxt_smart2_hid_id_table[] = { @@ -807,7 +780,6 @@ static struct hid_driver nzxt_smart2_hid_driver = { .name = "nzxt-smart2", .id_table = nzxt_smart2_hid_id_table, .probe = nzxt_smart2_hid_probe, - .remove = nzxt_smart2_hid_remove, .raw_event = nzxt_smart2_hid_raw_event, #ifdef CONFIG_PM .reset_resume = nzxt_smart2_hid_reset_resume,