Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6054950imu; Wed, 30 Jan 2019 08:04:12 -0800 (PST) X-Google-Smtp-Source: ALg8bN718wEczXH73dmHkkXG02s++OjCPfEhJwKLa4pUra2Frr1W786sOXtufApSo5YWsCAO6JZt X-Received: by 2002:a17:902:8a8a:: with SMTP id p10mr31358334plo.50.1548864252358; Wed, 30 Jan 2019 08:04:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548864252; cv=none; d=google.com; s=arc-20160816; b=DT+tuSpEJibcHTebXHlDfRvZZIGiFt3196UIMZNrTJvLb3ymNivL9V+KQY81ACeExa 96RFZf97WRiyQIoVO0uXZP1razQEvsF5ZQ26LzAqx/kfFjuX52Tdcq7LXl4O+HnxN1dH E4pxdF2YawGm5EhotWCfdC9pMyBHgn+OLDrzjownXO4stecLX4VcBko4hnYjGauk3JQ8 ZULwvNw8hvKLOCheUAJ/DqWM+jOX0ub63VfXC3xR8bqtw7h9Slp/tj6ttGKaDzEtX7Xm hnULNszzDrlq40I847ZWuJF5njy/WdxdqJOg3LK4je8slxusslQUkxvt5EFIZmESUAbe Gpgg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=RYCITlff8pwlAm7/LNuJJEjDBESPYLY4gBabOq8Wo00=; b=s3lftvoBtT4mE/m54REZU/+4RrbHFREsVG1XxwyLDFnTnIy0zYpH7xuFp5i1KO5BRA 8dk8jBoTYvyq1J2ZgPVFs8qXvmaLCRZLbPld4StIDXttLIIoMmJMxrodbmYeChNAAA9J Ua4YXFL90aBDb33InQL65+T5Flg5X1VDE6RjkOc/XGXisgtCjZq39xd8Kji4RvEd0Kaz +mFhnxV/LFE062thL+MzfuCFl9H7IpFolIYILkiXUSPXcj9KDQdGUtHIecqH0EAq0mxz IbkqFGrDiNbh+w3Txbvpy2I3fHjyAYggsltflnITgL2WIJSaZsd4PPmQxNI0CV4R+ot1 4alw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id cf17si2034683plb.52.2019.01.30.08.03.55; Wed, 30 Jan 2019 08:04:12 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731935AbfA3QDX (ORCPT + 99 others); Wed, 30 Jan 2019 11:03:23 -0500 Received: from mga02.intel.com ([134.134.136.20]:60152 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731936AbfA3QDV (ORCPT ); Wed, 30 Jan 2019 11:03:21 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 30 Jan 2019 08:03:21 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.56,541,1539673200"; d="scan'208";a="142760951" Received: from black.fi.intel.com (HELO black.fi.intel.com.) ([10.237.72.28]) by fmsmga001.fm.intel.com with ESMTP; 30 Jan 2019 08:03:19 -0800 From: Heikki Krogerus To: Greg Kroah-Hartman Cc: Andy Shevchenko , Chen Yu , Jun Li , Hans de Goede , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 8/9] device connection: Prepare support for firmware described connections Date: Wed, 30 Jan 2019 19:02:58 +0300 Message-Id: <20190130160259.46919-9-heikki.krogerus@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190130160259.46919-1-heikki.krogerus@linux.intel.com> References: <20190130160259.46919-1-heikki.krogerus@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When the connections are defined in firmware, struct device_connection will have the fwnode member pointing to the device node (struct fwnode_handle) of the requested device. The endpoint member for the device names will not be used at all in that case. Signed-off-by: Heikki Krogerus --- drivers/base/devcon.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/base/devcon.c b/drivers/base/devcon.c index d427e806cd73..858b8d2f6ef8 100644 --- a/drivers/base/devcon.c +++ b/drivers/base/devcon.c @@ -75,12 +75,36 @@ static struct bus_type *generic_match_buses[] = { NULL, }; +static int device_fwnode_match(struct device *dev, void *fwnode) +{ + return dev_fwnode(dev) == fwnode; +} + +static void *device_connection_fwnode_match(struct device_connection *con) +{ + struct bus_type *bus; + struct device *dev; + + for (bus = generic_match_buses[0]; bus; bus++) { + dev = bus_find_device(bus, NULL, (void *)con->fwnode, + device_fwnode_match); + if (dev && !strncmp(dev_name(dev), con->id, strlen(con->id))) + return dev; + + put_device(dev); + } + return NULL; +} + /* This tries to find the device from the most common bus types by name. */ static void *generic_match(struct device_connection *con, int ep, void *data) { struct bus_type *bus; struct device *dev; + if (con->fwnode) + return device_connection_fwnode_match(con); + for (bus = generic_match_buses[0]; bus; bus++) { dev = bus_find_device_by_name(bus, NULL, con->endpoint[ep]); if (dev) -- 2.20.1