2022-06-07 17:11:13 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2016-08-31 11:58:10 +03:00
/*
2020-07-22 22:24:54 +03:00
* Copyright ( C ) 2016 Texas Instruments Incorporated - https : //www.ti.com/
2016-08-31 11:58:10 +03:00
*
* Author : Keerthy < j - keerthy @ ti . com >
*/
# include <linux/interrupt.h>
# include <linux/mfd/core.h>
2023-07-14 20:47:27 +03:00
# include <linux/mod_devicetable.h>
2016-08-31 11:58:10 +03:00
# include <linux/module.h>
# include <linux/regmap.h>
# include <linux/mfd/lp873x.h>
static const struct regmap_config lp873x_regmap_config = {
. reg_bits = 8 ,
. val_bits = 8 ,
. max_register = LP873X_REG_MAX ,
} ;
static const struct mfd_cell lp873x_cells [ ] = {
{ . name = " lp873x-regulator " , } ,
{ . name = " lp873x-gpio " , } ,
} ;
2022-11-19 01:42:48 +03:00
static int lp873x_probe ( struct i2c_client * client )
2016-08-31 11:58:10 +03:00
{
struct lp873x * lp873 ;
int ret ;
unsigned int otpid ;
lp873 = devm_kzalloc ( & client - > dev , sizeof ( * lp873 ) , GFP_KERNEL ) ;
if ( ! lp873 )
return - ENOMEM ;
lp873 - > dev = & client - > dev ;
lp873 - > regmap = devm_regmap_init_i2c ( client , & lp873x_regmap_config ) ;
if ( IS_ERR ( lp873 - > regmap ) ) {
ret = PTR_ERR ( lp873 - > regmap ) ;
dev_err ( lp873 - > dev ,
" Failed to initialize register map: %d \n " , ret ) ;
return ret ;
}
ret = regmap_read ( lp873 - > regmap , LP873X_REG_OTP_REV , & otpid ) ;
if ( ret ) {
dev_err ( lp873 - > dev , " Failed to read OTP ID \n " ) ;
return ret ;
}
lp873 - > rev = otpid & LP873X_OTP_REV_OTP_ID ;
i2c_set_clientdata ( client , lp873 ) ;
ret = mfd_add_devices ( lp873 - > dev , PLATFORM_DEVID_AUTO , lp873x_cells ,
ARRAY_SIZE ( lp873x_cells ) , NULL , 0 , NULL ) ;
return ret ;
}
static const struct of_device_id of_lp873x_match_table [ ] = {
{ . compatible = " ti,lp8733 " , } ,
{ . compatible = " ti,lp8732 " , } ,
{ }
} ;
MODULE_DEVICE_TABLE ( of , of_lp873x_match_table ) ;
static const struct i2c_device_id lp873x_id_table [ ] = {
{ " lp873x " , 0 } ,
{ } ,
} ;
MODULE_DEVICE_TABLE ( i2c , lp873x_id_table ) ;
static struct i2c_driver lp873x_driver = {
. driver = {
. name = " lp873x " ,
. of_match_table = of_lp873x_match_table ,
} ,
2023-05-15 21:27:52 +03:00
. probe = lp873x_probe ,
2016-08-31 11:58:10 +03:00
. id_table = lp873x_id_table ,
} ;
module_i2c_driver ( lp873x_driver ) ;
MODULE_AUTHOR ( " J Keerthy <j-keerthy@ti.com> " ) ;
MODULE_DESCRIPTION ( " LP873X chip family Multi-Function Device driver " ) ;
MODULE_LICENSE ( " GPL v2 " ) ;