2019-05-24 12:04:09 +02:00
// SPDX-License-Identifier: GPL-2.0-or-later
2010-06-30 01:40:52 -07:00
/*
* AD7879 - 1 / AD7889 - 1 touchscreen ( I2C bus )
*
* Copyright ( C ) 2008 - 2010 Michael Hennerich , Analog Devices Inc .
*/
# include <linux/input.h> /* BUS_I2C */
# include <linux/i2c.h>
# include <linux/module.h>
# include <linux/types.h>
2016-03-08 10:35:24 -08:00
# include <linux/of.h>
2011-01-06 23:01:02 -08:00
# include <linux/pm.h>
2017-02-16 23:22:38 -08:00
# include <linux/regmap.h>
2010-06-30 01:40:52 -07:00
# include "ad7879.h"
# define AD7879_DEVID 0x79 /* AD7879-1/AD7889-1 */
2017-02-16 23:22:38 -08:00
static const struct regmap_config ad7879_i2c_regmap_config = {
. reg_bits = 8 ,
. val_bits = 16 ,
. max_register = 15 ,
2010-06-30 01:40:52 -07:00
} ;
2022-11-18 23:39:19 +01:00
static int ad7879_i2c_probe ( struct i2c_client * client )
2010-06-30 01:40:52 -07:00
{
2017-02-16 23:22:38 -08:00
struct regmap * regmap ;
2010-06-30 01:40:52 -07:00
if ( ! i2c_check_functionality ( client - > adapter ,
I2C_FUNC_SMBUS_WORD_DATA ) ) {
dev_err ( & client - > dev , " SMBUS Word Data not Supported \n " ) ;
return - EIO ;
}
2017-02-16 23:22:38 -08:00
regmap = devm_regmap_init_i2c ( client , & ad7879_i2c_regmap_config ) ;
if ( IS_ERR ( regmap ) )
return PTR_ERR ( regmap ) ;
2017-02-28 11:43:52 -08:00
return ad7879_probe ( & client - > dev , regmap , client - > irq ,
BUS_I2C , AD7879_DEVID ) ;
2010-06-30 01:40:52 -07:00
}
static const struct i2c_device_id ad7879_id [ ] = {
{ " ad7879 " , 0 } ,
{ " ad7889 " , 0 } ,
{ }
} ;
MODULE_DEVICE_TABLE ( i2c , ad7879_id ) ;
2016-03-08 10:35:24 -08:00
# ifdef CONFIG_OF
static const struct of_device_id ad7879_i2c_dt_ids [ ] = {
{ . compatible = " adi,ad7879-1 " , } ,
{ }
} ;
MODULE_DEVICE_TABLE ( of , ad7879_i2c_dt_ids ) ;
# endif
2010-06-30 01:40:52 -07:00
static struct i2c_driver ad7879_i2c_driver = {
. driver = {
2023-07-28 17:51:15 -07:00
. name = " ad7879 " ,
. dev_groups = ad7879_groups ,
. pm = & ad7879_pm_ops ,
. of_match_table = of_match_ptr ( ad7879_i2c_dt_ids ) ,
2010-06-30 01:40:52 -07:00
} ,
2023-05-17 09:55:42 -07:00
. probe = ad7879_i2c_probe ,
2010-06-30 01:40:52 -07:00
. id_table = ad7879_id ,
} ;
2012-03-16 23:05:41 -07:00
module_i2c_driver ( ad7879_i2c_driver ) ;
2010-06-30 01:40:52 -07:00
2017-02-22 10:34:20 -08:00
MODULE_AUTHOR ( " Michael Hennerich <michael.hennerich@analog.com> " ) ;
2010-06-30 01:40:52 -07:00
MODULE_DESCRIPTION ( " AD7879(-1) touchscreen I2C bus driver " ) ;
MODULE_LICENSE ( " GPL " ) ;