From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3CBECC38A02 for ; Sun, 30 Oct 2022 11:01:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229934AbiJ3LBX (ORCPT ); Sun, 30 Oct 2022 07:01:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54532 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229817AbiJ3LBV (ORCPT ); Sun, 30 Oct 2022 07:01:21 -0400 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17A8DBF2 for ; Sun, 30 Oct 2022 04:01:19 -0700 (PDT) Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 86456240104 for ; Sun, 30 Oct 2022 12:01:18 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1667127678; bh=UXo8SWSLjX5b/DzB0TXVybqyfBzGWqgNdN1XaWneBFs=; h=From:To:Cc:Subject:Date:From; b=PfPtlfIqVRm6qdZsAib5RQOGHuYrQxND4EZUU0W2LozsxeBC7SwBM/eC2f+iudInA HYjqwJkirjd2ICLdw2B1ObQqpRSs088sgXZ9wXvJhEkscRtsLH/tNG6uXz1PK5pjUr NPkigcY6aOzmvkKOxTaNEscmOVC9nNK744JcygujWyyt05px3RyQpSqtDXbXi8Ik1C 7e9V2Y28jYcG4bo7ZOgrnUITujURwpp7qx78rtJoHx6pfhQPlkBg+CDoJJMTTGhCzO YW7Y5BlwTl66m158ld7u3Dsw33pR7fiwOlhBMshUZXMPirrqR6LG43aXRVtw1BhBWq K0SQtSYIuzfpA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4N0YHd5b6cz9rxB; Sun, 30 Oct 2022 12:01:17 +0100 (CET) From: Lukas Magel To: linux-can@vger.kernel.org Cc: Stephane Grosjean , Lukas Magel Subject: [PATCH v2 2/7] can: peak_usb: add callback to read user value of CANFD devices Date: Sun, 30 Oct 2022 10:59:34 +0000 Message-Id: <20221030105939.87658-3-lukas.magel@posteo.net> In-Reply-To: <20221030105939.87658-1-lukas.magel@posteo.net> References: <20220801080446.36374-1-lukas.magel@posteo.net> <20221030105939.87658-1-lukas.magel@posteo.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-can@vger.kernel.org From: Stephane Grosjean This patch adds the specific function that allows to read a user defined value from the non volatile memory of the USB CANFD interfaces of PEAK-System. Signed-off-by: Stephane Grosjean Signed-off-by: Lukas Magel --- drivers/net/can/usb/peak_usb/pcan_usb_core.c | 3 +- drivers/net/can/usb/peak_usb/pcan_usb_fd.c | 33 +++++++++++++++++--- 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c index 8e1b3c19f92f..ca282b0aa9a5 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c @@ -922,8 +922,7 @@ static int peak_usb_create_dev(const struct peak_usb_adapter *peak_usb_adapter, } /* get device number early */ - if (dev->adapter->dev_get_user_devid) - dev->adapter->dev_get_user_devid(dev, &dev->user_devid); + dev->adapter->dev_get_user_devid(dev, &dev->user_devid); netdev_info(netdev, "attached to %s channel %u (device %u)\n", peak_usb_adapter->name, ctrl_idx, dev->user_devid); diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c index b8053e697261..2db358d0295e 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_fd.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_fd.c @@ -234,6 +234,15 @@ static int pcan_usb_fd_send_cmd(struct peak_usb_device *dev, void *cmd_tail) return err; } +static int pcan_usb_fd_read_fwinfo(struct peak_usb_device *dev, + struct pcan_ufd_fw_info *fw_info) +{ + return pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO, + PCAN_USBPRO_INFO_FW, + fw_info, + sizeof(*fw_info)); +} + /* build the commands list in the given buffer, to enter operational mode */ static int pcan_usb_fd_build_restart_cmd(struct peak_usb_device *dev, u8 *buf) { @@ -434,6 +443,21 @@ static int pcan_usb_fd_set_bittiming_fast(struct peak_usb_device *dev, return pcan_usb_fd_send_cmd(dev, ++cmd); } +/* read user device id from device */ +static int pcan_usb_fd_get_user_devid(struct peak_usb_device *dev, + u32 *user_devid) +{ + int err; + struct pcan_usb_fd_if *usb_if = pcan_usb_fd_dev_if(dev); + + err = pcan_usb_fd_read_fwinfo(dev, &usb_if->fw_info); + if (err) + return err; + + *user_devid = le32_to_cpu(usb_if->fw_info.dev_id[dev->ctrl_idx]); + return err; +} + /* handle restart but in asynchronously way * (uses PCAN-USB Pro code to complete asynchronous request) */ @@ -907,10 +931,7 @@ static int pcan_usb_fd_init(struct peak_usb_device *dev) fw_info = &pdev->usb_if->fw_info; - err = pcan_usb_pro_send_req(dev, PCAN_USBPRO_REQ_INFO, - PCAN_USBPRO_INFO_FW, - fw_info, - sizeof(*fw_info)); + err = pcan_usb_fd_read_fwinfo(dev, fw_info); if (err) { dev_err(dev->netdev->dev.parent, "unable to read %s firmware info (err %d)\n", @@ -1148,6 +1169,7 @@ const struct peak_usb_adapter pcan_usb_fd = { .dev_set_bus = pcan_usb_fd_set_bus, .dev_set_bittiming = pcan_usb_fd_set_bittiming_slow, .dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast, + .dev_get_user_devid = pcan_usb_fd_get_user_devid, .dev_decode_buf = pcan_usb_fd_decode_buf, .dev_start = pcan_usb_fd_start, .dev_stop = pcan_usb_fd_stop, @@ -1222,6 +1244,7 @@ const struct peak_usb_adapter pcan_usb_chip = { .dev_set_bus = pcan_usb_fd_set_bus, .dev_set_bittiming = pcan_usb_fd_set_bittiming_slow, .dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast, + .dev_get_user_devid = pcan_usb_fd_get_user_devid, .dev_decode_buf = pcan_usb_fd_decode_buf, .dev_start = pcan_usb_fd_start, .dev_stop = pcan_usb_fd_stop, @@ -1296,6 +1319,7 @@ const struct peak_usb_adapter pcan_usb_pro_fd = { .dev_set_bus = pcan_usb_fd_set_bus, .dev_set_bittiming = pcan_usb_fd_set_bittiming_slow, .dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast, + .dev_get_user_devid = pcan_usb_fd_get_user_devid, .dev_decode_buf = pcan_usb_fd_decode_buf, .dev_start = pcan_usb_fd_start, .dev_stop = pcan_usb_fd_stop, @@ -1370,6 +1394,7 @@ const struct peak_usb_adapter pcan_usb_x6 = { .dev_set_bus = pcan_usb_fd_set_bus, .dev_set_bittiming = pcan_usb_fd_set_bittiming_slow, .dev_set_data_bittiming = pcan_usb_fd_set_bittiming_fast, + .dev_get_user_devid = pcan_usb_fd_get_user_devid, .dev_decode_buf = pcan_usb_fd_decode_buf, .dev_start = pcan_usb_fd_start, .dev_stop = pcan_usb_fd_stop, -- 2.37.2