2014-03-20 14:18:37 +04:00
/*
* Cirrus Logic CS42448 / CS42888 Audio CODEC DAI I2C driver
*
* Copyright ( C ) 2014 Freescale Semiconductor , Inc .
*
* Author : Nicolin Chen < Guangyu . Chen @ freescale . com >
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed " as is " without any warranty of any
* kind , whether express or implied .
*/
# include <linux/i2c.h>
# include <linux/module.h>
2023-10-06 23:09:10 +03:00
# include <linux/mod_devicetable.h>
2014-03-20 14:18:37 +04:00
# include <linux/pm_runtime.h>
# include <sound/soc.h>
# include "cs42xx8.h"
2022-03-25 20:07:34 +03:00
static int cs42xx8_i2c_probe ( struct i2c_client * i2c )
2014-03-20 14:18:37 +04:00
{
2022-10-31 23:37:23 +03:00
int ret ;
struct cs42xx8_driver_data * drvdata ;
2023-08-28 20:48:56 +03:00
drvdata = ( struct cs42xx8_driver_data * ) i2c_get_match_data ( i2c ) ;
if ( ! drvdata )
return dev_err_probe ( & i2c - > dev , - EINVAL ,
" failed to find driver data \n " ) ;
2022-10-31 23:37:23 +03:00
ret = cs42xx8_probe ( & i2c - > dev ,
devm_regmap_init_i2c ( i2c , & cs42xx8_regmap_config ) , drvdata ) ;
2014-03-20 14:18:37 +04:00
if ( ret )
return ret ;
pm_runtime_enable ( & i2c - > dev ) ;
pm_request_idle ( & i2c - > dev ) ;
return 0 ;
}
2022-08-15 11:02:30 +03:00
static void cs42xx8_i2c_remove ( struct i2c_client * i2c )
2014-03-20 14:18:37 +04:00
{
pm_runtime_disable ( & i2c - > dev ) ;
}
2022-10-31 23:37:23 +03:00
static const struct of_device_id cs42xx8_of_match [ ] = {
{ . compatible = " cirrus,cs42448 " , . data = & cs42448_data , } ,
{ . compatible = " cirrus,cs42888 " , . data = & cs42888_data , } ,
{ /* sentinel */ }
} ;
MODULE_DEVICE_TABLE ( of , cs42xx8_of_match ) ;
static const struct i2c_device_id cs42xx8_i2c_id [ ] = {
2014-03-20 14:18:37 +04:00
{ " cs42448 " , ( kernel_ulong_t ) & cs42448_data } ,
{ " cs42888 " , ( kernel_ulong_t ) & cs42888_data } ,
{ }
} ;
MODULE_DEVICE_TABLE ( i2c , cs42xx8_i2c_id ) ;
static struct i2c_driver cs42xx8_i2c_driver = {
. driver = {
. name = " cs42xx8 " ,
. pm = & cs42xx8_pm ,
2015-06-25 16:44:13 +03:00
. of_match_table = cs42xx8_of_match ,
2014-03-20 14:18:37 +04:00
} ,
2023-04-25 12:57:16 +03:00
. probe = cs42xx8_i2c_probe ,
2014-03-20 14:18:37 +04:00
. remove = cs42xx8_i2c_remove ,
. id_table = cs42xx8_i2c_id ,
} ;
module_i2c_driver ( cs42xx8_i2c_driver ) ;
MODULE_DESCRIPTION ( " Cirrus Logic CS42448/CS42888 ALSA SoC Codec I2C Driver " ) ;
MODULE_AUTHOR ( " Freescale Semiconductor, Inc. " ) ;
MODULE_LICENSE ( " GPL " ) ;