Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp904355rwl; Wed, 5 Apr 2023 09:09:57 -0700 (PDT) X-Google-Smtp-Source: AKy350baMS4Uy1QoTh2BihBHhumdiH/3LL7VOJSToBE/hYlS7nrV3UcrhdOCd0awwpCVMsmaRDjY X-Received: by 2002:aa7:9835:0:b0:62d:b26e:fc63 with SMTP id q21-20020aa79835000000b0062db26efc63mr5638863pfl.32.1680710997186; Wed, 05 Apr 2023 09:09:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680710997; cv=none; d=google.com; s=arc-20160816; b=mx9Wch4OVCf/yy2kwaw5+RzW1SetWb8JWNDJVLfAr8a6i67NkaOSpSPZS3gegdkY37 Ra2ehRglD68WQo8K716NaORvY+OOYOn56cOjBef/Z1jTHZ6qxXUHdDSD6mCp0NKDjdfK judk0jPMhrCegTHyGpzLZF2lI9hAt7F/O1cJStAFSSooG1FTeb+T5NKhQU0gYy3D1Lvl 1UJ6uUo29wEhcnUYoU3ROS93GiDQinmMfp22vWkeRWtpV+cqmP6Xu36MzQFalKSNMwv3 qB4MzflSduVULLc4/oYpBe6Yaq3GeBKx3Xmt8vXk7FzowPdNjGR+x3h4QKjSZqiZrExE WTeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date:dkim-signature; bh=SRkI5V3gjzupeihxCsM7ao2TVc0QtUHYc/QaMrO1zy4=; b=BvW0POycfpZgyiWJTpYKDSt05g7/ko009DpSCupFlW7GPpD+boQHpTwZVFqYMG7TP7 Cgu+UZ9W2MMiN1Tr3PQDG3zYGb+YA3MpQrG7Ae3VsGkKCttB5w0gw+8x31gM9oUNxVxe QGPqwwYnnvMQqs3ATPnXDLfbQg5wa2LGgvuu/JoirF7LpU3RhzbMfcloVkhHTMpcyciF g2ilq69QrK4tvD+UrcW7FwTIBE3Eiy1PClgCxQzBz3OBhFX5C6q7r1a89phpzGD/IsGr BRMjgTX7pJUxQtojMfW9q1DaPL+QqICo92GCw2+G5fhB5yv8xzJ4mhJWYwicNreBkVyo z0wA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=KC1g4w2x; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id t71-20020a635f4a000000b005138fd7f1cesi12774707pgb.89.2023.04.05.09.09.45; Wed, 05 Apr 2023 09:09:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=KC1g4w2x; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238608AbjDEQAg (ORCPT + 99 others); Wed, 5 Apr 2023 12:00:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49670 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238514AbjDEQAe (ORCPT ); Wed, 5 Apr 2023 12:00:34 -0400 Received: from relay5-d.mail.gandi.net (relay5-d.mail.gandi.net [217.70.183.197]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4F1E240E0; Wed, 5 Apr 2023 09:00:29 -0700 (PDT) Received: (Authenticated sender: herve.codina@bootlin.com) by mail.gandi.net (Postfix) with ESMTPSA id AD9251C000D; Wed, 5 Apr 2023 16:00:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1680710428; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SRkI5V3gjzupeihxCsM7ao2TVc0QtUHYc/QaMrO1zy4=; b=KC1g4w2xVYyQFY6KHYxMQpoZIPGDPaO2rI8LJPbtSdOBU9PjOlgoznRVhGnuRqRe6zdinB qTPDgIDlnt9ImAma6cl3BWf+tfa9bxI8XSv7yTIo/zjyy0XTODc7ardoqJ2v5USyLAiiOS YcMJqaxrWHD9RwJGUc6I8/b/Vn9C7KfoiT7Mcff0Sm/gADMniMrGdEfEm3kUwkAogRzPiG hc/3w2SQb+HxsSvVcBVnF0KuRspZXZOS0wtW18RY2aGSX/uwWN/BTQetkmq7NAlA5GGvx1 2/5hqW6BtWqlOVAmePg5V4/97yQLJtMRSb+XCIBDczwMAVoEwGqFE4NzoiEeOg== Date: Wed, 5 Apr 2023 18:00:23 +0200 From: Herve Codina To: Lee Jones Cc: Krzysztof Kozlowski , Rob Herring , Krzysztof Kozlowski , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, alsa-devel@alsa-project.org, Christophe Leroy , Thomas Petazzoni Subject: Re: [PATCH v5 2/5] mfd: Add support for the Lantiq PEF2256 framer Message-ID: <20230405180023.4aebaa08@bootlin.com> In-Reply-To: <20230405135450.GF8371@google.com> References: <20230331094208.41ab4420@bootlin.com> <6d39e9c3-fb6a-4b2a-9889-8fe8d86716d5@linaro.org> <20230331141104.42445da9@bootlin.com> <20230331165904.4e7f46a1@bootlin.com> <20230403142822.GA8371@google.com> <20230404092036.2d1cd5d9@bootlin.com> <20230404100759.5bc9cd20@bootlin.com> <143754c2-9e37-4386-af92-174c0df2eb0a@linaro.org> <20230405135450.GF8371@google.com> Organization: Bootlin X-Mailer: Claws Mail 4.1.1 (GTK 3.24.37; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H2, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Lee, On Wed, 5 Apr 2023 14:54:50 +0100 Lee Jones wrote: > On Tue, 04 Apr 2023, Krzysztof Kozlowski wrote: > > > On 04/04/2023 10:07, Herve Codina wrote: > > > > >>> So, the structure I have in mind: > > >>> - pef2256.c (MFD) > > >>> implement and do the setup at probe() > > >>> Add the children at probe(): > > >>> - pef2256-pinctrl (pinctrl) added using mfd_add_devices() > > >>> - pef2256-codec (ASoC codec) added using devm_of_platform_populate() > > >>> > > >>> Lee, with this in mind, can the core pef2256.c be a MFD driver ? > > >> > > >> You do not use MFD here, so why do you want to keep it in MFD? If you > > >> disagree, please tell me where is the MFD code in your patch? > > > > > > I don't want to absolutely use MFD. > > > I just want to put my driver somewhere and I don't know the right location > > > between MFD and Misc. > > > > > > Basically, the driver needs to do (little simplified and error path removed): > > > > > > static const struct mfd_cell pef2256_devs[] = { > > > { .name = "lantiq-pef2256-pinctrl", }, > > > }; > > > > > > static int pef2256_probe(struct platform_device *pdev) > > > { > > > struct pef2256 *pef2256; > > > void __iomem *iomem; > > > int ret; > > > int irq; > > > > > > pef2256 = devm_kzalloc(&pdev->dev, sizeof(*pef2256), GFP_KERNEL); > > > if (!pef2256) > > > return -ENOMEM; > > > > > > pef2256->dev = &pdev->dev; > > > > > > iomem = devm_platform_ioremap_resource(pdev, 0); > > > > > > pef2256->regmap = devm_regmap_init_mmio(&pdev->dev, iomem, > > > &pef2256_regmap_config); > > > > > > pef2256->mclk = devm_clk_get_enabled(&pdev->dev, "mclk"); > > > pef2256->sclkr = devm_clk_get_enabled(&pdev->dev, "sclkr"); > > > pef2256->sclkx = devm_clk_get_enabled(&pdev->dev, "sclkx"); > > > > > > pef2256->reset_gpio = devm_gpiod_get_optional(&pdev->dev, "reset", GPIOD_OUT_LOW); > > > if (pef2256->reset_gpio) { > > > gpiod_set_value_cansleep(pef2256->reset_gpio, 1); > > > udelay(10); > > > gpiod_set_value_cansleep(pef2256->reset_gpio, 0); > > > udelay(10); > > > } > > > > > > pef2556_of_parse(pef2256, np); > > > > > > irq = platform_get_irq(pdev, 0); > > > ret = devm_request_irq(pef2256->dev, irq, pef2256_irq_handler, 0, "pef2256", pef2256); > > > > > > platform_set_drvdata(pdev, pef2256); > > > > > > mfd_add_devices(pef2256->dev, PLATFORM_DEVID_NONE, pef2256_devs, > > > ARRAY_SIZE(pef2256_devs), NULL, 0, NULL); > > > > Wait, now you use MFD framework, so the driver is suitable for MFD. > > Before there was nothing like that in your code. > > Agree, the above is suitable for MFD, since it does all the things I > said your last one did not. You *can* also use of_platform_populate() > here, since you are *also* requesting and initialising shared resources. > You cannot do *both* however. > Thanks for having confirmed that this driver can be a MFD driver. Related to of_platform_populate() / mfd_add_devices(), I wanted to use both because: - the pinctrl part does not have (and does not need to have) a specific node with a specific compatible property. In order to instantiate the related driver mfd_add_devices() is the only way I know. - the audio component nodes have a compatible string and several components (ie several nodes) can be present. of_platform_populate() call seems the simple way to instantiate them. Is there a way to use mfd_add_devices() in this case without the need to count the audio component nodes in order to allocate as much mfd_cell as nodes having a matching compatible property ? Is there an other API to do it ? Best regards, Hervé