From patchwork Wed Nov 17 22:50:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marek_Beh=C3=BAn?= X-Patchwork-Id: 12625685 X-Patchwork-Delegate: kuba@kernel.org 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81F2AC433EF for ; Wed, 17 Nov 2021 22:51:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6783561BD3 for ; Wed, 17 Nov 2021 22:51:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S241482AbhKQWyE (ORCPT ); Wed, 17 Nov 2021 17:54:04 -0500 Received: from mail.kernel.org ([198.145.29.99]:51286 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241468AbhKQWyA (ORCPT ); Wed, 17 Nov 2021 17:54:00 -0500 Received: by mail.kernel.org (Postfix) with ESMTPSA id A06E261B9F; Wed, 17 Nov 2021 22:50:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1637189461; bh=a9yOpygQWOFXF/Zv6Qdc+lw/irBC0JDiccS+/FN/lho=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W6hst4PRWIrFqRwOLaVLaEfz6CLxs+PJuOSc7cItRRCLS47hHiGADhNaTlbDtvFbH +UD/aU9CWwSLgtom4cWUWtQaXwoA2+DZzwKhJzybCDyi33heoGOSbkR40WzsquerR3 CvZYQwQqdfGKdWFcaF6B5+kZQjVl/I2S29GBcBRU4xG43Zna9OG4OjW8pLsDQe/9TW npNvSZQiEGyZBAZGWzirmjeEF9SqWcmp3Q9oNE8QqcHZtJqjNsHa87cuhssbqevr0V bteDvUTFrxkC61IgK537KXVDvkDQO/MxgrwSqp+Mn7/S025saZ1cPDNw789ixQizPp M2TFNVyldmMFg== From: =?utf-8?q?Marek_Beh=C3=BAn?= To: netdev@vger.kernel.org, Andrew Lunn Cc: Jakub Kicinski , David Miller , Russell King , Rob Herring , devicetree@vger.kernel.org, =?utf-8?q?Marek_Beh=C3=BAn?= Subject: [PATCH net-next 3/8] device property: add helper function for getting phy mode bitmap Date: Wed, 17 Nov 2021 23:50:45 +0100 Message-Id: <20211117225050.18395-4-kabel@kernel.org> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211117225050.18395-1-kabel@kernel.org> References: <20211117225050.18395-1-kabel@kernel.org> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org X-Patchwork-Delegate: kuba@kernel.org Now that the 'phy-mode' property can be a string array containing more PHY modes, add helper function fwnode_get_phy_modes() that reads this property and fills in PHY interfaces bitmap. Signed-off-by: Marek BehĂșn Reviewed-by: Andrew Lunn --- drivers/base/property.c | 34 ++++++++++++++++++++++++++++++++++ include/linux/property.h | 3 +++ 2 files changed, 37 insertions(+) diff --git a/drivers/base/property.c b/drivers/base/property.c index e12aef10f7fd..9f9dbc2ae386 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -921,6 +921,40 @@ int fwnode_get_phy_mode(struct fwnode_handle *fwnode) } EXPORT_SYMBOL_GPL(fwnode_get_phy_mode); +/** + * fwnode_get_phy_modes - Fill in phy modes bitmap for given firmware node + * @fwnode: Pointer to the given node + * @interfaces: Phy modes bitmask, as declared by DECLARE_PHY_INTERFACE_MASK() + * + * Reads the strings from property 'phy-mode' or 'phy-connection-type' and fills + * interfaces bitmask. Returns 0 on success, or errno on error. + */ +int fwnode_get_phy_modes(struct fwnode_handle *fwnode, + unsigned long *interfaces) +{ + const char *modes[PHY_INTERFACE_MODE_MAX]; + int len, i, j; + + len = fwnode_property_read_string_array(fwnode, "phy-mode", modes, + ARRAY_SIZE(modes)); + if (len < 0) + len = fwnode_property_read_string_array(fwnode, + "phy-connection-type", + modes, + ARRAY_SIZE(modes)); + if (len < 0) + return len; + + phy_interface_zero(interfaces); + for (i = 0; i < len; ++i) + for (j = 0; j < PHY_INTERFACE_MODE_MAX; j++) + if (!strcasecmp(modes[i], phy_modes(j))) + __set_bit(j, interfaces); + + return 0; +} +EXPORT_SYMBOL_GPL(fwnode_get_phy_modes); + /** * device_get_phy_mode - Get first phy mode for given device * @dev: Pointer to the given device diff --git a/include/linux/property.h b/include/linux/property.h index 88fa726a76df..99a74d524b2b 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -391,6 +391,9 @@ const void *device_get_match_data(struct device *dev); int device_get_phy_mode(struct device *dev); int fwnode_get_phy_mode(struct fwnode_handle *fwnode); +int fwnode_get_phy_modes(struct fwnode_handle *fwnode, + unsigned long *interfaces); + struct fwnode_handle *fwnode_graph_get_next_endpoint( const struct fwnode_handle *fwnode, struct fwnode_handle *prev); struct fwnode_handle *