1 | // SPDX-License-Identifier: GPL-2.0-or-later |
2 | /* |
3 | * PCM179X ASoC I2C driver |
4 | * |
5 | * Copyright (c) Teenage Engineering AB 2016 |
6 | * |
7 | * Jacob Siverskog <jacob@teenage.engineering> |
8 | */ |
9 | |
10 | #include <linux/module.h> |
11 | #include <linux/of.h> |
12 | #include <linux/i2c.h> |
13 | #include <linux/regmap.h> |
14 | |
15 | #include "pcm179x.h" |
16 | |
17 | static int pcm179x_i2c_probe(struct i2c_client *client) |
18 | { |
19 | struct regmap *regmap; |
20 | int ret; |
21 | |
22 | regmap = devm_regmap_init_i2c(client, &pcm179x_regmap_config); |
23 | if (IS_ERR(ptr: regmap)) { |
24 | ret = PTR_ERR(ptr: regmap); |
25 | dev_err(&client->dev, "Failed to allocate regmap: %d\n" , ret); |
26 | return ret; |
27 | } |
28 | |
29 | return pcm179x_common_init(dev: &client->dev, regmap); |
30 | } |
31 | |
32 | #ifdef CONFIG_OF |
33 | static const struct of_device_id pcm179x_of_match[] = { |
34 | { .compatible = "ti,pcm1792a" , }, |
35 | { } |
36 | }; |
37 | MODULE_DEVICE_TABLE(of, pcm179x_of_match); |
38 | #endif |
39 | |
40 | static const struct i2c_device_id pcm179x_i2c_ids[] = { |
41 | { "pcm179x" , 0 }, |
42 | { } |
43 | }; |
44 | MODULE_DEVICE_TABLE(i2c, pcm179x_i2c_ids); |
45 | |
46 | static struct i2c_driver pcm179x_i2c_driver = { |
47 | .driver = { |
48 | .name = "pcm179x" , |
49 | .of_match_table = of_match_ptr(pcm179x_of_match), |
50 | }, |
51 | .id_table = pcm179x_i2c_ids, |
52 | .probe = pcm179x_i2c_probe, |
53 | }; |
54 | |
55 | module_i2c_driver(pcm179x_i2c_driver); |
56 | |
57 | MODULE_DESCRIPTION("ASoC PCM179X I2C driver" ); |
58 | MODULE_AUTHOR("Jacob Siverskog <jacob@teenage.engineering>" ); |
59 | MODULE_LICENSE("GPL" ); |
60 | |