From patchwork Thu Jun 11 19:10:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 187817 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp1667390ilo; Thu, 11 Jun 2020 12:10:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwh3dS4bXiveTjW2A/JIjYEBsKKg/gm8uFbIYCbEGGFOYoo1irlSVWgFK0VWS0YFjO4Pt5Q X-Received: by 2002:a50:9eaf:: with SMTP id a44mr8319602edf.121.1591902611230; Thu, 11 Jun 2020 12:10:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591902611; cv=none; d=google.com; s=arc-20160816; b=TyUS59xaj1su/AqQXHgBdVRt+ZVlIdsFHmxj5gLkPBBpyC6pLWBA8WT2w+TyBDfVoO 4CyqtZvW3sOFcHxKNaPMYpkTd7S4Ug2CE2SuHt9kbGJZZ2ir8DSSAQyt9eYK7Y+h9YSP rdltavVWZCqUTAl822lrC2V7hl+EchixkNfLTggMvPF1LN6x/4QYGt2rvia7xKeHq2qr miHK7ILj3BMdyPlfUxrhMHQH4rdoZtCDdlww1jgSuDFvphjVduXv8xnaerjWYIaWyIt+ NPUuL/VgxUXN58tEF7mMUG69EKEQKAPZDUm0MofXtWIWHcLv6EayLoq9u/NDvsLXrYMO RtNg== 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 :message-id:date:subject:cc:to:from:dkim-signature; bh=iGxM9oeWSFmTnHRAP5M0/3Z8ZubAimXiNT2ov5rSvk0=; b=weG/Lp/B+a1BG7WSwlRPIm7HVTptHbeK0aZg7AMOUX34Q4VZd5bMNcM3KgP6AAYMGK ZcS9FoKessxFfqyTFJrmNZpKH0Y0G0lMK4s/4aD8uUMEemYTRR5TAvQa6ftNW0Npxk6C 3ZRfqAWlGjBpggK1JF7a7U3yCGCyxjwSWVnJKl4SYwMGeI4yq+FgefCO4spV7ButzFLX z6MveQwuoP+XZxs8U3ATxZm7G0DVlxy8SDiO9gMAE0yJx7EfX/EPOi/1WoqlKlwNWeDL mW0EixDVCTczDgXQ8du3f+UA69yumzL+DccYHY3+rabNzX5FX8KKy3GkMpNB0HzpbhVh z8SQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=diFA3Bva; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id u24si2575807ejo.396.2020.06.11.12.10.10; Thu, 11 Jun 2020 12:10:11 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=diFA3Bva; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728277AbgFKTKI (ORCPT + 6 others); Thu, 11 Jun 2020 15:10:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726159AbgFKTKI (ORCPT ); Thu, 11 Jun 2020 15:10:08 -0400 Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [IPv6:2a00:1450:4864:20::342]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6ECC1C08C5C2 for ; Thu, 11 Jun 2020 12:10:07 -0700 (PDT) Received: by mail-wm1-x342.google.com with SMTP id q25so6105646wmj.0 for ; Thu, 11 Jun 2020 12:10:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=iGxM9oeWSFmTnHRAP5M0/3Z8ZubAimXiNT2ov5rSvk0=; b=diFA3BvagTNeO29cJA/MFaJN3ORs7k8Dlv9pZbiCLGn6mOu421axr6ixrHd4UZ7Gj9 UKGX/bleAhenwpoDYKcWli5MzlzWdtBI8GPrmoSQsdAtYCL8us4N3f34SE80Ew+uNnoM anYEhSyfCiUL7Q0DjBoDe0hx9Yjq2EL2qXL+BZRA+XuL8OmNvGww1ltny41Tq0AVu1LA 7TbIpzF+8gfFhuyzeCggdvNeOT3d6BeAjQwwjWlrwunnvK3kKk/+lbSRis/2z4lQBLhP LM5VFdKsXNKKjbhVjeM5KxSZ57JYHsz3nPrfNrpOYgGlQ5+1ePFuRKnru/+cvljOHH3E Y21Q== 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:mime-version :content-transfer-encoding; bh=iGxM9oeWSFmTnHRAP5M0/3Z8ZubAimXiNT2ov5rSvk0=; b=KXUt547F8SKZ/9wScnnDqobx6ePzeWfKxx8vLGDb5kS4mJ/CaDFa6iCeyc/B2kP5Ih knORnHhVwOBmbuzd+tSzvNp6NFDhI0wwkQsxzJLfECgR9It023HYkz1PYdILO1bkxMUK l5IpD2eyuhfjSxqsx0hZoKFlqoc9P5cq1yJcWaAwWiVlHupn76rv1ke193QDZmaR0KSQ gL1rShG2eR+QZKem369PR/Amy4RfY9nyU1yIDFFsnWXyklUW9wnYJ3TE+UcrGKdKq8m8 td8HywN0p9AdzgO+5g6ykMffhrX24H3qdVWhGBRHATfvczxUQlJUCGdWv3Dg6P30KxX1 z/uw== X-Gm-Message-State: AOAM531QTHIe8qVSHJaudfHgupDjDjULAuLAiNKovJNnihb8MjQi8gX6 +L+mZ+rTgaOGnl0E007+ujPFXg== X-Received: by 2002:a1c:bd84:: with SMTP id n126mr9007532wmf.149.1591902605771; Thu, 11 Jun 2020 12:10:05 -0700 (PDT) Received: from localhost.localdomain ([2.27.167.101]) by smtp.gmail.com with ESMTPSA id 128sm5658097wme.39.2020.06.11.12.10.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 12:10:05 -0700 (PDT) From: Lee Jones To: andy.shevchenko@gmail.com, michael@walle.cc, robh+dt@kernel.org, broonie@kernel.org, devicetree@vger.kernel.org, linus.walleij@linaro.org, linux@roeck-us.net, andriy.shevchenko@linux.intel.com, robin.murphy@arm.com, gregkh@linuxfoundation.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Lee Jones Subject: [PATCH v2 1/3] mfd: core: Make a best effort attempt to match devices with the correct of_nodes Date: Thu, 11 Jun 2020 20:10:00 +0100 Message-Id: <20200611191002.2256570-1-lee.jones@linaro.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Currently, when a child platform device (sometimes referred to as a sub-device) is registered via the Multi-Functional Device (MFD) API, the framework attempts to match the newly registered platform device with its associated Device Tree (OF) node. Until now, the device has been allocated the first node found with an identical OF compatible string. Unfortunately, if there are, say for example '3' devices which are to be handled by the same driver and therefore have the same compatible string, each of them will be allocated a pointer to the *first* node. An example Device Tree entry might look like this: mfd_of_test { compatible = "mfd,of-test-parent"; #address-cells = <0x02>; #size-cells = <0x02>; child@aaaaaaaaaaaaaaaa { compatible = "mfd,of-test-child"; reg = <0xaaaaaaaa 0xaaaaaaaa 0 0x11>, <0xbbbbbbbb 0xbbbbbbbb 0 0x22>; }; child@cccccccc { compatible = "mfd,of-test-child"; reg = <0x00000000 0xcccccccc 0 0x33>; }; child@dddddddd00000000 { compatible = "mfd,of-test-child"; reg = <0xdddddddd 0x00000000 0 0x44>; }; }; When used with example sub-device registration like this: static const struct mfd_cell mfd_of_test_cell[] = { OF_MFD_CELL("mfd-of-test-child", NULL, NULL, 0, 0, "mfd,of-test-child"), OF_MFD_CELL("mfd-of-test-child", NULL, NULL, 0, 1, "mfd,of-test-child"), OF_MFD_CELL("mfd-of-test-child", NULL, NULL, 0, 2, "mfd,of-test-child") }; ... the current implementation will result in all devices being allocated the first OF node found containing a matching compatible string: [0.712511] mfd-of-test-child mfd-of-test-child.0: Probing platform device: 0 [0.712710] mfd-of-test-child mfd-of-test-child.0: Using OF node: child@aaaaaaaaaaaaaaaa [0.713033] mfd-of-test-child mfd-of-test-child.1: Probing platform device: 1 [0.713381] mfd-of-test-child mfd-of-test-child.1: Using OF node: child@aaaaaaaaaaaaaaaa [0.713691] mfd-of-test-child mfd-of-test-child.2: Probing platform device: 2 [0.713889] mfd-of-test-child mfd-of-test-child.2: Using OF node: child@aaaaaaaaaaaaaaaa After this patch each device will be allocated a unique OF node: [0.712511] mfd-of-test-child mfd-of-test-child.0: Probing platform device: 0 [0.712710] mfd-of-test-child mfd-of-test-child.0: Using OF node: child@aaaaaaaaaaaaaaaa [0.713033] mfd-of-test-child mfd-of-test-child.1: Probing platform device: 1 [0.713381] mfd-of-test-child mfd-of-test-child.1: Using OF node: child@cccccccc [0.713691] mfd-of-test-child mfd-of-test-child.2: Probing platform device: 2 [0.713889] mfd-of-test-child mfd-of-test-child.2: Using OF node: child@dddddddd00000000 Which is fine if all OF nodes are identical. However if we wish to apply an attribute to particular device, we really need to ensure the correct OF node will be associated with the device containing the correct address. We accomplish this by matching the device's address expressed in DT with one provided during sub-device registration. Like this: static const struct mfd_cell mfd_of_test_cell[] = { OF_MFD_CELL_REG("mfd-of-test-child", NULL, NULL, 0, 1, "mfd,of-test-child", 0xdddddddd00000000), OF_MFD_CELL_REG("mfd-of-test-child", NULL, NULL, 0, 2, "mfd,of-test-child", 0xaaaaaaaaaaaaaaaa), OF_MFD_CELL_REG("mfd-of-test-child", NULL, NULL, 0, 3, "mfd,of-test-child", 0x00000000cccccccc) }; This will ensure a specific device (designated here using the platform_ids; 1, 2 and 3) is matched with a particular OF node: [0.712511] mfd-of-test-child mfd-of-test-child.0: Probing platform device: 0 [0.712710] mfd-of-test-child mfd-of-test-child.0: Using OF node: child@dddddddd00000000 [0.713033] mfd-of-test-child mfd-of-test-child.1: Probing platform device: 1 [0.713381] mfd-of-test-child mfd-of-test-child.1: Using OF node: child@aaaaaaaaaaaaaaaa [0.713691] mfd-of-test-child mfd-of-test-child.2: Probing platform device: 2 [0.713889] mfd-of-test-child mfd-of-test-child.2: Using OF node: child@cccccccc This implementation is still not infallible, hence the mention of "best effort" in the commit subject. Since we have not *insisted* on the existence of 'reg' properties (in some scenarios they just do not make sense) and no device currently uses the new 'of_reg' attribute, we have to make an on-the-fly judgement call whether to associate the OF node anyway. Which we do in cases where parent drivers haven't specified a particular OF node to match to. So there is a *slight* possibility of the following result (note: the implementation here is convoluted, but it shows you one means by which this process can still break): /* * First entry will match to the first OF node with matching compatible * Second will fail, since the first took its OF node and is no longer available * Third will succeed */ static const struct mfd_cell mfd_of_test_cell[] = { OF_MFD_CELL("mfd-of-test-child", NULL, NULL, 0, 1, "mfd,of-test-child"), OF_MFD_CELL_REG("mfd-of-test-child", NULL, NULL, 0, 2, "mfd,of-test-child", 0xaaaaaaaaaaaaaaaa), OF_MFD_CELL_REG("mfd-of-test-child", NULL, NULL, 0, 3, "mfd,of-test-child", 0x00000000cccccccc) }; The result: [0.753869] mfd-of-test-parent mfd_of_test: Registering 3 devices [0.756597] mfd-of-test-child: Failed to locate of_node [id: 2] [0.759999] mfd-of-test-child mfd-of-test-child.1: Probing platform device: 1 [0.760314] mfd-of-test-child mfd-of-test-child.1: Using OF node: child@aaaaaaaaaaaaaaaa [0.760908] mfd-of-test-child mfd-of-test-child.2: Probing platform device: 2 [0.761183] mfd-of-test-child mfd-of-test-child.2: No OF node associated with this device [0.761621] mfd-of-test-child mfd-of-test-child.3: Probing platform device: 3 [0.761899] mfd-of-test-child mfd-of-test-child.3: Using OF node: child@cccccccc We could code around this with some pre-parsing semantics, but the added complexity required to cover each and every corner-case is not justified. Merely patching the current failing (via this patch) is already working with some pretty small corner-cases. Other issues should be patched in the parent drivers which can be achieved simply by implementing OF_MFD_CELL_REG(). Signed-off-by: Lee Jones --- Changelog: v1 => v2: * Simply return -EAGAIN if node is already in use * Allow for valid of_reg=0 by introducing use_of_reg boolean flag * Split helpers out into separate patch drivers/mfd/mfd-core.c | 99 +++++++++++++++++++++++++++++++++++----- include/linux/mfd/core.h | 10 ++++ 2 files changed, 97 insertions(+), 12 deletions(-) -- 2.25.1 diff --git a/drivers/mfd/mfd-core.c b/drivers/mfd/mfd-core.c index e831e733b38cf..120803717b828 100644 --- a/drivers/mfd/mfd-core.c +++ b/drivers/mfd/mfd-core.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -17,8 +18,17 @@ #include #include #include +#include #include +static LIST_HEAD(mfd_of_node_list); + +struct mfd_of_node_entry { + struct list_head list; + struct device *dev; + struct device_node *np; +}; + static struct device_type mfd_dev_type = { .name = "mfd_device", }; @@ -107,6 +117,54 @@ static inline void mfd_acpi_add_device(const struct mfd_cell *cell, } #endif +static int mfd_match_of_node_to_dev(struct platform_device *pdev, + struct device_node *np, + const struct mfd_cell *cell) +{ + struct mfd_of_node_entry *of_entry; + const __be32 *reg; + u64 of_node_addr; + + /* Skip devices 'disabled' by Device Tree */ + if (!of_device_is_available(np)) + return -ENODEV; + + /* Skip if OF node has previously been allocated to a device */ + list_for_each_entry(of_entry, &mfd_of_node_list, list) + if (of_entry->np == np) + return -EAGAIN; + + if (!cell->use_of_reg) + /* No of_reg defined - allocate first free compatible match */ + goto allocate_of_node; + + /* We only care about each node's first defined address */ + reg = of_get_address(np, 0, NULL, NULL); + if (!reg) + /* OF node does not contatin a 'reg' property to match to */ + return -EAGAIN; + + of_node_addr = of_read_number(reg, of_n_addr_cells(np)); + + if (cell->of_reg != of_node_addr) + /* No match */ + return -EAGAIN; + +allocate_of_node: + of_entry = kzalloc(sizeof(*of_entry), GFP_KERNEL); + if (!of_entry) + return -ENOMEM; + + of_entry->dev = &pdev->dev; + of_entry->np = np; + list_add_tail(&of_entry->list, &mfd_of_node_list); + + pdev->dev.of_node = np; + pdev->dev.fwnode = &np->fwnode; + + return 0; +} + static int mfd_add_device(struct device *parent, int id, const struct mfd_cell *cell, struct resource *mem_base, @@ -115,6 +173,7 @@ static int mfd_add_device(struct device *parent, int id, struct resource *res; struct platform_device *pdev; struct device_node *np = NULL; + struct mfd_of_node_entry *of_entry, *tmp; int ret = -ENOMEM; int platform_id; int r; @@ -149,19 +208,22 @@ static int mfd_add_device(struct device *parent, int id, if (ret < 0) goto fail_res; - if (parent->of_node && cell->of_compatible) { + if (IS_ENABLED(CONFIG_OF) && parent->of_node && cell->of_compatible) { for_each_child_of_node(parent->of_node, np) { if (of_device_is_compatible(np, cell->of_compatible)) { - if (!of_device_is_available(np)) { - /* Ignore disabled devices error free */ - ret = 0; + ret = mfd_match_of_node_to_dev(pdev, np, cell); + if (ret == -EAGAIN) + continue; + if (ret) goto fail_alias; - } - pdev->dev.of_node = np; - pdev->dev.fwnode = &np->fwnode; + break; } } + + if (!pdev->dev.of_node) + pr_warn("%s: Failed to locate of_node [id: %d]\n", + cell->name, platform_id); } mfd_acpi_add_device(cell, pdev); @@ -170,13 +232,13 @@ static int mfd_add_device(struct device *parent, int id, ret = platform_device_add_data(pdev, cell->platform_data, cell->pdata_size); if (ret) - goto fail_alias; + goto fail_of_entry; } if (cell->properties) { ret = platform_device_add_properties(pdev, cell->properties); if (ret) - goto fail_alias; + goto fail_of_entry; } for (r = 0; r < cell->num_resources; r++) { @@ -213,18 +275,18 @@ static int mfd_add_device(struct device *parent, int id, if (has_acpi_companion(&pdev->dev)) { ret = acpi_check_resource_conflict(&res[r]); if (ret) - goto fail_alias; + goto fail_of_entry; } } } ret = platform_device_add_resources(pdev, res, cell->num_resources); if (ret) - goto fail_alias; + goto fail_of_entry; ret = platform_device_add(pdev); if (ret) - goto fail_alias; + goto fail_of_entry; if (cell->pm_runtime_no_callbacks) pm_runtime_no_callbacks(&pdev->dev); @@ -233,6 +295,12 @@ static int mfd_add_device(struct device *parent, int id, return 0; +fail_of_entry: + list_for_each_entry_safe(of_entry, tmp, &mfd_of_node_list, list) + if (of_entry->dev == &pdev->dev) { + list_del(&of_entry->list); + kfree(of_entry); + } fail_alias: regulator_bulk_unregister_supply_alias(&pdev->dev, cell->parent_supplies, @@ -287,6 +355,7 @@ static int mfd_remove_devices_fn(struct device *dev, void *data) { struct platform_device *pdev; const struct mfd_cell *cell; + struct mfd_of_node_entry *of_entry, *tmp; if (dev->type != &mfd_dev_type) return 0; @@ -297,6 +366,12 @@ static int mfd_remove_devices_fn(struct device *dev, void *data) regulator_bulk_unregister_supply_alias(dev, cell->parent_supplies, cell->num_parent_supplies); + list_for_each_entry_safe(of_entry, tmp, &mfd_of_node_list, list) + if (of_entry->dev == dev) { + list_del(&of_entry->list); + kfree(of_entry); + } + kfree(cell); platform_device_unregister(pdev); diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index d01d1299e49dc..a148b907bb7f1 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -78,6 +78,16 @@ struct mfd_cell { */ const char *of_compatible; + /* + * Address as defined in Device Tree. Used to compement 'of_compatible' + * (above) when matching OF nodes with devices that have identical + * compatible strings + */ + const u64 of_reg; + + /* Set to 'true' to use 'of_reg' (above) - allows for of_reg=0 */ + bool use_of_reg; + /* Matches ACPI */ const struct mfd_cell_acpi_match *acpi_match; From patchwork Thu Jun 11 19:10:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 187818 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp1667583ilo; Thu, 11 Jun 2020 12:10:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz6wLQ/iwvTORcHVu3wkCFvsiRMVAY+LiHot9DiTeIYEZYfMegU+B7iuuaAC/PYp+l62ELD X-Received: by 2002:a17:906:b097:: with SMTP id x23mr9571908ejy.227.1591902627167; Thu, 11 Jun 2020 12:10:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591902627; cv=none; d=google.com; s=arc-20160816; b=awjWPrREidB2p3RwBwJ/ST5N9uFHbm9ezg2/iPWDYvm1Yh6p+GYsTruza9UOA4BDK8 vfcS2ROXxaUyjRV4u4IBz/e9kKphusxuMfYBpicSKHweBcrIkIL0iYAa/TW9VakCJkyG Deg9QxH0CzpXd94aSNnqXIVXMAu5yZYVhrqijn8OtqhvndBDNLELI5tfcvPgrZEqC4y+ WI2AU7H57OdnTGIPbLkfkZXE2Ct+CJtX3WXK2oS7Fp2mHWS30A3ZuU81yoO33wA87etd c2ooIJlEcKy1lFU/f5cVFc83GnAFvwHFwvn4bRALEpOsvYO5YPAckMBS740EwgjDMiAx 7r8Q== 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 :dkim-signature; bh=IDjXCIQ6oy9AG2/pAkYufwb6REFjjpJ4B8gnt4Zt3Qc=; b=XGeEBwsDK9ycotBnsm3h2ETp0hp8PrGWyI0EtRjWvWemqiKr6HYnuEJro9nvIKji7Y WGlXw0NQVB91fU8c4h8l8+G1nAJzrknqAlOElsCCcy/cC/vW9AWlBbJZ/dCQaigEeGWi Fz2gPppquEuaBEwB90Pzu6kJ9BeWmUbAWkpHsNjnjGt5fGpxbuAqInB7hqJFgOi2WVMG +rjU6skyG7GzWt7ncDj1jZriIiT2O9IhcfXLGNUYqGTHxhwXgR+qMSl5gX7O82xJErDo O1TAW5rTq36GfaLJarhE75GEyOosGu3gritmH/5ADdaoS4TuUSBTQcWWfWW0Oz5DXgF3 ssOg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=roxDTnsx; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dg18si2026458edb.211.2020.06.11.12.10.26; Thu, 11 Jun 2020 12:10:27 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=roxDTnsx; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728092AbgFKTKY (ORCPT + 6 others); Thu, 11 Jun 2020 15:10:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46886 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726808AbgFKTKX (ORCPT ); Thu, 11 Jun 2020 15:10:23 -0400 Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E4CCEC08C5C1 for ; Thu, 11 Jun 2020 12:10:22 -0700 (PDT) Received: by mail-wr1-x442.google.com with SMTP id x13so7314031wrv.4 for ; Thu, 11 Jun 2020 12:10:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IDjXCIQ6oy9AG2/pAkYufwb6REFjjpJ4B8gnt4Zt3Qc=; b=roxDTnsx93wtEbhdmNp/ObyGhmi+f3+VAw9dB/+c4wPouQTJejpLzI43QCaztDmC76 FsQYssZM6YdWtBpc/xye5/PPeT9fkympjTFzq2LlJzFpQWjy/NMhLZLRqNmIAwuSLdl+ 0XyU6ubyiAgi5zkeNVhRLVnIPobMvU+jyMKAt+oGBme/DkkLKL5A6GncPcRLcHPI6JpO KXBhng/PcNI/BBcMbs+RAD45GuBtOZcICXDRZ2RqV1cnEsgS+X9K1K3nUB5XHYCioiG5 3ARROCFXZ4ay8C1CJncLXslWG6uk2W3/pf6uTssMvCu6AoA8e3vjPGw7MSJ8FkpWN1At ufhQ== 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=IDjXCIQ6oy9AG2/pAkYufwb6REFjjpJ4B8gnt4Zt3Qc=; b=saQ9uoVefxX/QrXVI8gACFlsKRzm+Z/NFG5Hlyn+R8pD2X4fPzURRjZtKQCGXqCv1m iYVA1xcS1IEdTS/hmn9a/dbkXAW9X0+NeidUXK95OTALdCahw7TSc3KBx8w9Lg3Ren8c HzFW04bRAHd0aOwHs66u0P/n/h6JrfsxeqEOz9CPDqfWqNJ1cx4q5jg0iZ88vNq0mVMH Tb8ZFOwdDgt6000cvBg66c6TJLbt6tCWYZDIpZarcipeHM17Fd8Nsvsw2ltjPxHn7olA 8juy02zR0QwkJogIDFtIf7PnH/V/J1i9zKFr36y/ZR9PSqjP19t8L6rNbf3LHtmljgBd /5uA== X-Gm-Message-State: AOAM530s0lQa0p340O5GAfIZgvXcFnQK/L4IjEJCkbRNZpiQ4mD0KIPe xcQRuN5Bvx+VLrJF89BMdNN5SQ== X-Received: by 2002:a5d:4008:: with SMTP id n8mr10771319wrp.82.1591902621670; Thu, 11 Jun 2020 12:10:21 -0700 (PDT) Received: from localhost.localdomain ([2.27.167.101]) by smtp.gmail.com with ESMTPSA id 128sm5658097wme.39.2020.06.11.12.10.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 12:10:20 -0700 (PDT) From: Lee Jones To: andy.shevchenko@gmail.com, michael@walle.cc, robh+dt@kernel.org, broonie@kernel.org, devicetree@vger.kernel.org, linus.walleij@linaro.org, linux@roeck-us.net, andriy.shevchenko@linux.intel.com, robin.murphy@arm.com, gregkh@linuxfoundation.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Lee Jones Subject: [PATCH v2 2/3] mfd: core: Fix formatting of MFD helpers Date: Thu, 11 Jun 2020 20:10:01 +0100 Message-Id: <20200611191002.2256570-2-lee.jones@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200611191002.2256570-1-lee.jones@linaro.org> References: <20200611191002.2256570-1-lee.jones@linaro.org> MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Remove unnecessary '\'s and leading tabs. This will help to clean-up future diffs when subsequent changes are made. Hint: The aforementioned changes follow this patch. Signed-off-by: Lee Jones --- include/linux/mfd/core.h | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) -- 2.25.1 diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index a148b907bb7f1..ae1c6f90388ba 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -26,20 +26,20 @@ .id = (_id), \ } -#define OF_MFD_CELL(_name, _res, _pdata, _pdsize,_id, _compat) \ - MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, NULL) \ +#define OF_MFD_CELL(_name, _res, _pdata, _pdsize,_id, _compat) \ + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, NULL) -#define ACPI_MFD_CELL(_name, _res, _pdata, _pdsize, _id, _match) \ - MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, _match) \ +#define ACPI_MFD_CELL(_name, _res, _pdata, _pdsize, _id, _match) \ + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, _match) -#define MFD_CELL_BASIC(_name, _res, _pdata, _pdsize, _id) \ - MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, NULL) \ +#define MFD_CELL_BASIC(_name, _res, _pdata, _pdsize, _id) \ + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, NULL) -#define MFD_CELL_RES(_name, _res) \ - MFD_CELL_ALL(_name, _res, NULL, 0, 0, NULL, NULL) \ +#define MFD_CELL_RES(_name, _res) \ + MFD_CELL_ALL(_name, _res, NULL, 0, 0, NULL, NULL) -#define MFD_CELL_NAME(_name) \ - MFD_CELL_ALL(_name, NULL, NULL, 0, 0, NULL, NULL) \ +#define MFD_CELL_NAME(_name) \ + MFD_CELL_ALL(_name, NULL, NULL, 0, 0, NULL, NULL) struct irq_domain; struct property_entry; From patchwork Thu Jun 11 19:10:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lee Jones X-Patchwork-Id: 187819 Delivered-To: patch@linaro.org Received: by 2002:a92:cf06:0:0:0:0:0 with SMTP id c6csp1667606ilo; Thu, 11 Jun 2020 12:10:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxUnXgP+xSwJi39nP2K6ROCdBygEe/KqKlJb5A1T5xjDfC2rZjHp2YgJsCtdksdzNHTB3hn X-Received: by 2002:a50:b2e1:: with SMTP id p88mr8408518edd.198.1591902628942; Thu, 11 Jun 2020 12:10:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591902628; cv=none; d=google.com; s=arc-20160816; b=Kuj+v3PibaN70hBKAIwMUMlzSxKdfHERUrGqX0F3n78UMT0z1AcUwS60pYpJQRG41I OnEd5kGQpM4qhh2OFtO7SXc3H+PbKgB+wOSPMqlSceq/R6zNQhFAvJhSJLsYBKiZc+77 A3GEO5SwDU+I7BWTsMWE2dE0DqL2FHLhebAGdrwXoO/QHpkM5bQ4NpD87Xog71cyTVph D7/rJ4LyyIOS0LCESbnaagdg8RE6PGef9+2FcoYATYKfOtfms15RGmCAnbgiastbkHrS gc+wlxVpTxsGtgbXUVq4sYcOtzSb2958hsnviKd7yF79SPkolocG5gFEwsZnQgWfbmrL twNQ== 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 :dkim-signature; bh=q5/60NnfrGkD5RjdlG6VPL2HpQFqn6ElILYYQOhG/ik=; b=LoyZx+Viu2rgI99T3gesnvWsEdZVZK7npcjb+6keXnC6/j5/EB/J6f/evLdzMCHvJ4 gOzB2rTCpa+zRQwZFDFhlne8dNxemYQbi4DW+zl4mFGKr9RQio8kqAMmwUNaBFCZ2e25 kmQIrwvPhHLEWApEEhyBrdI6xwRkDyqmd8KsFb4FLPuF3sUGYszumwJlm25Z6wlmQUdj ZQ4ncZw//OYDy4uvXFX+RNIq/CONXzt8Tg+LpM8UAzjxndVJHEeXH3v1WGsAogNrrtyO RqRSFZ3kCf/qrnO+2eBqeTlaGmbhDbgDngaAW4bnXPGp+n4tqCm7ZqyyrQy8lTsGf/c9 LkNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OI+c3pe8; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dg18si2026458edb.211.2020.06.11.12.10.28; Thu, 11 Jun 2020 12:10:28 -0700 (PDT) Received-SPF: pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OI+c3pe8; spf=pass (google.com: domain of devicetree-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=devicetree-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728330AbgFKTK0 (ORCPT + 6 others); Thu, 11 Jun 2020 15:10:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46894 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728327AbgFKTKY (ORCPT ); Thu, 11 Jun 2020 15:10:24 -0400 Received: from mail-wr1-x442.google.com (mail-wr1-x442.google.com [IPv6:2a00:1450:4864:20::442]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4193DC08C5C1 for ; Thu, 11 Jun 2020 12:10:24 -0700 (PDT) Received: by mail-wr1-x442.google.com with SMTP id l10so7286028wrr.10 for ; Thu, 11 Jun 2020 12:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q5/60NnfrGkD5RjdlG6VPL2HpQFqn6ElILYYQOhG/ik=; b=OI+c3pe8tCATJidOZYVj/M5eMyGCjEW9o7DXpeuxoO+LfLOVHBk0iO64NHk88wGv80 vJSEDPENCVw4XPRiuvn12LgZsdWcQPBzFhQYmRqdEMF7bHpnVoC0RYONexOBolU15VRZ BGuF35kpnxQ5s98wed/sTuvzBm8LGghhjZKKZza8zSU7EcgvY8zeCFy3vv1zoigYlXr7 qr6DI9I6s47/gaG8RCtffKb67FdIvoAMZJ4OuPLw8oTE5Wqjz8LGGxESYiRxzc9Rp7LE JJFKDmE6/gcurTECCWMDtfQ7xbYAvwvQFP+FOzVuzRsF/6KD+wsu1+EJWQGxp+JNLjNj HiPw== 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=q5/60NnfrGkD5RjdlG6VPL2HpQFqn6ElILYYQOhG/ik=; b=RewJuwzEaHML6Ig+AoEILdGmuPyZquPpxS5TjvLikohkj/vO74e3CuBN8BCkIx67CS Wq/XmbnqlgXVt4nVIpajGOsxoNtG2zrpBnx8XeG5/xTlu2eJmKi6gkpvsuCiTdnDI+ZX pNxC3vl07zwY4appL3uboPmqoPaMrMkPNtdbnEukTF/7FiDCjbZm/OdaHTrGsCV76owW w0Xn9IEeNHKv564OygnHXvzisIl0o8jz9fhtRt02Mru+krMYomCkE4u++VsLWlHuKWfZ sw1Jwtro+dwsFm0VovYn1gQRKXAyR4FCD0mOOUuOY4w9A4ozK5cnPuhSr7oTOpUss1s9 10IA== X-Gm-Message-State: AOAM5308YoOB6vZ/L3t/jUtzyh88LySy/2GXG5j1dXNg5K+yS9aQ2wO4 NBRM8Ynpea1CkNj5CS+IXICSew== X-Received: by 2002:adf:e381:: with SMTP id e1mr10471095wrm.320.1591902623017; Thu, 11 Jun 2020 12:10:23 -0700 (PDT) Received: from localhost.localdomain ([2.27.167.101]) by smtp.gmail.com with ESMTPSA id 128sm5658097wme.39.2020.06.11.12.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Jun 2020 12:10:22 -0700 (PDT) From: Lee Jones To: andy.shevchenko@gmail.com, michael@walle.cc, robh+dt@kernel.org, broonie@kernel.org, devicetree@vger.kernel.org, linus.walleij@linaro.org, linux@roeck-us.net, andriy.shevchenko@linux.intel.com, robin.murphy@arm.com, gregkh@linuxfoundation.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Lee Jones Subject: [PATCH v2 3/3] mfd: core: Add OF_MFD_CELL_REG() helper Date: Thu, 11 Jun 2020 20:10:02 +0100 Message-Id: <20200611191002.2256570-3-lee.jones@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200611191002.2256570-1-lee.jones@linaro.org> References: <20200611191002.2256570-1-lee.jones@linaro.org> MIME-Version: 1.0 Sender: devicetree-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org Extend current list of helpers to provide support for parent drivers wishing to match specific child devices to particular OF nodes. Signed-off-by: Lee Jones --- include/linux/mfd/core.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) -- 2.25.1 diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h index ae1c6f90388ba..7ce1de99cd8b8 100644 --- a/include/linux/mfd/core.h +++ b/include/linux/mfd/core.h @@ -14,7 +14,7 @@ #define MFD_RES_SIZE(arr) (sizeof(arr) / sizeof(struct resource)) -#define MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, _match)\ +#define MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, _of_reg, _use_of_reg,_match) \ { \ .name = (_name), \ .resources = (_res), \ @@ -22,24 +22,29 @@ .platform_data = (_pdata), \ .pdata_size = (_pdsize), \ .of_compatible = (_compat), \ + .of_reg = (_of_reg), \ + .use_of_reg = (_use_of_reg), \ .acpi_match = (_match), \ .id = (_id), \ } +#define OF_MFD_CELL_REG(_name, _res, _pdata, _pdsize,_id, _compat, _of_reg) \ + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, _of_reg, true, NULL) + #define OF_MFD_CELL(_name, _res, _pdata, _pdsize,_id, _compat) \ - MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, NULL) + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, _compat, 0, false, NULL) #define ACPI_MFD_CELL(_name, _res, _pdata, _pdsize, _id, _match) \ - MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, _match) + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, 0, false, _match) #define MFD_CELL_BASIC(_name, _res, _pdata, _pdsize, _id) \ - MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, NULL) + MFD_CELL_ALL(_name, _res, _pdata, _pdsize, _id, NULL, 0, false, NULL) #define MFD_CELL_RES(_name, _res) \ - MFD_CELL_ALL(_name, _res, NULL, 0, 0, NULL, NULL) + MFD_CELL_ALL(_name, _res, NULL, 0, 0, NULL, 0, false, NULL) #define MFD_CELL_NAME(_name) \ - MFD_CELL_ALL(_name, NULL, NULL, 0, 0, NULL, NULL) + MFD_CELL_ALL(_name, NULL, NULL, 0, 0, NULL, 0, false, NULL) struct irq_domain; struct property_entry;