2019-07-19 15:30:55 +02:00
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright ( c ) 2018 Synopsys , Inc . and / or its affiliates .
*
* Author : Vitor Soares < vitor . soares @ synopsys . com >
*/
# include <linux/kernel.h>
2022-05-07 20:34:40 +03:00
# include <linux/mod_devicetable.h>
2019-07-19 15:30:55 +02:00
# include <linux/module.h>
# include <linux/i3c/device.h>
# include <linux/i3c/master.h>
# include <linux/slab.h>
# include <linux/regmap.h>
# include "st_lsm6dsx.h"
static const struct i3c_device_id st_lsm6dsx_i3c_ids [ ] = {
I3C_DEVICE ( 0x0104 , 0x006C , ( void * ) ST_LSM6DSO_ID ) ,
I3C_DEVICE ( 0x0104 , 0x006B , ( void * ) ST_LSM6DSR_ID ) ,
{ /* sentinel */ } ,
} ;
MODULE_DEVICE_TABLE ( i3c , st_lsm6dsx_i3c_ids ) ;
static int st_lsm6dsx_i3c_probe ( struct i3c_device * i3cdev )
{
struct regmap_config st_lsm6dsx_i3c_regmap_config = {
. reg_bits = 8 ,
. val_bits = 8 ,
} ;
const struct i3c_device_id * id = i3c_device_match_id ( i3cdev ,
st_lsm6dsx_i3c_ids ) ;
struct regmap * regmap ;
regmap = devm_regmap_init_i3c ( i3cdev , & st_lsm6dsx_i3c_regmap_config ) ;
if ( IS_ERR ( regmap ) ) {
2021-03-12 15:47:43 +02:00
dev_err ( & i3cdev - > dev , " Failed to register i3c regmap %ld \n " , PTR_ERR ( regmap ) ) ;
2019-07-19 15:30:55 +02:00
return PTR_ERR ( regmap ) ;
}
return st_lsm6dsx_probe ( & i3cdev - > dev , 0 , ( uintptr_t ) id - > data , regmap ) ;
}
static struct i3c_driver st_lsm6dsx_driver = {
. driver = {
. name = " st_lsm6dsx_i3c " ,
2022-06-04 17:12:22 +01:00
. pm = pm_sleep_ptr ( & st_lsm6dsx_pm_ops ) ,
2019-07-19 15:30:55 +02:00
} ,
. probe = st_lsm6dsx_i3c_probe ,
. id_table = st_lsm6dsx_i3c_ids ,
} ;
module_i3c_driver ( st_lsm6dsx_driver ) ;
MODULE_AUTHOR ( " Vitor Soares <vitor.soares@synopsys.com> " ) ;
MODULE_DESCRIPTION ( " STMicroelectronics st_lsm6dsx i3c driver " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;
2022-06-04 17:12:23 +01:00
MODULE_IMPORT_NS ( IIO_LSM6DSX ) ;