Linux Audio

Check our new training course

Loading...
v6.8
 1// SPDX-License-Identifier: GPL-2.0-or-later
 2/*
 3 * AD7879-1/AD7889-1 touchscreen (I2C bus)
 4 *
 5 * Copyright (C) 2008-2010 Michael Hennerich, Analog Devices Inc.
 
 
 6 */
 7
 8#include <linux/input.h>	/* BUS_I2C */
 9#include <linux/i2c.h>
10#include <linux/module.h>
11#include <linux/types.h>
12#include <linux/of.h>
13#include <linux/pm.h>
14#include <linux/regmap.h>
15
16#include "ad7879.h"
17
18#define AD7879_DEVID		0x79	/* AD7879-1/AD7889-1 */
19
20static const struct regmap_config ad7879_i2c_regmap_config = {
21	.reg_bits = 8,
22	.val_bits = 16,
23	.max_register = 15,
24};
25
26static int ad7879_i2c_probe(struct i2c_client *client)
 
27{
28	struct regmap *regmap;
29
30	if (!i2c_check_functionality(client->adapter,
31				     I2C_FUNC_SMBUS_WORD_DATA)) {
32		dev_err(&client->dev, "SMBUS Word Data not Supported\n");
33		return -EIO;
34	}
35
36	regmap = devm_regmap_init_i2c(client, &ad7879_i2c_regmap_config);
37	if (IS_ERR(regmap))
38		return PTR_ERR(regmap);
39
40	return ad7879_probe(&client->dev, regmap, client->irq,
41			    BUS_I2C, AD7879_DEVID);
42}
43
44static const struct i2c_device_id ad7879_id[] = {
45	{ "ad7879", 0 },
46	{ "ad7889", 0 },
47	{ }
48};
49MODULE_DEVICE_TABLE(i2c, ad7879_id);
50
51#ifdef CONFIG_OF
52static const struct of_device_id ad7879_i2c_dt_ids[] = {
53	{ .compatible = "adi,ad7879-1", },
54	{ }
55};
56MODULE_DEVICE_TABLE(of, ad7879_i2c_dt_ids);
57#endif
58
59static struct i2c_driver ad7879_i2c_driver = {
60	.driver = {
61		.name		= "ad7879",
62		.dev_groups	= ad7879_groups,
63		.pm		= &ad7879_pm_ops,
64		.of_match_table	= of_match_ptr(ad7879_i2c_dt_ids),
65	},
66	.probe		= ad7879_i2c_probe,
67	.id_table	= ad7879_id,
68};
69
70module_i2c_driver(ad7879_i2c_driver);
71
72MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
73MODULE_DESCRIPTION("AD7879(-1) touchscreen I2C bus driver");
74MODULE_LICENSE("GPL");
v4.17
 
 1/*
 2 * AD7879-1/AD7889-1 touchscreen (I2C bus)
 3 *
 4 * Copyright (C) 2008-2010 Michael Hennerich, Analog Devices Inc.
 5 *
 6 * Licensed under the GPL-2 or later.
 7 */
 8
 9#include <linux/input.h>	/* BUS_I2C */
10#include <linux/i2c.h>
11#include <linux/module.h>
12#include <linux/types.h>
13#include <linux/of.h>
14#include <linux/pm.h>
15#include <linux/regmap.h>
16
17#include "ad7879.h"
18
19#define AD7879_DEVID		0x79	/* AD7879-1/AD7889-1 */
20
21static const struct regmap_config ad7879_i2c_regmap_config = {
22	.reg_bits = 8,
23	.val_bits = 16,
24	.max_register = 15,
25};
26
27static int ad7879_i2c_probe(struct i2c_client *client,
28				      const struct i2c_device_id *id)
29{
30	struct regmap *regmap;
31
32	if (!i2c_check_functionality(client->adapter,
33				     I2C_FUNC_SMBUS_WORD_DATA)) {
34		dev_err(&client->dev, "SMBUS Word Data not Supported\n");
35		return -EIO;
36	}
37
38	regmap = devm_regmap_init_i2c(client, &ad7879_i2c_regmap_config);
39	if (IS_ERR(regmap))
40		return PTR_ERR(regmap);
41
42	return ad7879_probe(&client->dev, regmap, client->irq,
43			    BUS_I2C, AD7879_DEVID);
44}
45
46static const struct i2c_device_id ad7879_id[] = {
47	{ "ad7879", 0 },
48	{ "ad7889", 0 },
49	{ }
50};
51MODULE_DEVICE_TABLE(i2c, ad7879_id);
52
53#ifdef CONFIG_OF
54static const struct of_device_id ad7879_i2c_dt_ids[] = {
55	{ .compatible = "adi,ad7879-1", },
56	{ }
57};
58MODULE_DEVICE_TABLE(of, ad7879_i2c_dt_ids);
59#endif
60
61static struct i2c_driver ad7879_i2c_driver = {
62	.driver = {
63		.name	= "ad7879",
64		.pm	= &ad7879_pm_ops,
65		.of_match_table = of_match_ptr(ad7879_i2c_dt_ids),
 
66	},
67	.probe		= ad7879_i2c_probe,
68	.id_table	= ad7879_id,
69};
70
71module_i2c_driver(ad7879_i2c_driver);
72
73MODULE_AUTHOR("Michael Hennerich <michael.hennerich@analog.com>");
74MODULE_DESCRIPTION("AD7879(-1) touchscreen I2C bus driver");
75MODULE_LICENSE("GPL");