2010-06-30 01:40:52 -07:00
/*
* AD7879 - 1 / AD7889 - 1 touchscreen ( I2C bus )
*
* Copyright ( C ) 2008 - 2010 Michael Hennerich , Analog Devices Inc .
*
* Licensed under the GPL - 2 or later .
*/
# 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
} ;
2012-11-23 21:38:25 -08:00
static int ad7879_i2c_probe ( struct i2c_client * client ,
2010-06-30 01:40:52 -07:00
const struct i2c_device_id * id )
{
struct ad7879 * ts ;
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 ) ;
ts = ad7879_probe ( & client - > dev , regmap , client - > irq ,
BUS_I2C , AD7879_DEVID ) ;
2010-06-30 01:40:52 -07:00
if ( IS_ERR ( ts ) )
return PTR_ERR ( ts ) ;
return 0 ;
}
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 = {
. name = " ad7879 " ,
2011-11-14 00:32:09 -08:00
. pm = & ad7879_pm_ops ,
2016-03-08 10:35:24 -08:00
. of_match_table = of_match_ptr ( ad7879_i2c_dt_ids ) ,
2010-06-30 01:40:52 -07:00
} ,
. probe = ad7879_i2c_probe ,
. 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
MODULE_AUTHOR ( " Michael Hennerich <hennerich@blackfin.uclinux.org> " ) ;
MODULE_DESCRIPTION ( " AD7879(-1) touchscreen I2C bus driver " ) ;
MODULE_LICENSE ( " GPL " ) ;