// SPDX-License-Identifier: GPL-2.0-only
/*
 *
 *  Copyright (C) 2012 John Crispin <john@phrozen.org>
 */

#include <linux/err.h>
#include <linux/export.h>
#include <linux/gpio/consumer.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>

#include <lantiq_soc.h>

static unsigned int *cp1_base;

unsigned int *ltq_get_cp1_base(void)
{
	if (!cp1_base)
		panic("no cp1 base was set\n");

	return cp1_base;
}
EXPORT_SYMBOL(ltq_get_cp1_base);

static int vmmc_probe(struct platform_device *pdev)
{
#define CP1_SIZE       (1 << 20)
	struct gpio_desc *gpio;
	int gpio_count;
	dma_addr_t dma;
	int error;

	cp1_base =
		(void *) CPHYSADDR(dma_alloc_coherent(&pdev->dev, CP1_SIZE,
						    &dma, GFP_KERNEL));

	gpio_count = gpiod_count(&pdev->dev, NULL);
	while (gpio_count > 0) {
		gpio = devm_gpiod_get_index(&pdev->dev,
					    NULL, --gpio_count, GPIOD_OUT_HIGH);
		error = PTR_ERR_OR_ZERO(gpio);
		if (error) {
			dev_err(&pdev->dev,
				"failed to request GPIO idx %d: %d\n",
				gpio_count, error);
			continue;
		}

		gpiod_set_consumer_name(gpio, "vmmc-relay");
	}

	dev_info(&pdev->dev, "reserved %dMB at 0x%p", CP1_SIZE >> 20, cp1_base);

	return 0;
}

static const struct of_device_id vmmc_match[] = {
	{ .compatible = "lantiq,vmmc-xway" },
	{},
};

static struct platform_driver vmmc_driver = {
	.probe = vmmc_probe,
	.driver = {
		.name = "lantiq,vmmc",
		.of_match_table = vmmc_match,
	},
};
builtin_platform_driver(vmmc_driver);
