From: Andy Shevchenko <andriy.shevchenko@intel.com>
To: Angelo Dureghello <adureghello@baylibre.com>
Cc: "Greg Ungerer" <gerg@linux-m68k.org>,
"Geert Uytterhoeven" <geert@linux-m68k.org>,
"Steven King" <sfking@fdwdc.com>, "Arnd Bergmann" <arnd@arndb.de>,
"Maxime Coquelin" <mcoquelin.stm32@gmail.com>,
"Alexandre Torgue" <alexandre.torgue@foss.st.com>,
"Jonathan Cameron" <jic23@kernel.org>,
"David Lechner" <dlechner@baylibre.com>,
"Nuno Sá" <nuno.sa@analog.com>,
"Andy Shevchenko" <andy@kernel.org>,
"Greg Ungerer" <gerg@uclinux.org>,
linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org,
linux-stm32@st-md-mailman.stormreply.com,
linux-arm-kernel@lists.infradead.org, linux-iio@vger.kernel.org
Subject: Re: [PATCH v2 11/11] iio: dac: add mcf54415 DAC
Date: Wed, 13 May 2026 23:28:30 +0300 [thread overview]
Message-ID: <agTe7vZ94DnmD4Ed@ashevche-desk.local> (raw)
In-Reply-To: <20260513-wip-stmark2-dac-v2-11-fcdae50cf51a@baylibre.com>
On Wed, May 13, 2026 at 11:14:35AM +0200, Angelo Dureghello wrote:
>
> Add basic version of mcf54415 DAC driver. DAC is embedded in the cpu and
> DAC configuration registers are mapped in the internal IO address space.
>
> The DAC accepts a 12-bit digital signal and creates a monotonic 12-bit
> analog output varying from DAC_VREFL to DAC_VREFH. The DAC module
> consists of a conversion unit, an output amplifier, and the associated
> digital control blocks. Default register values for DAC_VREFL and DAC_VREFH
> are respectively 0 and 0xfff, left untouched in this initial version.
>
> This initial version of the driver is minimalistic, "output raw" only, to
> be extended in the future. DMA and external sync are disabled, default mode
> is high speed, default format is right-justified 12bit on 16bit word.
...
> +#include <linux/array_size.h>
> +#include <linux/bitfield.h>
> +#include <linux/bits.h>
> +#include <linux/clk.h>
> +#include <linux/compiler_types.h>
> +#include <linux/delay.h>
+ err.h
> +#include <linux/io.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
...
> +struct mcf54415_dac {
> + struct clk *clk;
> + struct regmap *map;
I believe that regmap pointer is used more often, can you check with
bloat-o-meter that swapping these two (by the order) gives any benefit in
object size?
> +};
...
> + .max_register = 0x1F,
No definition? What datasheet says about this? Perhaps define the MAX as per
last defined register in the datasheet?
> +};
...
> +static void mcf54415_dac_init(struct mcf54415_dac *info)
> +{
> + /* Keeping defaults and enable DAC (bit 0 set to 0) */
> + regmap_write(info->map, MCF54415_DAC_CR, MCF54415_DAC_CR_FILT |
> + FIELD_PREP(MCF54415_DAC_CR_WMLVL, 1));
Seems the whole driver ignores IO errors, why?
> + /* DAC is ready after 12us, from RM table 40-3 */
> + fsleep(12);
> +}
...
> +static void mcf54415_dac_exit(void *data)
> +{
> + struct mcf54415_dac *info = data;
> +
> + regmap_update_bits(info->map, MCF54415_DAC_CR, MCF54415_DAC_CR_PDN,
> + MCF54415_DAC_CR_PDN);
regmap_set_bits()
> +}
...
> +static int mcf54415_write_raw(struct iio_dev *indio_dev,
> + struct iio_chan_spec const *chan,
> + int val, int val2, long mask)
> +{
> + struct mcf54415_dac *info = iio_priv(indio_dev);
> +
> + switch (mask) {
> + case IIO_CHAN_INFO_RAW:
> + if (val < 0 || val > 4095)
Do we have a definition for the resolution? I'm fine with the plain numbers,
but it's better to add a short comment to say that this is "based on the
resolution of XXX register per datasheet".
> + return -EINVAL;
> + regmap_write(info->map, MCF54415_DAC_DATA, val);
> + return 0;
> + default:
> + return -EINVAL;
> + }
> +}
...
> +static int mcf54415_dac_probe(struct platform_device *pdev)
> +{
> + struct device *dev = &pdev->dev;
> + struct iio_dev *indio_dev;
> + struct mcf54415_dac *info;
> + void __iomem *regs;
> + int ret;
> +
> + indio_dev = devm_iio_device_alloc(dev, sizeof(*info));
> + if (!indio_dev)
> + return -ENOMEM;
> +
> + info = iio_priv(indio_dev);
> +
> + regs = devm_platform_ioremap_resource(pdev, 0);
> + if (IS_ERR(regs))
> + return dev_err_probe(dev, PTR_ERR(regs),
> + "failed to get io regs\n");
One line.
> +
> + info->map = devm_regmap_init_mmio(dev, regs,
> + &mcf54415_dac_regmap_config);
> + if (IS_ERR(info->map))
> + return PTR_ERR(info->map);
> +
> + info->clk = devm_clk_get_enabled(dev, "dac");
> + if (IS_ERR(info->clk))
> + return dev_err_probe(dev, PTR_ERR(info->clk),
> + "failed getting clock\n");
Also can be a single line, but this one a bit longer than above, gives
88 characters.
> + platform_set_drvdata(pdev, indio_dev);
> +
> + indio_dev->name = "mcf54415";
> + indio_dev->info = &mcf54415_dac_iio_info;
> + indio_dev->modes = INDIO_DIRECT_MODE;
> + indio_dev->channels = mcf54415_dac_iio_channels;
> + indio_dev->num_channels = ARRAY_SIZE(mcf54415_dac_iio_channels);
> +
> + mcf54415_dac_init(info);
> +
> + ret = devm_add_action_or_reset(dev, mcf54415_dac_exit, info);
> + if (ret)
> + return ret;
> +
> + return devm_iio_device_register(dev, indio_dev);
> +}
--
With Best Regards,
Andy Shevchenko
prev parent reply other threads:[~2026-05-13 20:28 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 9:14 [PATCH v2 00/11] add mcf54415 DAC driver Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 01/11] m68k: mcf5441x: fix clocks numbering Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 02/11] m68k: mcf5441x: add clock for DAC channel 1 Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 03/11] m68k: mcf5441x: setup DAC clock name as per driver name Angelo Dureghello
2026-05-14 1:27 ` Greg Ungerer
2026-05-14 7:05 ` Angelo Dureghello
2026-05-14 12:54 ` Greg Ungerer
2026-05-13 9:14 ` [PATCH v2 04/11] m68k: defconfig: update stmark2 defconfig Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 05/11] m68k: add DAC modules base addresses Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 06/11] m68k: mcf5441x: add CCM registers Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 07/11] m68k: mcf5441x: add CCR MISCCR2 bitfields Angelo Dureghello
2026-05-13 9:14 ` [PATCH v2 08/11] m68k: stmark2: add mcf5441x DAC platform devices Angelo Dureghello
2026-05-13 13:53 ` Jonathan Cameron
2026-05-13 20:16 ` Andy Shevchenko
2026-05-14 7:15 ` Angelo Dureghello
2026-05-15 7:37 ` Andy Shevchenko
2026-05-13 9:14 ` [PATCH v2 09/11] m68k: stmark2: use ioport.h macros for resources Angelo Dureghello
2026-05-13 13:55 ` Jonathan Cameron
2026-05-13 20:18 ` Andy Shevchenko
2026-05-14 7:20 ` Angelo Dureghello
2026-05-15 7:38 ` Andy Shevchenko
2026-05-13 9:14 ` [PATCH v2 10/11] m68k: stmark2: enable DACs outputs Angelo Dureghello
2026-05-13 13:56 ` Jonathan Cameron
2026-05-13 9:14 ` [PATCH v2 11/11] iio: dac: add mcf54415 DAC Angelo Dureghello
2026-05-13 14:07 ` Jonathan Cameron
2026-05-13 20:28 ` Andy Shevchenko [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=agTe7vZ94DnmD4Ed@ashevche-desk.local \
--to=andriy.shevchenko@intel.com \
--cc=adureghello@baylibre.com \
--cc=alexandre.torgue@foss.st.com \
--cc=andy@kernel.org \
--cc=arnd@arndb.de \
--cc=dlechner@baylibre.com \
--cc=geert@linux-m68k.org \
--cc=gerg@linux-m68k.org \
--cc=gerg@uclinux.org \
--cc=jic23@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-stm32@st-md-mailman.stormreply.com \
--cc=mcoquelin.stm32@gmail.com \
--cc=nuno.sa@analog.com \
--cc=sfking@fdwdc.com \
/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.