2023-05-10 12:25:34 +03:00
// SPDX-License-Identifier: GPL-2.0
2022-04-05 16:54:19 +03:00
//
// cs35l45-i2c.c -- CS35L45 I2C driver
//
// Copyright 2019-2022 Cirrus Logic, Inc.
//
// Author: James Schulman <james.schulman@cirrus.com>
# include <linux/device.h>
# include <linux/module.h>
# include <linux/i2c.h>
# include <linux/regmap.h>
# include "cs35l45.h"
static int cs35l45_i2c_probe ( struct i2c_client * client )
{
struct cs35l45_private * cs35l45 ;
struct device * dev = & client - > dev ;
int ret ;
cs35l45 = devm_kzalloc ( dev , sizeof ( struct cs35l45_private ) , GFP_KERNEL ) ;
if ( ! cs35l45 )
return - ENOMEM ;
i2c_set_clientdata ( client , cs35l45 ) ;
cs35l45 - > regmap = devm_regmap_init_i2c ( client , & cs35l45_i2c_regmap ) ;
if ( IS_ERR ( cs35l45 - > regmap ) ) {
ret = PTR_ERR ( cs35l45 - > regmap ) ;
dev_err ( dev , " Failed to allocate register map: %d \n " , ret ) ;
return ret ;
}
cs35l45 - > dev = dev ;
2023-03-15 18:47:20 +03:00
cs35l45 - > irq = client - > irq ;
2023-03-15 18:47:22 +03:00
cs35l45 - > bus_type = CONTROL_BUS_I2C ;
cs35l45 - > i2c_addr = client - > addr ;
2022-04-05 16:54:19 +03:00
return cs35l45_probe ( cs35l45 ) ;
}
2022-08-15 11:02:30 +03:00
static void cs35l45_i2c_remove ( struct i2c_client * client )
2022-04-05 16:54:19 +03:00
{
struct cs35l45_private * cs35l45 = i2c_get_clientdata ( client ) ;
2022-05-20 20:33:49 +03:00
cs35l45_remove ( cs35l45 ) ;
2022-04-05 16:54:19 +03:00
}
static const struct of_device_id cs35l45_of_match [ ] = {
{ . compatible = " cirrus,cs35l45 " } ,
{ } ,
} ;
MODULE_DEVICE_TABLE ( of , cs35l45_of_match ) ;
static const struct i2c_device_id cs35l45_id_i2c [ ] = {
{ " cs35l45 " , 0 } ,
{ }
} ;
MODULE_DEVICE_TABLE ( i2c , cs35l45_id_i2c ) ;
static struct i2c_driver cs35l45_i2c_driver = {
. driver = {
. name = " cs35l45 " ,
. of_match_table = cs35l45_of_match ,
2023-12-06 19:03:16 +03:00
. pm = pm_ptr ( & cs35l45_pm_ops ) ,
2022-04-05 16:54:19 +03:00
} ,
. id_table = cs35l45_id_i2c ,
2023-04-25 12:57:16 +03:00
. probe = cs35l45_i2c_probe ,
2022-04-05 16:54:19 +03:00
. remove = cs35l45_i2c_remove ,
} ;
module_i2c_driver ( cs35l45_i2c_driver ) ;
MODULE_DESCRIPTION ( " I2C CS35L45 driver " ) ;
MODULE_AUTHOR ( " James Schulman, Cirrus Logic Inc, <james.schulman@cirrus.com> " ) ;
2023-05-10 12:25:34 +03:00
MODULE_LICENSE ( " GPL " ) ;
2022-04-11 19:59:29 +03:00
MODULE_IMPORT_NS ( SND_SOC_CS35L45 ) ;