2019-05-28 09:57:06 -07:00
// SPDX-License-Identifier: GPL-2.0-only
2017-01-10 22:55:18 +01:00
/*
* STMicroelectronics st_lsm6dsx i2c driver
*
* Copyright 2016 STMicroelectronics Inc .
*
* Lorenzo Bianconi < lorenzo . bianconi @ st . com >
* Denis Ciocca < denis . ciocca @ st . com >
*/
# include <linux/kernel.h>
# include <linux/module.h>
# include <linux/i2c.h>
# include <linux/slab.h>
2018-01-01 19:54:44 +01:00
# include <linux/regmap.h>
2017-01-10 22:55:18 +01:00
# include "st_lsm6dsx.h"
2018-01-01 19:54:44 +01:00
static const struct regmap_config st_lsm6dsx_i2c_regmap_config = {
. reg_bits = 8 ,
. val_bits = 8 ,
2017-01-10 22:55:18 +01:00
} ;
static int st_lsm6dsx_i2c_probe ( struct i2c_client * client ,
const struct i2c_device_id * id )
{
2018-01-01 19:54:44 +01:00
int hw_id = id - > driver_data ;
struct regmap * regmap ;
regmap = devm_regmap_init_i2c ( client , & st_lsm6dsx_i2c_regmap_config ) ;
if ( IS_ERR ( regmap ) ) {
2021-03-12 15:47:43 +02:00
dev_err ( & client - > dev , " Failed to register i2c regmap %ld \n " , PTR_ERR ( regmap ) ) ;
2018-01-01 19:54:44 +01:00
return PTR_ERR ( regmap ) ;
}
2019-06-08 14:30:08 +02:00
return st_lsm6dsx_probe ( & client - > dev , client - > irq , hw_id , regmap ) ;
2017-01-10 22:55:18 +01:00
}
static const struct of_device_id st_lsm6dsx_i2c_of_match [ ] = {
{
. compatible = " st,lsm6ds3 " ,
. data = ( void * ) ST_LSM6DS3_ID ,
} ,
2017-01-29 11:49:27 +01:00
{
. compatible = " st,lsm6ds3h " ,
. data = ( void * ) ST_LSM6DS3H_ID ,
} ,
2017-01-29 11:49:25 +01:00
{
. compatible = " st,lsm6dsl " ,
. data = ( void * ) ST_LSM6DSL_ID ,
} ,
2017-01-10 22:55:18 +01:00
{
. compatible = " st,lsm6dsm " ,
. data = ( void * ) ST_LSM6DSM_ID ,
} ,
2018-03-30 22:33:50 +02:00
{
. compatible = " st,ism330dlc " ,
. data = ( void * ) ST_ISM330DLC_ID ,
} ,
2018-08-30 22:52:58 +02:00
{
. compatible = " st,lsm6dso " ,
. data = ( void * ) ST_LSM6DSO_ID ,
} ,
2019-02-21 16:20:20 +01:00
{
. compatible = " st,asm330lhh " ,
. data = ( void * ) ST_ASM330LHH_ID ,
} ,
2019-03-15 11:08:24 +01:00
{
. compatible = " st,lsm6dsox " ,
. data = ( void * ) ST_LSM6DSOX_ID ,
} ,
2019-04-04 18:02:34 +02:00
{
. compatible = " st,lsm6dsr " ,
. data = ( void * ) ST_LSM6DSR_ID ,
} ,
2019-06-29 12:13:53 +02:00
{
. compatible = " st,lsm6ds3tr-c " ,
. data = ( void * ) ST_LSM6DS3TRC_ID ,
} ,
2019-08-05 12:18:43 +02:00
{
. compatible = " st,ism330dhcx " ,
. data = ( void * ) ST_ISM330DHCX_ID ,
} ,
2019-08-21 15:25:19 +02:00
{
. compatible = " st,lsm9ds1-imu " ,
. data = ( void * ) ST_LSM9DS1_ID ,
} ,
2019-10-07 11:43:37 +02:00
{
. compatible = " st,lsm6ds0 " ,
. data = ( void * ) ST_LSM6DS0_ID ,
} ,
2019-10-24 17:42:33 +02:00
{
. compatible = " st,lsm6dsrx " ,
. data = ( void * ) ST_LSM6DSRX_ID ,
} ,
2020-10-06 14:07:41 +02:00
{
. compatible = " st,lsm6dst " ,
. data = ( void * ) ST_LSM6DST_ID ,
} ,
2020-11-29 10:43:06 +01:00
{
. compatible = " st,lsm6dsop " ,
. data = ( void * ) ST_LSM6DSOP_ID ,
} ,
2022-04-04 21:24:43 +02:00
{
. compatible = " st,asm330lhhx " ,
. data = ( void * ) ST_ASM330LHHX_ID ,
} ,
2022-09-15 19:34:59 +02:00
{
. compatible = " st,lsm6dstx " ,
. data = ( void * ) ST_LSM6DSTX_ID ,
} ,
2017-01-10 22:55:18 +01:00
{ } ,
} ;
MODULE_DEVICE_TABLE ( of , st_lsm6dsx_i2c_of_match ) ;
static const struct i2c_device_id st_lsm6dsx_i2c_id_table [ ] = {
{ ST_LSM6DS3_DEV_NAME , ST_LSM6DS3_ID } ,
2017-01-29 11:49:27 +01:00
{ ST_LSM6DS3H_DEV_NAME , ST_LSM6DS3H_ID } ,
2017-01-29 11:49:25 +01:00
{ ST_LSM6DSL_DEV_NAME , ST_LSM6DSL_ID } ,
2017-01-10 22:55:18 +01:00
{ ST_LSM6DSM_DEV_NAME , ST_LSM6DSM_ID } ,
2018-03-30 22:33:50 +02:00
{ ST_ISM330DLC_DEV_NAME , ST_ISM330DLC_ID } ,
2018-08-30 22:52:58 +02:00
{ ST_LSM6DSO_DEV_NAME , ST_LSM6DSO_ID } ,
2019-02-21 16:20:20 +01:00
{ ST_ASM330LHH_DEV_NAME , ST_ASM330LHH_ID } ,
2019-03-15 11:08:24 +01:00
{ ST_LSM6DSOX_DEV_NAME , ST_LSM6DSOX_ID } ,
2019-04-04 18:02:34 +02:00
{ ST_LSM6DSR_DEV_NAME , ST_LSM6DSR_ID } ,
2019-06-29 12:13:53 +02:00
{ ST_LSM6DS3TRC_DEV_NAME , ST_LSM6DS3TRC_ID } ,
2019-08-05 12:18:43 +02:00
{ ST_ISM330DHCX_DEV_NAME , ST_ISM330DHCX_ID } ,
2019-08-21 15:25:19 +02:00
{ ST_LSM9DS1_DEV_NAME , ST_LSM9DS1_ID } ,
2019-10-07 11:43:37 +02:00
{ ST_LSM6DS0_DEV_NAME , ST_LSM6DS0_ID } ,
2019-10-24 17:42:33 +02:00
{ ST_LSM6DSRX_DEV_NAME , ST_LSM6DSRX_ID } ,
2020-10-06 14:07:41 +02:00
{ ST_LSM6DST_DEV_NAME , ST_LSM6DST_ID } ,
2020-11-29 10:43:06 +01:00
{ ST_LSM6DSOP_DEV_NAME , ST_LSM6DSOP_ID } ,
2022-04-04 21:24:43 +02:00
{ ST_ASM330LHHX_DEV_NAME , ST_ASM330LHHX_ID } ,
2022-09-15 19:34:59 +02:00
{ ST_LSM6DSTX_DEV_NAME , ST_LSM6DSTX_ID } ,
2017-01-10 22:55:18 +01:00
{ } ,
} ;
MODULE_DEVICE_TABLE ( i2c , st_lsm6dsx_i2c_id_table ) ;
static struct i2c_driver st_lsm6dsx_driver = {
. driver = {
. name = " st_lsm6dsx_i2c " ,
2022-06-04 17:12:22 +01:00
. pm = pm_sleep_ptr ( & st_lsm6dsx_pm_ops ) ,
2019-12-16 20:19:24 +02:00
. of_match_table = st_lsm6dsx_i2c_of_match ,
2017-01-10 22:55:18 +01:00
} ,
. probe = st_lsm6dsx_i2c_probe ,
. id_table = st_lsm6dsx_i2c_id_table ,
} ;
module_i2c_driver ( st_lsm6dsx_driver ) ;
MODULE_AUTHOR ( " Lorenzo Bianconi <lorenzo.bianconi@st.com> " ) ;
MODULE_AUTHOR ( " Denis Ciocca <denis.ciocca@st.com> " ) ;
MODULE_DESCRIPTION ( " STMicroelectronics st_lsm6dsx i2c driver " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;
2022-06-04 17:12:23 +01:00
MODULE_IMPORT_NS ( IIO_LSM6DSX ) ;