1
2
3
4
5
6
7
8
9
10
11#include <linux/spi/spi.h>
12#include <linux/module.h>
13#include <linux/of.h>
14#include <linux/regmap.h>
15#include <sound/soc.h>
16
17#include "tlv320aic32x4.h"
18
19static int aic32x4_spi_probe(struct spi_device *spi)
20{
21 struct regmap *regmap;
22 struct regmap_config config;
23
24 config = aic32x4_regmap_config;
25 config.reg_bits = 7;
26 config.pad_bits = 1;
27 config.val_bits = 8;
28 config.read_flag_mask = 0x01;
29
30 regmap = devm_regmap_init_spi(spi, &config);
31 return aic32x4_probe(&spi->dev, regmap);
32}
33
34static int aic32x4_spi_remove(struct spi_device *spi)
35{
36 return aic32x4_remove(&spi->dev);
37}
38
39static const struct spi_device_id aic32x4_spi_id[] = {
40 { "tlv320aic32x4", 0 },
41 { "tlv320aic32x6", 1 },
42 { }
43};
44MODULE_DEVICE_TABLE(spi, aic32x4_spi_id);
45
46static const struct of_device_id aic32x4_of_id[] = {
47 { .compatible = "ti,tlv320aic32x4", },
48 { .compatible = "ti,tlv320aic32x6", },
49 { }
50};
51MODULE_DEVICE_TABLE(of, aic32x4_of_id);
52
53static struct spi_driver aic32x4_spi_driver = {
54 .driver = {
55 .name = "tlv320aic32x4",
56 .owner = THIS_MODULE,
57 .of_match_table = aic32x4_of_id,
58 },
59 .probe = aic32x4_spi_probe,
60 .remove = aic32x4_spi_remove,
61 .id_table = aic32x4_spi_id,
62};
63
64module_spi_driver(aic32x4_spi_driver);
65
66MODULE_DESCRIPTION("ASoC TLV320AIC32x4 codec driver SPI");
67MODULE_AUTHOR("Annaliese McDermond <nh6z@nh6z.net>");
68MODULE_LICENSE("GPL");
69