1*2df8e64eSIvan Vecera // SPDX-License-Identifier: GPL-2.0-only
2*2df8e64eSIvan Vecera
3*2df8e64eSIvan Vecera #include <linux/dev_printk.h>
4*2df8e64eSIvan Vecera #include <linux/err.h>
5*2df8e64eSIvan Vecera #include <linux/i2c.h>
6*2df8e64eSIvan Vecera #include <linux/module.h>
7*2df8e64eSIvan Vecera #include <linux/regmap.h>
8*2df8e64eSIvan Vecera
9*2df8e64eSIvan Vecera #include "core.h"
10*2df8e64eSIvan Vecera
zl3073x_i2c_probe(struct i2c_client * client)11*2df8e64eSIvan Vecera static int zl3073x_i2c_probe(struct i2c_client *client)
12*2df8e64eSIvan Vecera {
13*2df8e64eSIvan Vecera struct device *dev = &client->dev;
14*2df8e64eSIvan Vecera struct zl3073x_dev *zldev;
15*2df8e64eSIvan Vecera
16*2df8e64eSIvan Vecera zldev = zl3073x_devm_alloc(dev);
17*2df8e64eSIvan Vecera if (IS_ERR(zldev))
18*2df8e64eSIvan Vecera return PTR_ERR(zldev);
19*2df8e64eSIvan Vecera
20*2df8e64eSIvan Vecera zldev->regmap = devm_regmap_init_i2c(client, &zl3073x_regmap_config);
21*2df8e64eSIvan Vecera if (IS_ERR(zldev->regmap))
22*2df8e64eSIvan Vecera return dev_err_probe(dev, PTR_ERR(zldev->regmap),
23*2df8e64eSIvan Vecera "Failed to initialize regmap\n");
24*2df8e64eSIvan Vecera
25*2df8e64eSIvan Vecera return zl3073x_dev_probe(zldev, i2c_get_match_data(client));
26*2df8e64eSIvan Vecera }
27*2df8e64eSIvan Vecera
28*2df8e64eSIvan Vecera static const struct i2c_device_id zl3073x_i2c_id[] = {
29*2df8e64eSIvan Vecera {
30*2df8e64eSIvan Vecera .name = "zl30731",
31*2df8e64eSIvan Vecera .driver_data = (kernel_ulong_t)&zl30731_chip_info,
32*2df8e64eSIvan Vecera },
33*2df8e64eSIvan Vecera {
34*2df8e64eSIvan Vecera .name = "zl30732",
35*2df8e64eSIvan Vecera .driver_data = (kernel_ulong_t)&zl30732_chip_info,
36*2df8e64eSIvan Vecera },
37*2df8e64eSIvan Vecera {
38*2df8e64eSIvan Vecera .name = "zl30733",
39*2df8e64eSIvan Vecera .driver_data = (kernel_ulong_t)&zl30733_chip_info,
40*2df8e64eSIvan Vecera },
41*2df8e64eSIvan Vecera {
42*2df8e64eSIvan Vecera .name = "zl30734",
43*2df8e64eSIvan Vecera .driver_data = (kernel_ulong_t)&zl30734_chip_info,
44*2df8e64eSIvan Vecera },
45*2df8e64eSIvan Vecera {
46*2df8e64eSIvan Vecera .name = "zl30735",
47*2df8e64eSIvan Vecera .driver_data = (kernel_ulong_t)&zl30735_chip_info,
48*2df8e64eSIvan Vecera },
49*2df8e64eSIvan Vecera { /* sentinel */ }
50*2df8e64eSIvan Vecera };
51*2df8e64eSIvan Vecera MODULE_DEVICE_TABLE(i2c, zl3073x_i2c_id);
52*2df8e64eSIvan Vecera
53*2df8e64eSIvan Vecera static const struct of_device_id zl3073x_i2c_of_match[] = {
54*2df8e64eSIvan Vecera { .compatible = "microchip,zl30731", .data = &zl30731_chip_info },
55*2df8e64eSIvan Vecera { .compatible = "microchip,zl30732", .data = &zl30732_chip_info },
56*2df8e64eSIvan Vecera { .compatible = "microchip,zl30733", .data = &zl30733_chip_info },
57*2df8e64eSIvan Vecera { .compatible = "microchip,zl30734", .data = &zl30734_chip_info },
58*2df8e64eSIvan Vecera { .compatible = "microchip,zl30735", .data = &zl30735_chip_info },
59*2df8e64eSIvan Vecera { /* sentinel */ }
60*2df8e64eSIvan Vecera };
61*2df8e64eSIvan Vecera MODULE_DEVICE_TABLE(of, zl3073x_i2c_of_match);
62*2df8e64eSIvan Vecera
63*2df8e64eSIvan Vecera static struct i2c_driver zl3073x_i2c_driver = {
64*2df8e64eSIvan Vecera .driver = {
65*2df8e64eSIvan Vecera .name = "zl3073x-i2c",
66*2df8e64eSIvan Vecera .of_match_table = zl3073x_i2c_of_match,
67*2df8e64eSIvan Vecera },
68*2df8e64eSIvan Vecera .probe = zl3073x_i2c_probe,
69*2df8e64eSIvan Vecera .id_table = zl3073x_i2c_id,
70*2df8e64eSIvan Vecera };
71*2df8e64eSIvan Vecera module_i2c_driver(zl3073x_i2c_driver);
72*2df8e64eSIvan Vecera
73*2df8e64eSIvan Vecera MODULE_AUTHOR("Ivan Vecera <ivecera@redhat.com>");
74*2df8e64eSIvan Vecera MODULE_DESCRIPTION("Microchip ZL3073x I2C driver");
75*2df8e64eSIvan Vecera MODULE_IMPORT_NS("ZL3073X");
76*2df8e64eSIvan Vecera MODULE_LICENSE("GPL");
77