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 / AD7889 touchscreen ( SPI bus )
*
* Copyright ( C ) 2008 - 2010 Michael Hennerich , Analog Devices Inc .
*/
# include <linux/input.h> /* BUS_SPI */
2011-01-20 22:48:44 -08:00
# include <linux/pm.h>
2010-06-30 01:40:52 -07:00
# include <linux/spi/spi.h>
2011-07-03 13:53:48 -04:00
# include <linux/module.h>
2016-03-08 10:35:24 -08:00
# include <linux/of.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 0x7A /* AD7879/AD7889 */
# define MAX_SPI_FREQ_HZ 5000000
2017-02-16 23:22:38 -08:00
# define AD7879_CMD_MAGIC 0xE0
# define AD7879_CMD_READ BIT(2)
2010-06-30 01:40:52 -07:00
2017-02-16 23:22:38 -08:00
static const struct regmap_config ad7879_spi_regmap_config = {
. reg_bits = 16 ,
. val_bits = 16 ,
. max_register = 15 ,
. read_flag_mask = AD7879_CMD_MAGIC | AD7879_CMD_READ ,
. write_flag_mask = AD7879_CMD_MAGIC ,
2010-06-30 01:40:52 -07:00
} ;
2012-11-23 21:38:25 -08:00
static int ad7879_spi_probe ( struct spi_device * spi )
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
/* don't exceed max specified SPI CLK frequency */
if ( spi - > max_speed_hz > MAX_SPI_FREQ_HZ ) {
dev_err ( & spi - > dev , " SPI CLK %d Hz? \n " , spi - > max_speed_hz ) ;
return - EINVAL ;
}
2017-02-16 23:22:38 -08:00
regmap = devm_regmap_init_spi ( spi , & ad7879_spi_regmap_config ) ;
if ( IS_ERR ( regmap ) )
return PTR_ERR ( regmap ) ;
2017-02-28 11:43:52 -08:00
return ad7879_probe ( & spi - > dev , regmap , spi - > irq , BUS_SPI , AD7879_DEVID ) ;
2010-06-30 01:40:52 -07:00
}
2016-03-08 10:35:24 -08:00
# ifdef CONFIG_OF
static const struct of_device_id ad7879_spi_dt_ids [ ] = {
{ . compatible = " adi,ad7879 " , } ,
{ }
} ;
MODULE_DEVICE_TABLE ( of , ad7879_spi_dt_ids ) ;
# endif
2010-06-30 01:40:52 -07:00
static struct spi_driver ad7879_spi_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_spi_dt_ids ) ,
2010-06-30 01:40:52 -07:00
} ,
. probe = ad7879_spi_probe ,
} ;
2012-03-16 23:05:26 -07:00
module_spi_driver ( ad7879_spi_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 SPI bus driver " ) ;
MODULE_LICENSE ( " GPL " ) ;
MODULE_ALIAS ( " spi:ad7879 " ) ;