1 | /* SPDX-License-Identifier: GPL-2.0-only |
2 | * |
3 | * ALSA SoC TLV320AIC3x codec driver I2C 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/i2c.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 const struct i2c_device_id aic3x_i2c_id[] = { |
21 | { "tlv320aic3x" , AIC3X_MODEL_3X }, |
22 | { "tlv320aic33" , AIC3X_MODEL_33 }, |
23 | { "tlv320aic3007" , AIC3X_MODEL_3007 }, |
24 | { "tlv320aic3104" , AIC3X_MODEL_3104 }, |
25 | { "tlv320aic3106" , AIC3X_MODEL_3106 }, |
26 | { } |
27 | }; |
28 | MODULE_DEVICE_TABLE(i2c, aic3x_i2c_id); |
29 | |
30 | static int aic3x_i2c_probe(struct i2c_client *i2c) |
31 | { |
32 | struct regmap *regmap; |
33 | struct regmap_config config; |
34 | const struct i2c_device_id *id = i2c_match_id(id: aic3x_i2c_id, client: i2c); |
35 | |
36 | config = aic3x_regmap; |
37 | config.reg_bits = 8; |
38 | config.val_bits = 8; |
39 | |
40 | regmap = devm_regmap_init_i2c(i2c, &config); |
41 | return aic3x_probe(dev: &i2c->dev, regmap, driver_data: id->driver_data); |
42 | } |
43 | |
44 | static void aic3x_i2c_remove(struct i2c_client *i2c) |
45 | { |
46 | aic3x_remove(dev: &i2c->dev); |
47 | } |
48 | |
49 | static const struct of_device_id aic3x_of_id[] = { |
50 | { .compatible = "ti,tlv320aic3x" , }, |
51 | { .compatible = "ti,tlv320aic33" }, |
52 | { .compatible = "ti,tlv320aic3007" }, |
53 | { .compatible = "ti,tlv320aic3104" }, |
54 | { .compatible = "ti,tlv320aic3106" }, |
55 | {}, |
56 | }; |
57 | MODULE_DEVICE_TABLE(of, aic3x_of_id); |
58 | |
59 | static struct i2c_driver aic3x_i2c_driver = { |
60 | .driver = { |
61 | .name = "tlv320aic3x" , |
62 | .of_match_table = aic3x_of_id, |
63 | }, |
64 | .probe = aic3x_i2c_probe, |
65 | .remove = aic3x_i2c_remove, |
66 | .id_table = aic3x_i2c_id, |
67 | }; |
68 | |
69 | module_i2c_driver(aic3x_i2c_driver); |
70 | |
71 | MODULE_DESCRIPTION("ASoC TLV320AIC3x codec driver I2C" ); |
72 | MODULE_AUTHOR("Arun KS <arunks@mistralsolutions.com>" ); |
73 | MODULE_LICENSE("GPL" ); |
74 | |