1 | /* SPDX-License-Identifier: GPL-2.0 |
2 | * |
3 | * ALSA SoC TLV320AIC3x codec driver SPI interface |
4 | * |
5 | * Author: Arun KS, <arunks@mistralsolutions.com> |
6 | * Copyright: (C) 2008 Mistral Solutions Pvt Ltd., |
7 | * |
8 | * Based on sound/soc/codecs/wm8731.c by Richard Purdie |
9 | * |
10 | */ |
11 | |
12 | #include <linux/spi/spi.h> |
13 | #include <linux/module.h> |
14 | #include <linux/of.h> |
15 | #include <linux/regmap.h> |
16 | #include <sound/soc.h> |
17 | |
18 | #include "tlv320aic3x.h" |
19 | |
20 | static int aic3x_spi_probe(struct spi_device *spi) |
21 | { |
22 | struct regmap *regmap; |
23 | struct regmap_config config; |
24 | const struct spi_device_id *id = spi_get_device_id(sdev: spi); |
25 | |
26 | config = aic3x_regmap; |
27 | config.reg_bits = 7; |
28 | config.pad_bits = 1; |
29 | config.val_bits = 8; |
30 | config.read_flag_mask = 0x01; |
31 | |
32 | dev_dbg(&spi->dev, "probing tlv320aic3x spi device\n" ); |
33 | |
34 | regmap = devm_regmap_init_spi(spi, &config); |
35 | return aic3x_probe(dev: &spi->dev, regmap, driver_data: id->driver_data); |
36 | } |
37 | |
38 | static void aic3x_spi_remove(struct spi_device *spi) |
39 | { |
40 | aic3x_remove(dev: &spi->dev); |
41 | } |
42 | |
43 | static const struct spi_device_id aic3x_spi_id[] = { |
44 | { "tlv320aic3x" , AIC3X_MODEL_3X }, |
45 | { "tlv320aic33" , AIC3X_MODEL_33 }, |
46 | { "tlv320aic3007" , AIC3X_MODEL_3007 }, |
47 | { "tlv320aic3104" , AIC3X_MODEL_3104 }, |
48 | { "tlv320aic3106" , AIC3X_MODEL_3106 }, |
49 | { } |
50 | }; |
51 | MODULE_DEVICE_TABLE(spi, aic3x_spi_id); |
52 | |
53 | static const struct of_device_id aic3x_of_id[] = { |
54 | { .compatible = "ti,tlv320aic3x" , }, |
55 | { .compatible = "ti,tlv320aic33" }, |
56 | { .compatible = "ti,tlv320aic3007" }, |
57 | { .compatible = "ti,tlv320aic3104" }, |
58 | { .compatible = "ti,tlv320aic3106" }, |
59 | {}, |
60 | }; |
61 | MODULE_DEVICE_TABLE(of, aic3x_of_id); |
62 | |
63 | static struct spi_driver aic3x_spi_driver = { |
64 | .driver = { |
65 | .name = "tlv320aic3x" , |
66 | .owner = THIS_MODULE, |
67 | .of_match_table = aic3x_of_id, |
68 | }, |
69 | .probe = aic3x_spi_probe, |
70 | .remove = aic3x_spi_remove, |
71 | .id_table = aic3x_spi_id, |
72 | }; |
73 | |
74 | module_spi_driver(aic3x_spi_driver); |
75 | |
76 | MODULE_DESCRIPTION("ASoC TLV320AIC3x codec driver SPI" ); |
77 | MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>" ); |
78 | MODULE_LICENSE("GPL" ); |
79 | |