1 | /* SPDX-License-Identifier: GPL-2.0 |
2 | * |
3 | * Copyright 2011-2019 NW Digital Radio |
4 | * |
5 | * Author: Annaliese McDermond <nh6z@nh6z.net> |
6 | * |
7 | * Based on sound/soc/codecs/wm8974 and TI driver for kernel 2.6.27. |
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 | |
19 | static int aic32x4_spi_probe(struct spi_device *spi) |
20 | { |
21 | struct regmap *regmap; |
22 | struct regmap_config config; |
23 | enum aic32x4_type type; |
24 | |
25 | config = aic32x4_regmap_config; |
26 | config.reg_bits = 7; |
27 | config.pad_bits = 1; |
28 | config.val_bits = 8; |
29 | config.read_flag_mask = 0x01; |
30 | |
31 | regmap = devm_regmap_init_spi(spi, &config); |
32 | type = (uintptr_t)spi_get_device_match_data(sdev: spi); |
33 | |
34 | return aic32x4_probe(dev: &spi->dev, regmap, type); |
35 | } |
36 | |
37 | static void aic32x4_spi_remove(struct spi_device *spi) |
38 | { |
39 | aic32x4_remove(dev: &spi->dev); |
40 | } |
41 | |
42 | static const struct spi_device_id aic32x4_spi_id[] = { |
43 | { "tlv320aic32x4" , (kernel_ulong_t)AIC32X4_TYPE_AIC32X4 }, |
44 | { "tlv320aic32x6" , (kernel_ulong_t)AIC32X4_TYPE_AIC32X6 }, |
45 | { /* sentinel */ } |
46 | }; |
47 | MODULE_DEVICE_TABLE(spi, aic32x4_spi_id); |
48 | |
49 | static const struct of_device_id aic32x4_of_id[] = { |
50 | { .compatible = "ti,tlv320aic32x4" , .data = (void *)AIC32X4_TYPE_AIC32X4 }, |
51 | { .compatible = "ti,tlv320aic32x6" , .data = (void *)AIC32X4_TYPE_AIC32X6 }, |
52 | { /* senitel */ } |
53 | }; |
54 | MODULE_DEVICE_TABLE(of, aic32x4_of_id); |
55 | |
56 | static struct spi_driver aic32x4_spi_driver = { |
57 | .driver = { |
58 | .name = "tlv320aic32x4" , |
59 | .owner = THIS_MODULE, |
60 | .of_match_table = aic32x4_of_id, |
61 | }, |
62 | .probe = aic32x4_spi_probe, |
63 | .remove = aic32x4_spi_remove, |
64 | .id_table = aic32x4_spi_id, |
65 | }; |
66 | |
67 | module_spi_driver(aic32x4_spi_driver); |
68 | |
69 | MODULE_DESCRIPTION("ASoC TLV320AIC32x4 codec driver SPI" ); |
70 | MODULE_AUTHOR("Annaliese McDermond <nh6z@nh6z.net>" ); |
71 | MODULE_LICENSE("GPL" ); |
72 | |