1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0-only 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * ALSA SoC TLV320AIC23 codec driver SPI interface 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Author: Arun KS, <arunks@mistralsolutions.com> 6*4882a593Smuzhiyun * Copyright: (C) 2008 Mistral Solutions Pvt Ltd., 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Based on sound/soc/codecs/wm8731.c by Richard Purdie 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/module.h> 12*4882a593Smuzhiyun #include <linux/regmap.h> 13*4882a593Smuzhiyun #include <linux/spi/spi.h> 14*4882a593Smuzhiyun #include <sound/soc.h> 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun #include "tlv320aic23.h" 17*4882a593Smuzhiyun aic23_spi_probe(struct spi_device * spi)18*4882a593Smuzhiyunstatic int aic23_spi_probe(struct spi_device *spi) 19*4882a593Smuzhiyun { 20*4882a593Smuzhiyun int ret; 21*4882a593Smuzhiyun struct regmap *regmap; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun dev_dbg(&spi->dev, "probing tlv320aic23 spi device\n"); 24*4882a593Smuzhiyun 25*4882a593Smuzhiyun spi->mode = SPI_MODE_0; 26*4882a593Smuzhiyun ret = spi_setup(spi); 27*4882a593Smuzhiyun if (ret < 0) 28*4882a593Smuzhiyun return ret; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun regmap = devm_regmap_init_spi(spi, &tlv320aic23_regmap); 31*4882a593Smuzhiyun return tlv320aic23_probe(&spi->dev, regmap); 32*4882a593Smuzhiyun } 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun static struct spi_driver aic23_spi = { 35*4882a593Smuzhiyun .driver = { 36*4882a593Smuzhiyun .name = "tlv320aic23", 37*4882a593Smuzhiyun }, 38*4882a593Smuzhiyun .probe = aic23_spi_probe, 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun module_spi_driver(aic23_spi); 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun MODULE_DESCRIPTION("ASoC TLV320AIC23 codec driver SPI"); 44*4882a593Smuzhiyun MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>"); 45*4882a593Smuzhiyun MODULE_LICENSE("GPL"); 46