1 | // SPDX-License-Identifier: GPL-2.0 |
2 | // |
3 | // CS35l41 HDA I2C driver |
4 | // |
5 | // Copyright 2021 Cirrus Logic, Inc. |
6 | // |
7 | // Author: Lucas Tanure <tanureal@opensource.cirrus.com> |
8 | |
9 | #include <linux/mod_devicetable.h> |
10 | #include <linux/module.h> |
11 | #include <linux/i2c.h> |
12 | |
13 | #include "cs35l41_hda.h" |
14 | |
15 | static int cs35l41_hda_i2c_probe(struct i2c_client *clt) |
16 | { |
17 | const char *device_name; |
18 | |
19 | /* |
20 | * Compare against the device name so it works for SPI, normal ACPI |
21 | * and for ACPI by serial-multi-instantiate matching cases. |
22 | */ |
23 | if (strstr(dev_name(dev: &clt->dev), "CLSA0100" )) |
24 | device_name = "CLSA0100" ; |
25 | else if (strstr(dev_name(dev: &clt->dev), "CLSA0101" )) |
26 | device_name = "CLSA0101" ; |
27 | else if (strstr(dev_name(dev: &clt->dev), "CSC3551" )) |
28 | device_name = "CSC3551" ; |
29 | else |
30 | return -ENODEV; |
31 | |
32 | return cs35l41_hda_probe(dev: &clt->dev, device_name, id: clt->addr, irq: clt->irq, |
33 | devm_regmap_init_i2c(clt, &cs35l41_regmap_i2c), control_bus: I2C); |
34 | } |
35 | |
36 | static void cs35l41_hda_i2c_remove(struct i2c_client *clt) |
37 | { |
38 | cs35l41_hda_remove(dev: &clt->dev); |
39 | } |
40 | |
41 | static const struct i2c_device_id cs35l41_hda_i2c_id[] = { |
42 | { "cs35l41-hda" , 0 }, |
43 | {} |
44 | }; |
45 | |
46 | static const struct acpi_device_id cs35l41_acpi_hda_match[] = { |
47 | {"CLSA0100" , 0 }, |
48 | {"CLSA0101" , 0 }, |
49 | {"CSC3551" , 0 }, |
50 | {} |
51 | }; |
52 | MODULE_DEVICE_TABLE(acpi, cs35l41_acpi_hda_match); |
53 | |
54 | static struct i2c_driver cs35l41_i2c_driver = { |
55 | .driver = { |
56 | .name = "cs35l41-hda" , |
57 | .acpi_match_table = cs35l41_acpi_hda_match, |
58 | .pm = &cs35l41_hda_pm_ops, |
59 | }, |
60 | .id_table = cs35l41_hda_i2c_id, |
61 | .probe = cs35l41_hda_i2c_probe, |
62 | .remove = cs35l41_hda_i2c_remove, |
63 | }; |
64 | module_i2c_driver(cs35l41_i2c_driver); |
65 | |
66 | MODULE_DESCRIPTION("HDA CS35L41 driver" ); |
67 | MODULE_IMPORT_NS(SND_HDA_SCODEC_CS35L41); |
68 | MODULE_AUTHOR("Lucas Tanure <tanureal@opensource.cirrus.com>" ); |
69 | MODULE_LICENSE("GPL" ); |
70 | |