2018-09-04 17:12:32 +03:00
// SPDX-License-Identifier: GPL-2.0+
/*
* ADXL372 3 - Axis Digital Accelerometer I2C driver
*
* Copyright 2018 Analog Devices Inc .
*/
# include <linux/i2c.h>
2020-07-22 10:30:03 +03:00
# include <linux/mod_devicetable.h>
2018-09-04 17:12:32 +03:00
# include <linux/module.h>
# include <linux/regmap.h>
# include "adxl372.h"
static const struct regmap_config adxl372_regmap_config = {
. reg_bits = 8 ,
. val_bits = 8 ,
. readable_noinc_reg = adxl372_readable_noinc_reg ,
} ;
2022-11-19 01:36:23 +03:00
static int adxl372_i2c_probe ( struct i2c_client * client )
2018-09-04 17:12:32 +03:00
{
2022-11-19 01:36:23 +03:00
const struct i2c_device_id * id = i2c_client_get_device_id ( client ) ;
2018-09-04 17:12:32 +03:00
struct regmap * regmap ;
unsigned int regval ;
int ret ;
regmap = devm_regmap_init_i2c ( client , & adxl372_regmap_config ) ;
if ( IS_ERR ( regmap ) )
return PTR_ERR ( regmap ) ;
ret = regmap_read ( regmap , ADXL372_REVID , & regval ) ;
if ( ret < 0 )
return ret ;
/* Starting with the 3rd revision an I2C chip bug was fixed */
if ( regval < 3 )
dev_warn ( & client - > dev ,
" I2C might not work properly with other devices on the bus " ) ;
return adxl372_probe ( & client - > dev , regmap , client - > irq , id - > name ) ;
}
static const struct i2c_device_id adxl372_i2c_id [ ] = {
{ " adxl372 " , 0 } ,
{ }
} ;
MODULE_DEVICE_TABLE ( i2c , adxl372_i2c_id ) ;
2020-07-22 10:30:03 +03:00
static const struct of_device_id adxl372_of_match [ ] = {
{ . compatible = " adi,adxl372 " } ,
{ }
} ;
MODULE_DEVICE_TABLE ( of , adxl372_of_match ) ;
2018-09-04 17:12:32 +03:00
static struct i2c_driver adxl372_i2c_driver = {
. driver = {
. name = " adxl372_i2c " ,
2020-07-22 10:30:03 +03:00
. of_match_table = adxl372_of_match ,
2018-09-04 17:12:32 +03:00
} ,
2023-05-15 23:50:48 +03:00
. probe = adxl372_i2c_probe ,
2018-09-04 17:12:32 +03:00
. id_table = adxl372_i2c_id ,
} ;
module_i2c_driver ( adxl372_i2c_driver ) ;
MODULE_AUTHOR ( " Stefan Popa <stefan.popa@analog.com> " ) ;
MODULE_DESCRIPTION ( " Analog Devices ADXL372 3-axis accelerometer I2C driver " ) ;
MODULE_LICENSE ( " GPL " ) ;
2022-01-16 21:05:30 +03:00
MODULE_IMPORT_NS ( IIO_ADXL372 ) ;