All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nuno Sá" <noname.nuno@gmail.com>
To: "Angelo Dureghello" <adureghello@baylibre.com>,
	"Lars-Peter Clausen" <lars@metafoo.de>,
	"Michael Hennerich" <Michael.Hennerich@analog.com>,
	"Nuno Sá" <nuno.sa@analog.com>,
	"Jonathan Cameron" <jic23@kernel.org>,
	"Rob Herring" <robh@kernel.org>,
	"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
	"Conor Dooley" <conor+dt@kernel.org>,
	"Olivier Moysan" <olivier.moysan@foss.st.com>
Cc: linux-iio@vger.kernel.org, devicetree@vger.kernel.org,
	 linux-kernel@vger.kernel.org, Mark Brown <broonie@kernel.org>,
	 dlechner@baylibre.com
Subject: Re: [PATCH v8 8/8] iio: dac: adi-axi-dac: add registering of child fdt node
Date: Mon, 28 Oct 2024 14:21:40 +0100	[thread overview]
Message-ID: <90be82063f25f703a9a813122e08eb156843d981.camel@gmail.com> (raw)
In-Reply-To: <20241025-wip-bl-ad3552r-axi-v0-iio-testing-v8-8-74ca7dd60567@baylibre.com>

On Fri, 2024-10-25 at 11:49 +0200, Angelo Dureghello wrote:
> From: Angelo Dureghello <adureghello@baylibre.com>
> 
> Change to obtain the fdt use case as reported in the
> adi,ad3552r.yaml file in this patchset.
> 
> The DAC device is defined as a child node of the backend.
> Registering the child fdt node as a platform devices.
> 
> Signed-off-by: Angelo Dureghello <adureghello@baylibre.com>
> ---

LGTM,

Reviewed-by: Nuno Sa <nuno.sa@analog.com>

>  drivers/iio/dac/adi-axi-dac.c | 56 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> diff --git a/drivers/iio/dac/adi-axi-dac.c b/drivers/iio/dac/adi-axi-dac.c
> index 148e40a8ab2a..dc9f881bf9ce 100644
> --- a/drivers/iio/dac/adi-axi-dac.c
> +++ b/drivers/iio/dac/adi-axi-dac.c
> @@ -29,6 +29,8 @@
>  #include <linux/iio/buffer.h>
>  #include <linux/iio/iio.h>
>  
> +#include "ad3552r-hs.h"
> +
>  /*
>   * Register definitions:
>   *   https://wiki.analog.com/resources/fpga/docs/axi_dac_ip#register_map
> @@ -97,6 +99,7 @@ struct axi_dac_info {
>  	unsigned int version;
>  	const struct iio_backend_info *backend_info;
>  	bool has_dac_clk;
> +	bool has_child_nodes;
>  };
>  
>  struct axi_dac_state {
> @@ -699,6 +702,36 @@ static int axi_dac_bus_reg_read(struct iio_backend *back, u32
> reg, u32 *val,
>  	return regmap_read(st->regmap, AXI_DAC_CUSTOM_RD_REG, val);
>  }
>  
> +static void axi_dac_child_remove(void *data)
> +{
> +	platform_device_unregister(data);
> +}
> +
> +static int axi_dac_create_platform_device(struct axi_dac_state *st,
> +					  struct fwnode_handle *child)
> +{
> +	struct ad3552r_hs_platform_data pdata = {
> +		.bus_reg_read = axi_dac_bus_reg_read,
> +		.bus_reg_write = axi_dac_bus_reg_write,
> +		.bus_sample_data_clock_hz = st->dac_clk_rate,
> +	};
> +	struct platform_device_info pi = {
> +		.parent = st->dev,
> +		.name = fwnode_get_name(child),
> +		.id = PLATFORM_DEVID_AUTO,
> +		.fwnode = child,
> +		.data = &pdata,
> +		.size_data = sizeof(pdata),
> +	};
> +	struct platform_device *pdev;
> +
> +	pdev = platform_device_register_full(&pi);
> +	if (IS_ERR(pdev))
> +		return PTR_ERR(pdev);
> +
> +	return devm_add_action_or_reset(st->dev, axi_dac_child_remove, pdev);
> +}
> +
>  static const struct iio_backend_ops axi_dac_generic_ops = {
>  	.enable = axi_dac_enable,
>  	.disable = axi_dac_disable,
> @@ -840,6 +873,28 @@ static int axi_dac_probe(struct platform_device *pdev)
>  		return dev_err_probe(&pdev->dev, ret,
>  				     "failed to register iio backend\n");
>  
> +	device_for_each_child_node_scoped(&pdev->dev, child) {
> +		int val;
> +
> +		if (!st->info->has_child_nodes)
> +			return dev_err_probe(&pdev->dev, -EINVAL,
> +					     "invalid fdt axi-dac compatible.");
> +
> +		/* Processing only reg 0 node */
> +		ret = fwnode_property_read_u32(child, "reg", &val);
> +		if (ret)
> +			return dev_err_probe(&pdev->dev, ret,
> +						"invalid reg property.");
> +		if (val != 0)
> +			return dev_err_probe(&pdev->dev, -EINVAL,
> +						"invalid node address.");
> +
> +		ret = axi_dac_create_platform_device(st, child);
> +		if (ret)
> +			return dev_err_probe(&pdev->dev, -EINVAL,
> +						"cannot create device.");
> +	}
> +
>  	dev_info(&pdev->dev, "AXI DAC IP core (%d.%.2d.%c) probed\n",
>  		 ADI_AXI_PCORE_VER_MAJOR(ver),
>  		 ADI_AXI_PCORE_VER_MINOR(ver),
> @@ -857,6 +912,7 @@ static const struct axi_dac_info dac_ad3552r = {
>  	.version = ADI_AXI_PCORE_VER(9, 1, 'b'),
>  	.backend_info = &axi_ad3552r,
>  	.has_dac_clk = true,
> +	.has_child_nodes = true,
>  };
>  
>  static const struct of_device_id axi_dac_of_match[] = {
> 


      reply	other threads:[~2024-10-28 13:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-10-25  9:49 [PATCH v8 0/8] iio: add support for the ad3552r AXI DAC IP Angelo Dureghello
2024-10-25  9:49 ` [PATCH v8 1/8] dt-bindings: iio: dac: ad3552r: add iio backend support Angelo Dureghello
2024-10-25  9:49 ` [PATCH v8 2/8] dt-bindings: iio: dac: adi-axi-dac: add ad3552r axi variant Angelo Dureghello
2024-10-27 22:40   ` Rob Herring (Arm)
2024-10-25  9:49 ` [PATCH v8 3/8] iio: backend: extend features Angelo Dureghello
2024-10-25  9:49 ` [PATCH v8 4/8] iio: dac: adi-axi-dac: " Angelo Dureghello
2024-10-28 13:20   ` Nuno Sá
2024-10-25  9:49 ` [PATCH v8 5/8] iio: dac: ad3552r: changes to use FIELD_PREP Angelo Dureghello
2024-10-25  9:49 ` [PATCH v8 6/8] iio: dac: ad3552r: extract common code (no changes in behavior intended) Angelo Dureghello
2024-10-26 17:47   ` Jonathan Cameron
2024-10-25  9:49 ` [PATCH v8 7/8] iio: dac: ad3552r: add high-speed platform driver Angelo Dureghello
2024-10-26 17:57   ` Jonathan Cameron
2024-10-28  9:14     ` Angelo Dureghello
2024-10-28 20:00       ` Jonathan Cameron
2024-10-28 13:34   ` Nuno Sá
2024-10-28 19:09     ` Angelo Dureghello
2024-10-25  9:49 ` [PATCH v8 8/8] iio: dac: adi-axi-dac: add registering of child fdt node Angelo Dureghello
2024-10-28 13:21   ` Nuno Sá [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=90be82063f25f703a9a813122e08eb156843d981.camel@gmail.com \
    --to=noname.nuno@gmail.com \
    --cc=Michael.Hennerich@analog.com \
    --cc=adureghello@baylibre.com \
    --cc=broonie@kernel.org \
    --cc=conor+dt@kernel.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dlechner@baylibre.com \
    --cc=jic23@kernel.org \
    --cc=krzk+dt@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nuno.sa@analog.com \
    --cc=olivier.moysan@foss.st.com \
    --cc=robh@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.