18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Driver for the PCM512x CODECs
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Author:	Mark Brown <broonie@kernel.org>
68c2ecf20Sopenharmony_ci *		Copyright 2014 Linaro Ltd
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/init.h>
108c2ecf20Sopenharmony_ci#include <linux/module.h>
118c2ecf20Sopenharmony_ci#include <linux/spi/spi.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci#include "pcm512x.h"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cistatic int pcm512x_spi_probe(struct spi_device *spi)
168c2ecf20Sopenharmony_ci{
178c2ecf20Sopenharmony_ci	struct regmap *regmap;
188c2ecf20Sopenharmony_ci	int ret;
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci	regmap = devm_regmap_init_spi(spi, &pcm512x_regmap);
218c2ecf20Sopenharmony_ci	if (IS_ERR(regmap)) {
228c2ecf20Sopenharmony_ci		ret = PTR_ERR(regmap);
238c2ecf20Sopenharmony_ci		return ret;
248c2ecf20Sopenharmony_ci	}
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci	return pcm512x_probe(&spi->dev, regmap);
278c2ecf20Sopenharmony_ci}
288c2ecf20Sopenharmony_ci
298c2ecf20Sopenharmony_cistatic int pcm512x_spi_remove(struct spi_device *spi)
308c2ecf20Sopenharmony_ci{
318c2ecf20Sopenharmony_ci	pcm512x_remove(&spi->dev);
328c2ecf20Sopenharmony_ci	return 0;
338c2ecf20Sopenharmony_ci}
348c2ecf20Sopenharmony_ci
358c2ecf20Sopenharmony_cistatic const struct spi_device_id pcm512x_spi_id[] = {
368c2ecf20Sopenharmony_ci	{ "pcm5121", },
378c2ecf20Sopenharmony_ci	{ "pcm5122", },
388c2ecf20Sopenharmony_ci	{ "pcm5141", },
398c2ecf20Sopenharmony_ci	{ "pcm5142", },
408c2ecf20Sopenharmony_ci	{ },
418c2ecf20Sopenharmony_ci};
428c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(spi, pcm512x_spi_id);
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_cistatic const struct of_device_id pcm512x_of_match[] = {
458c2ecf20Sopenharmony_ci	{ .compatible = "ti,pcm5121", },
468c2ecf20Sopenharmony_ci	{ .compatible = "ti,pcm5122", },
478c2ecf20Sopenharmony_ci	{ .compatible = "ti,pcm5141", },
488c2ecf20Sopenharmony_ci	{ .compatible = "ti,pcm5142", },
498c2ecf20Sopenharmony_ci	{ }
508c2ecf20Sopenharmony_ci};
518c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, pcm512x_of_match);
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_cistatic struct spi_driver pcm512x_spi_driver = {
548c2ecf20Sopenharmony_ci	.probe		= pcm512x_spi_probe,
558c2ecf20Sopenharmony_ci	.remove		= pcm512x_spi_remove,
568c2ecf20Sopenharmony_ci	.id_table	= pcm512x_spi_id,
578c2ecf20Sopenharmony_ci	.driver = {
588c2ecf20Sopenharmony_ci		.name	= "pcm512x",
598c2ecf20Sopenharmony_ci		.of_match_table = pcm512x_of_match,
608c2ecf20Sopenharmony_ci		.pm     = &pcm512x_pm_ops,
618c2ecf20Sopenharmony_ci	},
628c2ecf20Sopenharmony_ci};
638c2ecf20Sopenharmony_ci
648c2ecf20Sopenharmony_cimodule_spi_driver(pcm512x_spi_driver);
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("ASoC PCM512x codec driver - SPI");
678c2ecf20Sopenharmony_ciMODULE_AUTHOR("Mark Brown <broonie@kernel.org>");
688c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL v2");
69