From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f170.google.com (mail-pl1-f170.google.com [209.85.214.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 286E642BC2C for ; Tue, 21 Jul 2026 06:54:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.170 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784616883; cv=none; b=iylqUtCDJy8Iuf4rEWPaLYIjOOmtTizUYN9NcRyot3j9jVdea3fcUCCFfJbaddHbrqGHXQ/EOFE/3TnrkVFVSt3fOETm7SId0ksFE+luO4O0+I0wkQ7jlJJ3ApqA05RRPGfEZpXVmqg9Jf47sh/sCBFBnjEdvi/won6Jdy8GyNE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784616883; c=relaxed/simple; bh=rN8bGYfPxlquy6cQeK5GYz3ym6oKo/FOx8yU0FBCzV8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZQ3mueGIHvkuR0jjCLifaIur8hNLwCqggwaOmgQ4wlJhEU8PZT0w6EOUeAL8ZZW1oi6IcOQYDTPmCE5WW8f7l6EnZuPDwGmFvotgMNW4ZR14VK1pxy9Zw494hwAjBaLnzZ7uQoEld8rdtG9wWXmU60VZnWQqj13oto0A94SjgM0= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org; spf=pass smtp.mailfrom=chromium.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b=O37Eedr4; arc=none smtp.client-ip=209.85.214.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=chromium.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=chromium.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=chromium.org header.i=@chromium.org header.b="O37Eedr4" Received: by mail-pl1-f170.google.com with SMTP id d9443c01a7336-2ce87c7e3bbso123653135ad.1 for ; Mon, 20 Jul 2026 23:54:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1784616881; x=1785221681; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yZPli2S6cZzTtPxNu5kCcB+M+KQUeHMnkMABY4ADLcw=; b=O37Eedr40TOL1RWQ6QWyigzYQhZ5h6H0pxJg+gceK3/HoVfforjFkq8OceLGsaRKOe ScSbEH3/CJ1lqVjsritmG2lJvjtMZcvz1Sgejb90xiWUOFph/b6goc3ePmMBftzHJUcu VgFCsVs2w6O42y1a0Q42h7rQUFQIMfpFbWs1w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784616881; x=1785221681; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=yZPli2S6cZzTtPxNu5kCcB+M+KQUeHMnkMABY4ADLcw=; b=Qmgm8SId46akNFLkWOOckFO2bnygQWyOCieUjtX63X1lUrjL1+0UruHzTkJSz5p3fF Vfnt8TCcUQ6Ba2+q0k6xXzy0EdyWCb2lqL9BLBdw28j3/WjiETYoaEgeYNdnaIk1Vh28 JROFodDmhxm69ykSV2ArALvMN+knNzFOTGWwYtjaRgBLeaVcPfpklQWtZVw6T5JESiWJ 1JQjGsM5PLF9k4+YATfKsG3JdwNxGGGAeY7PCTsyw+9KbyAcw1uhPtqvXmS580MkZMBT TYvNf3oyh04A7D4/0XuWlOjC3u0+m4qULYPw4ALbx+VurSE+P4aGp5+JCzZpuP35nF+/ UE9Q== X-Forwarded-Encrypted: i=1; AHgh+RrSGt5cwGecL63GcMMBCUvbjOC/K3en6+5ljruAkonHc3JMJ8Z6NmB+NcIUpb+UpRy06RTZ6oYpf3Q86TM=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+LUAdsd7PBthL41CVy5ZIs9yz5t58EPFAF8f6XkJ3Y1eNfM1p 7C7mXg+32VAoaEoCjZFS5YRQdJywVsg06HPlpoS5yrJW+gu8s03jzV5Dml3k1tojug== X-Gm-Gg: AR+sD10tqQ3QQx7WWC3v+4NMSMJLp/J6wy6XzchRrf8v5vfEDmPz/FGbLyFv7SU7tDN 0v4WtYFXDKLjCz1L2yDi7RaNxS22oYea2S76BhoAX+vRhjHbPfyPTRbPCRDKJV/s1cmVvpfSFme XmKJxUzHbwa5hauJe6B1W11jCAMhd3DubfzPeFTpdPNtw4t5dy/BiP/L0VnpAH8rpdNV8IaaX15 bNYRsl8t2mImE2xjsBrecIbOJDod73VfAuiDRQXRGIbBu4LFBPjANClDjqTD7fPAI+s+gGxybny 1tadMIjswnBVb5LqWLsCwwpGWnDqEN+V8y+XUz2vkzEIusHLKByjkykEzIQmDJhVEKLZary51Tv fl0OWpqG9PIg7pI41tQVJijeCff1VMXxPcKdRZM+2OkkCqL6anrhe5RWvrTVolksMEtVMgP550X vRaZIH7eZ7PakXi0wjmtKL3JuDqCoWRPp5XOzlUnMSpAijpJZNWhs2v8FhhJY= X-Received: by 2002:a17:902:ce8a:b0:2cc:61e8:5fba with SMTP id d9443c01a7336-2cf349a2153mr182756085ad.32.1784616881554; Mon, 20 Jul 2026 23:54:41 -0700 (PDT) Received: from wenstp920.tpe.corp.google.com ([2a00:79e0:201d:8:3916:f048:32c3:931f]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2cf3448ee77sm69716005ad.4.2026.07.20.23.54.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 20 Jul 2026 23:54:41 -0700 (PDT) From: Chen-Yu Tsai To: Bartosz Golaszewski , Greg Kroah-Hartman , Andy Shevchenko , Daniel Scally , Heikki Krogerus , Sakari Ailus , "Rafael J. Wysocki" , Danilo Krummrich , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Matthias Brugger , AngeloGioacchino Del Regno Cc: Chen-Yu Tsai , linux-acpi@vger.kernel.org, driver-core@lists.linux.dev, linux-pm@vger.kernel.org, linux-usb@vger.kernel.org, devicetree@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Manivannan Sadhasivam , Alan Stern , Bartosz Golaszewski Subject: [PATCH v6 01/16] device property: Add fwnode_graph_get_port_by_id() Date: Tue, 21 Jul 2026 14:53:56 +0800 Message-ID: <20260721065413.2306137-2-wenst@chromium.org> X-Mailer: git-send-email 2.55.0.229.g6434b31f56-goog In-Reply-To: <20260721065413.2306137-1-wenst@chromium.org> References: <20260721065413.2306137-1-wenst@chromium.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit In some cases the driver needs a reference to the port firmware node. Once such case is the upcoming USB power sequencing integration. The USB hub port is tied to the corresponding port firmware node if it exists. Provide a helper for this. Reviewed-by: Bartosz Golaszewski Reviewed-by: Andy Shevchenko Signed-off-by: Chen-Yu Tsai --- Changes since v5: - Dropped left-over declaration in header (Sashiko) Changes since v4: - Added flags parameter so users can specify whether incomplete ports are returned or not (Sashiko) Changes since v2: - Moved "Return:" kernel-doc section to the end. (Andy) Changes since v1: - New patch --- drivers/base/property.c | 29 +++++++++++++++++++++++++++++ include/linux/property.h | 2 ++ 2 files changed, 31 insertions(+) diff --git a/drivers/base/property.c b/drivers/base/property.c index 9387bb83eb54..950defc0c55a 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -1346,6 +1346,35 @@ int fwnode_graph_parse_endpoint(const struct fwnode_handle *fwnode, } EXPORT_SYMBOL(fwnode_graph_parse_endpoint); +/** + * fwnode_graph_get_port_by_id - get the port matching a given id + * @fwnode: parent fwnode_handle containing the graph + * @id: id of the port + * @flags: fwnode lookup flags + * + * The caller is responsible for calling fwnode_handle_put() on the returned + * fwnode pointer. + * + * Does not return ports that belong to disabled devices or endpoints that + * are unconnected, unless FWNODE_GRAPH_DEVICE_DISABLED is passed in @flags. + * + * Return: A 'port' firmware node pointer with refcount incremented. + */ +struct fwnode_handle *fwnode_graph_get_port_by_id(struct fwnode_handle *fwnode, + u32 id, + unsigned long flags) +{ + struct fwnode_handle *ep; + + ep = fwnode_graph_get_endpoint_by_id(fwnode, id, 0, + flags | FWNODE_GRAPH_ENDPOINT_NEXT); + if (!ep) + return NULL; + + return fwnode_get_next_parent(ep); +} +EXPORT_SYMBOL_GPL(fwnode_graph_get_port_by_id); + const void *device_get_match_data(const struct device *dev) { return fwnode_call_ptr_op(dev_fwnode(dev), device_get_match_data, dev); diff --git a/include/linux/property.h b/include/linux/property.h index 14c304db4664..01ea010cb2f9 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -505,6 +505,8 @@ int fwnode_get_phy_mode(const struct fwnode_handle *fwnode); void __iomem *fwnode_iomap(struct fwnode_handle *fwnode, int index); +struct fwnode_handle *fwnode_graph_get_port_by_id(struct fwnode_handle *fwnode, u32 id, + unsigned long flags); struct fwnode_handle *fwnode_graph_get_next_endpoint( const struct fwnode_handle *fwnode, struct fwnode_handle *prev); struct fwnode_handle * -- 2.55.0.229.g6434b31f56-goog