1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | /* |
3 | * Driver for the PCM512x CODECs |
4 | * |
5 | * Author: Mark Brown <broonie@kernel.org> |
6 | * Copyright 2014 Linaro Ltd |
7 | */ |
8 | |
9 | #include <linux/init.h> |
10 | #include <linux/module.h> |
11 | #include <linux/spi/spi.h> |
12 | |
13 | #include "pcm512x.h" |
14 | |
15 | static int pcm512x_spi_probe(struct spi_device *spi) |
16 | { |
17 | struct regmap *regmap; |
18 | int ret; |
19 | |
20 | regmap = devm_regmap_init_spi(spi, &pcm512x_regmap); |
21 | if (IS_ERR(ptr: regmap)) { |
22 | ret = PTR_ERR(ptr: regmap); |
23 | return ret; |
24 | } |
25 | |
26 | return pcm512x_probe(dev: &spi->dev, regmap); |
27 | } |
28 | |
29 | static void pcm512x_spi_remove(struct spi_device *spi) |
30 | { |
31 | pcm512x_remove(dev: &spi->dev); |
32 | } |
33 | |
34 | static const struct spi_device_id pcm512x_spi_id[] = { |
35 | { "pcm5121" , }, |
36 | { "pcm5122" , }, |
37 | { "pcm5141" , }, |
38 | { "pcm5142" , }, |
39 | { }, |
40 | }; |
41 | MODULE_DEVICE_TABLE(spi, pcm512x_spi_id); |
42 | |
43 | static const struct of_device_id pcm512x_of_match[] = { |
44 | { .compatible = "ti,pcm5121" , }, |
45 | { .compatible = "ti,pcm5122" , }, |
46 | { .compatible = "ti,pcm5141" , }, |
47 | { .compatible = "ti,pcm5142" , }, |
48 | { } |
49 | }; |
50 | MODULE_DEVICE_TABLE(of, pcm512x_of_match); |
51 | |
52 | static struct spi_driver pcm512x_spi_driver = { |
53 | .probe = pcm512x_spi_probe, |
54 | .remove = pcm512x_spi_remove, |
55 | .id_table = pcm512x_spi_id, |
56 | .driver = { |
57 | .name = "pcm512x" , |
58 | .of_match_table = pcm512x_of_match, |
59 | .pm = &pcm512x_pm_ops, |
60 | }, |
61 | }; |
62 | |
63 | module_spi_driver(pcm512x_spi_driver); |
64 | |
65 | MODULE_DESCRIPTION("ASoC PCM512x codec driver - SPI" ); |
66 | MODULE_AUTHOR("Mark Brown <broonie@kernel.org>" ); |
67 | MODULE_LICENSE("GPL v2" ); |
68 | |