From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [2/3] usb: usb251xb: Create a ports field collector method From: Serge Semin Message-Id: <20190424211208.17499-3-fancer.lancer@gmail.com> Date: Thu, 25 Apr 2019 00:12:06 +0300 To: Richard Leitner , Greg Kroah-Hartman Cc: Serge Semin , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org List-ID: U2VlaW5nIHRoZSBwb3J0cyBmaWVsZCBjb2xsZWN0aW9uIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCBm b3VyIHRpbWVzIHBlcgpqdXN0IG9uZSBmdW5jdGlvbiwgaXQncyBiZXR0ZXIgdG8gaGF2ZSBhIGRl ZGljYXRlZCBtZXRob2QgcGVyZm9ybWluZwp0aGUgdGFzay4gTm90ZSB0aGF0IHRoaXMgZml4IGZp bHRlcnMgdGhlIHBvcnQgMCBvdXQgZnJvbSB0aGUgbGFuZXMKc3dhcHBpbmcgcHJvcGVydHkgdGhl IHNhbWUgd2F5IGFzIGl0IGhhcyBiZWVuIHByb2dyYW1tZWQgZm9yIHRoZSByZXN0Cm11bHRpLXBv cnRzIHByb3BlcnRpZXMuIEJ1dCB1bmxpa2UgdGhlIHJlc3Qgb2YgcG9ydHMgY29uZmlnIHJlZ2lz dGVycwp0aGUgQklUKDApIG9mIHRoZSBQb3J0IExhbmVzIFN3YXAgcmVnaXN0ZXIgcmVmZXJzIHRv IHRoZSBVcHN0cmVhbSBQb3J0CmxhbmVzIGludmVyc2lvbi4gVGhpcyBmYWN0IGhhc24ndCBiZWVu IGRvY3VtZW50ZWQgaW4gdGhlIGRyaXZlciBiaW5kaW5ncwpub3IgdGhlcmUgd2VyZSBhbnkgbWVu dGlvbmluZyBhYm91dCBwb3J0IDAgYmVpbmcgdHJlYXRlZCBhcyB1cHN0cmVhbQpwb3J0LiBMZXRz IHRoZW4gbGVhdmUgdGhpcyBmaXggYXMgaXMgZm9yIHRoZSBwcm9wZXJ0aWVzIHVuaWZpY2F0aW9u CmFuZCBjcmVhdGUgYW4gYWRkaXRpb25hbCAic3dhcC11cy1sYW5lcyIgaW4gdGhlIG5leHQgcGF0 Y2guCgpTaWduZWQtb2ZmLWJ5OiBTZXJnZSBTZW1pbiA8ZmFuY2VyLmxhbmNlckBnbWFpbC5jb20+ Ci0tLQogZHJpdmVycy91c2IvbWlzYy91c2IyNTF4Yi5jIHwgNzEgKysrKysrKysrKysrKystLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDQ1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNiMjUxeGIuYyBi L2RyaXZlcnMvdXNiL21pc2MvdXNiMjUxeGIuYwppbmRleCAwNDY4NDg0OWQ2ODMuLjRlZjM0ZGY5 NDhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2IyNTF4Yi5jCisrKyBiL2RyaXZl cnMvdXNiL21pc2MvdXNiMjUxeGIuYwpAQCAtMzMxLDE4ICszMzEsMzEgQEAgc3RhdGljIGludCB1 c2IyNTF4Yl9jb25uZWN0KHN0cnVjdCB1c2IyNTF4YiAqaHViKQogfQogCiAjaWZkZWYgQ09ORklH X09GCitzdGF0aWMgdm9pZCB1c2IyNTF4Yl9nZXRfcG9ydHNfZmllbGQoc3RydWN0IHVzYjI1MXhi ICpodWIsCisJCQkJICAgIGNvbnN0IGNoYXIgKnByb3BfbmFtZSwgdTggcG9ydF9jbnQsIHU4ICpm bGQpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gaHViLT5kZXY7CisJc3RydWN0IHByb3BlcnR5 ICpwcm9wOworCWNvbnN0IF9fYmUzMiAqcDsKKwl1MzIgcG9ydDsKKworCW9mX3Byb3BlcnR5X2Zv cl9lYWNoX3UzMihkZXYtPm9mX25vZGUsIHByb3BfbmFtZSwgcHJvcCwgcCwgcG9ydCkgeworCQlp ZiAoKHBvcnQgPj0gMSkgJiYgKHBvcnQgPD0gcG9ydF9jbnQpKQorCQkJKmZsZCB8PSBCSVQocG9y dCk7CisJCWVsc2UKKwkJCWRldl93YXJuKGRldiwgInBvcnQgJXUgZG9lc24ndCBleGlzdFxuIiwg cG9ydCk7CisJfQorfQorCiBzdGF0aWMgaW50IHVzYjI1MXhiX2dldF9vZmRhdGEoc3RydWN0IHVz YjI1MXhiICpodWIsCiAJCQkgICAgICAgc3RydWN0IHVzYjI1MXhiX2RhdGEgKmRhdGEpCiB7CiAJ c3RydWN0IGRldmljZSAqZGV2ID0gaHViLT5kZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9 IGRldi0+b2Zfbm9kZTsKLQlpbnQgbGVuLCBlcnIsIGk7Ci0JdTMyIHBvcnQsIHByb3BlcnR5X3Uz MiA9IDA7Ci0JY29uc3QgdTMyICpjcHJvcGVydHlfdTMyOworCWludCBsZW4sIGVycjsKKwl1MzIg cHJvcGVydHlfdTMyID0gMDsKIAljb25zdCBjaGFyICpjcHJvcGVydHlfY2hhcjsKIAljaGFyIHN0 cltVU0IyNTFYQl9TVFJJTkdfQlVGU0laRSAvIDJdOwotCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsK LQljb25zdCBfX2JlMzIgKnA7CiAKIAlpZiAoIW5wKSB7CiAJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGdldCBvZmRhdGFcbiIpOwpAQCAtNDQ0LDQ2ICs0NTcsMTYgQEAgc3RhdGljIGludCB1c2Iy NTF4Yl9nZXRfb2ZkYXRhKHN0cnVjdCB1c2IyNTF4YiAqaHViLAogCQlodWItPmNvbmZfZGF0YTMg fD0gQklUKDApOwogCiAJaHViLT5ub25fcmVtX2RldiA9IFVTQjI1MVhCX0RFRl9OT05fUkVNT1ZB QkxFX0RFVklDRVM7Ci0JY3Byb3BlcnR5X3UzMiA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm5vbi1y ZW1vdmFibGUtcG9ydHMiLCAmbGVuKTsKLQlpZiAoY3Byb3BlcnR5X3UzMiAmJiAobGVuIC8gc2l6 ZW9mKHUzMikpID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbGVuIC8gc2l6ZW9mKHUzMik7IGkr KykgewotCQkJdTMyIHBvcnQgPSBiZTMyX3RvX2NwdShjcHJvcGVydHlfdTMyW2ldKTsKLQotCQkJ aWYgKChwb3J0ID49IDEpICYmIChwb3J0IDw9IGRhdGEtPnBvcnRfY250KSkKLQkJCQlodWItPm5v bl9yZW1fZGV2IHw9IEJJVChwb3J0KTsKLQkJCWVsc2UKLQkJCQlkZXZfd2FybihkZXYsICJOUkQg cG9ydCAldSBkb2Vzbid0IGV4aXN0XG4iLAotCQkJCQlwb3J0KTsKLQkJfQotCX0KKwl1c2IyNTF4 Yl9nZXRfcG9ydHNfZmllbGQoaHViLCAibm9uLXJlbW92YWJsZS1wb3J0cyIsIGRhdGEtPnBvcnRf Y250LAorCQkJCSAmaHViLT5ub25fcmVtX2Rldik7CiAKIAlodWItPnBvcnRfZGlzYWJsZV9zcCA9 IFVTQjI1MVhCX0RFRl9QT1JUX0RJU0FCTEVfU0VMRjsKLQljcHJvcGVydHlfdTMyID0gb2ZfZ2V0 X3Byb3BlcnR5KG5wLCAic3AtZGlzYWJsZWQtcG9ydHMiLCAmbGVuKTsKLQlpZiAoY3Byb3BlcnR5 X3UzMiAmJiAobGVuIC8gc2l6ZW9mKHUzMikpID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbGVu IC8gc2l6ZW9mKHUzMik7IGkrKykgewotCQkJdTMyIHBvcnQgPSBiZTMyX3RvX2NwdShjcHJvcGVy dHlfdTMyW2ldKTsKLQotCQkJaWYgKChwb3J0ID49IDEpICYmIChwb3J0IDw9IGRhdGEtPnBvcnRf Y250KSkKLQkJCQlodWItPnBvcnRfZGlzYWJsZV9zcCB8PSBCSVQocG9ydCk7Ci0JCQllbHNlCi0J CQkJZGV2X3dhcm4oZGV2LCAiUERTIHBvcnQgJXUgZG9lc24ndCBleGlzdFxuIiwKLQkJCQkJcG9y dCk7Ci0JCX0KLQl9CisJdXNiMjUxeGJfZ2V0X3BvcnRzX2ZpZWxkKGh1YiwgInNwLWRpc2FibGVk LXBvcnRzIiwgZGF0YS0+cG9ydF9jbnQsCisJCQkJICZodWItPnBvcnRfZGlzYWJsZV9zcCk7CiAK IAlodWItPnBvcnRfZGlzYWJsZV9icCA9IFVTQjI1MVhCX0RFRl9QT1JUX0RJU0FCTEVfQlVTOwot CWNwcm9wZXJ0eV91MzIgPSBvZl9nZXRfcHJvcGVydHkobnAsICJicC1kaXNhYmxlZC1wb3J0cyIs ICZsZW4pOwotCWlmIChjcHJvcGVydHlfdTMyICYmIChsZW4gLyBzaXplb2YodTMyKSkgPiAwKSB7 Ci0JCWZvciAoaSA9IDA7IGkgPCBsZW4gLyBzaXplb2YodTMyKTsgaSsrKSB7Ci0JCQl1MzIgcG9y dCA9IGJlMzJfdG9fY3B1KGNwcm9wZXJ0eV91MzJbaV0pOwotCi0JCQlpZiAoKHBvcnQgPj0gMSkg JiYgKHBvcnQgPD0gZGF0YS0+cG9ydF9jbnQpKQotCQkJCWh1Yi0+cG9ydF9kaXNhYmxlX2JwIHw9 IEJJVChwb3J0KTsKLQkJCWVsc2UKLQkJCQlkZXZfd2FybihkZXYsICJQREIgcG9ydCAldSBkb2Vz bid0IGV4aXN0XG4iLAotCQkJCQlwb3J0KTsKLQkJfQotCX0KKwl1c2IyNTF4Yl9nZXRfcG9ydHNf ZmllbGQoaHViLCAiYnAtZGlzYWJsZWQtcG9ydHMiLCBkYXRhLT5wb3J0X2NudCwKKwkJCQkgJmh1 Yi0+cG9ydF9kaXNhYmxlX2JwKTsKIAogCWh1Yi0+bWF4X3Bvd2VyX3NwID0gVVNCMjUxWEJfREVG X01BWF9QT1dFUl9TRUxGOwogCWlmICghb2ZfcHJvcGVydHlfcmVhZF91MzIobnAsICJzcC1tYXgt dG90YWwtY3VycmVudC1taWNyb2FtcCIsCkBAIC01NDYsMTAgKzUyOSw4IEBAIHN0YXRpYyBpbnQg dXNiMjUxeGJfZ2V0X29mZGF0YShzdHJ1Y3QgdXNiMjUxeGIgKmh1YiwKIAkgKiByZWdpc3RlciBj b250cm9scyB0aGUgVVNCIERQL0RNIHNpZ25hbCBzd2FwcGluZyBmb3IgZWFjaCBwb3J0LgogCSAq LwogCWh1Yi0+cG9ydF9zd2FwID0gVVNCMjUxWEJfREVGX1BPUlRfU1dBUDsKLQlvZl9wcm9wZXJ0 eV9mb3JfZWFjaF91MzIobnAsICJzd2FwLWR4LWxhbmVzIiwgcHJvcCwgcCwgcG9ydCkgewotCQlp ZiAocG9ydCA8PSBkYXRhLT5wb3J0X2NudCkKLQkJCWh1Yi0+cG9ydF9zd2FwIHw9IEJJVChwb3J0 KTsKLQl9CisJdXNiMjUxeGJfZ2V0X3BvcnRzX2ZpZWxkKGh1YiwgInN3YXAtZHgtbGFuZXMiLCBk YXRhLT5wb3J0X2NudCwKKwkJCQkgJmh1Yi0+cG9ydF9zd2FwKTsKIAogCS8qIFRoZSBmb2xsb3dp bmcgcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IG5vdCBleHBvc2VkIHRvIGRldmljZXRyZWUsIGJ1 dAogCSAqIG1heSBiZSBhcyBzb29uIGFzIG5lZWRlZC4K 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 X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6117C282CE for ; Wed, 24 Apr 2019 21:13:58 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B361B217D7 for ; Wed, 24 Apr 2019 21:13:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="PmI8O8VN" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388321AbfDXVNl (ORCPT ); Wed, 24 Apr 2019 17:13:41 -0400 Received: from mail-lf1-f68.google.com ([209.85.167.68]:46090 "EHLO mail-lf1-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727791AbfDXVNk (ORCPT ); Wed, 24 Apr 2019 17:13:40 -0400 Received: by mail-lf1-f68.google.com with SMTP id k18so15781117lfj.13; Wed, 24 Apr 2019 14:13:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GjKyhYhNibj/Dd5BoaRj7nvklTeCLpfBWZvTQSPTpeA=; b=PmI8O8VN+zj2aIXDBML98fem50ho0MZwWSeTzo4lz1PzB+eywd5mm0BPgHGzaHXUn4 QCSj0TqX6alT3I18dTeRZUvmQa7UZEfE1JPyyjhQbhw38Loz3tuGB8Ja1nY+TevaRDJo s1QsYUFJC8cjaiKg1rEohrod14HjDY/s10cuQ/jBVM0qfKIA0i/UyI3JB4tJrhkG9+ds He4Dc2AjsulpAFXQrCEj5KQPbD0iDPhjaGsTWkaJvQGpKvg4vC3BNdyWjB1EiT3yMa6r PvdHBtin1OlVlEKNL3DZuOteaLTrqwy1SOiHduhUEo4w/bil5/NWZ1mUCnd/BCzghXMw eywA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GjKyhYhNibj/Dd5BoaRj7nvklTeCLpfBWZvTQSPTpeA=; b=EGeOJGCMZhMMe1pmavw+NvnQjiDhetbC2Mce3qm35wLiQ8y1EpVm/Mm6dQ1ajBgaCf TJK4I8TvRSzuoxq8um0izcT8n3Sa5hxyzYoOJerk6L+Hzw1Y1FwdojwD+/tsx3tV0s2j N5Ua38gECbNs4/U8KXJgWj3IBvDEve6FCf6sg4lLZShHHHIvu/2Xmi/FRVOg6Ms3+79g 71FskkutyiUif4sRa9Tjaufv8H5caWXVINp8+jEbGsTxC7B7CMCeUfuYyWF/qLH6Q/1h tUPoMps1S66RYMw03z59FFgYAacPIEfj5BDYcRAyit30kARjVfSuwt3NFFx/lezsb+on lxIg== X-Gm-Message-State: APjAAAV8nSfctRg7yyUNIM2kmUMhcZxQFZ4cU9v9PlLRc9vtBKUGyWkg vnMHoh8twjUM4Z2v3H5mLSY= X-Google-Smtp-Source: APXvYqzH8hgPfmnPoksy7y4d7KScZ7S4cAAb7U0FcZgnSE4YGpXtyOxoHCQzvTBRlOE/u1yKAcyj7A== X-Received: by 2002:ac2:5181:: with SMTP id u1mr3728311lfi.59.1556140416763; Wed, 24 Apr 2019 14:13:36 -0700 (PDT) Received: from localhost.localdomain ([5.164.240.123]) by smtp.gmail.com with ESMTPSA id m3sm4540248lfh.94.2019.04.24.14.13.35 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Apr 2019 14:13:36 -0700 (PDT) From: Serge Semin To: Richard Leitner , Greg Kroah-Hartman Cc: Serge Semin , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/3] usb: usb251xb: Create a ports field collector method Date: Thu, 25 Apr 2019 00:12:06 +0300 Message-Id: <20190424211208.17499-3-fancer.lancer@gmail.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190424211208.17499-1-fancer.lancer@gmail.com> References: <20190424211208.17499-1-fancer.lancer@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Message-ID: <20190424211206.qxbk0lZerDaT9S5kWkKTS8xS5M2b8Cu0VHrRui5ULgw@z> Seeing the ports field collection functionality is used four times per just one function, it's better to have a dedicated method performing the task. Note that this fix filters the port 0 out from the lanes swapping property the same way as it has been programmed for the rest multi-ports properties. But unlike the rest of ports config registers the BIT(0) of the Port Lanes Swap register refers to the Upstream Port lanes inversion. This fact hasn't been documented in the driver bindings nor there were any mentioning about port 0 being treated as upstream port. Lets then leave this fix as is for the properties unification and create an additional "swap-us-lanes" in the next patch. Signed-off-by: Serge Semin --- drivers/usb/misc/usb251xb.c | 71 ++++++++++++++----------------------- 1 file changed, 26 insertions(+), 45 deletions(-) diff --git a/drivers/usb/misc/usb251xb.c b/drivers/usb/misc/usb251xb.c index 04684849d683..4ef34df948ad 100644 --- a/drivers/usb/misc/usb251xb.c +++ b/drivers/usb/misc/usb251xb.c @@ -331,18 +331,31 @@ static int usb251xb_connect(struct usb251xb *hub) } #ifdef CONFIG_OF +static void usb251xb_get_ports_field(struct usb251xb *hub, + const char *prop_name, u8 port_cnt, u8 *fld) +{ + struct device *dev = hub->dev; + struct property *prop; + const __be32 *p; + u32 port; + + of_property_for_each_u32(dev->of_node, prop_name, prop, p, port) { + if ((port >= 1) && (port <= port_cnt)) + *fld |= BIT(port); + else + dev_warn(dev, "port %u doesn't exist\n", port); + } +} + static int usb251xb_get_ofdata(struct usb251xb *hub, struct usb251xb_data *data) { struct device *dev = hub->dev; struct device_node *np = dev->of_node; - int len, err, i; - u32 port, property_u32 = 0; - const u32 *cproperty_u32; + int len, err; + u32 property_u32 = 0; const char *cproperty_char; char str[USB251XB_STRING_BUFSIZE / 2]; - struct property *prop; - const __be32 *p; if (!np) { dev_err(dev, "failed to get ofdata\n"); @@ -444,46 +457,16 @@ static int usb251xb_get_ofdata(struct usb251xb *hub, hub->conf_data3 |= BIT(0); hub->non_rem_dev = USB251XB_DEF_NON_REMOVABLE_DEVICES; - cproperty_u32 = of_get_property(np, "non-removable-ports", &len); - if (cproperty_u32 && (len / sizeof(u32)) > 0) { - for (i = 0; i < len / sizeof(u32); i++) { - u32 port = be32_to_cpu(cproperty_u32[i]); - - if ((port >= 1) && (port <= data->port_cnt)) - hub->non_rem_dev |= BIT(port); - else - dev_warn(dev, "NRD port %u doesn't exist\n", - port); - } - } + usb251xb_get_ports_field(hub, "non-removable-ports", data->port_cnt, + &hub->non_rem_dev); hub->port_disable_sp = USB251XB_DEF_PORT_DISABLE_SELF; - cproperty_u32 = of_get_property(np, "sp-disabled-ports", &len); - if (cproperty_u32 && (len / sizeof(u32)) > 0) { - for (i = 0; i < len / sizeof(u32); i++) { - u32 port = be32_to_cpu(cproperty_u32[i]); - - if ((port >= 1) && (port <= data->port_cnt)) - hub->port_disable_sp |= BIT(port); - else - dev_warn(dev, "PDS port %u doesn't exist\n", - port); - } - } + usb251xb_get_ports_field(hub, "sp-disabled-ports", data->port_cnt, + &hub->port_disable_sp); hub->port_disable_bp = USB251XB_DEF_PORT_DISABLE_BUS; - cproperty_u32 = of_get_property(np, "bp-disabled-ports", &len); - if (cproperty_u32 && (len / sizeof(u32)) > 0) { - for (i = 0; i < len / sizeof(u32); i++) { - u32 port = be32_to_cpu(cproperty_u32[i]); - - if ((port >= 1) && (port <= data->port_cnt)) - hub->port_disable_bp |= BIT(port); - else - dev_warn(dev, "PDB port %u doesn't exist\n", - port); - } - } + usb251xb_get_ports_field(hub, "bp-disabled-ports", data->port_cnt, + &hub->port_disable_bp); hub->max_power_sp = USB251XB_DEF_MAX_POWER_SELF; if (!of_property_read_u32(np, "sp-max-total-current-microamp", @@ -546,10 +529,8 @@ static int usb251xb_get_ofdata(struct usb251xb *hub, * register controls the USB DP/DM signal swapping for each port. */ hub->port_swap = USB251XB_DEF_PORT_SWAP; - of_property_for_each_u32(np, "swap-dx-lanes", prop, p, port) { - if (port <= data->port_cnt) - hub->port_swap |= BIT(port); - } + usb251xb_get_ports_field(hub, "swap-dx-lanes", data->port_cnt, + &hub->port_swap); /* The following parameters are currently not exposed to devicetree, but * may be as soon as needed. -- 2.21.0