122066226SMark Brown /* 222066226SMark Brown * Driver for the PCM512x CODECs 322066226SMark Brown * 422066226SMark Brown * Author: Mark Brown <broonie@linaro.org> 522066226SMark Brown * Copyright 2014 Linaro Ltd 622066226SMark Brown * 722066226SMark Brown * This program is free software; you can redistribute it and/or 822066226SMark Brown * modify it under the terms of the GNU General Public License 922066226SMark Brown * version 2 as published by the Free Software Foundation. 1022066226SMark Brown * 1122066226SMark Brown * This program is distributed in the hope that it will be useful, but 1222066226SMark Brown * WITHOUT ANY WARRANTY; without even the implied warranty of 1322066226SMark Brown * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 1422066226SMark Brown * General Public License for more details. 1522066226SMark Brown */ 1622066226SMark Brown 1722066226SMark Brown #include <linux/init.h> 1822066226SMark Brown #include <linux/module.h> 1922066226SMark Brown #include <linux/spi/spi.h> 2022066226SMark Brown 2122066226SMark Brown #include "pcm512x.h" 2222066226SMark Brown 2322066226SMark Brown static int pcm512x_spi_probe(struct spi_device *spi) 2422066226SMark Brown { 2522066226SMark Brown struct regmap *regmap; 2622066226SMark Brown int ret; 2722066226SMark Brown 2822066226SMark Brown regmap = devm_regmap_init_spi(spi, &pcm512x_regmap); 2922066226SMark Brown if (IS_ERR(regmap)) { 3022066226SMark Brown ret = PTR_ERR(regmap); 3122066226SMark Brown return ret; 3222066226SMark Brown } 3322066226SMark Brown 3422066226SMark Brown return pcm512x_probe(&spi->dev, regmap); 3522066226SMark Brown } 3622066226SMark Brown 3722066226SMark Brown static int pcm512x_spi_remove(struct spi_device *spi) 3822066226SMark Brown { 3922066226SMark Brown pcm512x_remove(&spi->dev); 4022066226SMark Brown return 0; 4122066226SMark Brown } 4222066226SMark Brown 4322066226SMark Brown static const struct spi_device_id pcm512x_spi_id[] = { 4422066226SMark Brown { "pcm5121", }, 4522066226SMark Brown { "pcm5122", }, 46ba5295e5SPeter Rosin { "pcm5141", }, 47ba5295e5SPeter Rosin { "pcm5142", }, 4822066226SMark Brown { }, 4922066226SMark Brown }; 5022066226SMark Brown MODULE_DEVICE_TABLE(spi, pcm512x_spi_id); 5122066226SMark Brown 5222066226SMark Brown static const struct of_device_id pcm512x_of_match[] = { 5322066226SMark Brown { .compatible = "ti,pcm5121", }, 5422066226SMark Brown { .compatible = "ti,pcm5122", }, 55ba5295e5SPeter Rosin { .compatible = "ti,pcm5141", }, 56ba5295e5SPeter Rosin { .compatible = "ti,pcm5142", }, 5722066226SMark Brown { } 5822066226SMark Brown }; 5922066226SMark Brown MODULE_DEVICE_TABLE(of, pcm512x_of_match); 6022066226SMark Brown 6122066226SMark Brown static struct spi_driver pcm512x_spi_driver = { 6222066226SMark Brown .probe = pcm512x_spi_probe, 6322066226SMark Brown .remove = pcm512x_spi_remove, 6422066226SMark Brown .id_table = pcm512x_spi_id, 6522066226SMark Brown .driver = { 6622066226SMark Brown .name = "pcm512x", 6722066226SMark Brown .owner = THIS_MODULE, 6822066226SMark Brown .of_match_table = pcm512x_of_match, 6922066226SMark Brown .pm = &pcm512x_pm_ops, 7022066226SMark Brown }, 7122066226SMark Brown }; 7222066226SMark Brown 7322066226SMark Brown module_spi_driver(pcm512x_spi_driver); 74