// SPDX-License-Identifier: GPL-2.0-or-later
//
// Author: Kevin Wells <kevin.wells@nxp.com>
//
// Copyright (C) 2008 NXP Semiconductors
// Copyright 2023 Timesys Corporation <piotr.wojtaszczyk@timesys.com>

#include <linux/module.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/slab.h>
#include <linux/dma-mapping.h>
#include <linux/amba/pl08x.h>

#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/dmaengine_pcm.h>
#include <sound/soc.h>

#include "lpc3xxx-i2s.h"

#define STUB_FORMATS	(SNDRV_PCM_FMTBIT_S8 | \
			SNDRV_PCM_FMTBIT_U8 | \
			SNDRV_PCM_FMTBIT_S16_LE | \
			SNDRV_PCM_FMTBIT_U16_LE | \
			SNDRV_PCM_FMTBIT_S24_LE | \
			SNDRV_PCM_FMTBIT_U24_LE | \
			SNDRV_PCM_FMTBIT_S32_LE | \
			SNDRV_PCM_FMTBIT_U32_LE | \
			SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE)

static const struct snd_pcm_hardware lpc3xxx_pcm_hardware = {
	.info = (SNDRV_PCM_INFO_MMAP |
		 SNDRV_PCM_INFO_MMAP_VALID |
		 SNDRV_PCM_INFO_INTERLEAVED |
		 SNDRV_PCM_INFO_BLOCK_TRANSFER |
		 SNDRV_PCM_INFO_PAUSE |
		 SNDRV_PCM_INFO_RESUME),
	.formats = STUB_FORMATS,
	.period_bytes_min = 128,
	.period_bytes_max = 2048,
	.periods_min = 2,
	.periods_max = 1024,
	.buffer_bytes_max = 128 * 1024
};

static const struct snd_dmaengine_pcm_config lpc3xxx_dmaengine_pcm_config = {
	.pcm_hardware = &lpc3xxx_pcm_hardware,
	.prepare_slave_config = snd_dmaengine_pcm_prepare_slave_config,
	.compat_filter_fn = pl08x_filter_id,
	.prealloc_buffer_size = 128 * 1024,
};

static const struct snd_soc_component_driver lpc3xxx_soc_platform_driver = {
	.name = "lpc32xx-pcm",
};

int lpc3xxx_pcm_register(struct platform_device *pdev)
{
	int ret;

	ret = devm_snd_dmaengine_pcm_register(&pdev->dev, &lpc3xxx_dmaengine_pcm_config, 0);
	if (ret) {
		dev_err(&pdev->dev, "failed to register dmaengine: %d\n", ret);
		return ret;
	}

	return devm_snd_soc_register_component(&pdev->dev, &lpc3xxx_soc_platform_driver,
					       NULL, 0);
}
EXPORT_SYMBOL(lpc3xxx_pcm_register);
