2019-05-27 09:55:21 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2014-03-07 07:44:08 +04:00
/*
* Driver for the PCM512x CODECs
*
2017-09-07 16:22:48 +03:00
* Author : Mark Brown < broonie @ kernel . org >
2014-03-07 07:44:08 +04:00
* Copyright 2014 Linaro Ltd
*/
# include <linux/init.h>
# include <linux/module.h>
# include <linux/i2c.h>
2018-05-18 01:53:26 +03:00
# include <linux/acpi.h>
2014-03-07 07:44:08 +04:00
# include "pcm512x.h"
2022-04-05 19:58:30 +03:00
static int pcm512x_i2c_probe ( struct i2c_client * i2c )
2014-03-07 07:44:08 +04:00
{
struct regmap * regmap ;
2014-12-08 18:33:11 +03:00
struct regmap_config config = pcm512x_regmap ;
2014-03-07 07:44:08 +04:00
2014-12-08 18:33:11 +03:00
/* msb needs to be set to enable auto-increment of addresses */
config . read_flag_mask = 0x80 ;
config . write_flag_mask = 0x80 ;
regmap = devm_regmap_init_i2c ( i2c , & config ) ;
2014-03-07 07:44:08 +04:00
if ( IS_ERR ( regmap ) )
return PTR_ERR ( regmap ) ;
return pcm512x_probe ( & i2c - > dev , regmap ) ;
}
static int pcm512x_i2c_remove ( struct i2c_client * i2c )
{
pcm512x_remove ( & i2c - > dev ) ;
return 0 ;
}
static const struct i2c_device_id pcm512x_i2c_id [ ] = {
{ " pcm5121 " , } ,
{ " pcm5122 " , } ,
2014-12-09 11:28:09 +03:00
{ " pcm5141 " , } ,
{ " pcm5142 " , } ,
2014-03-07 07:44:08 +04:00
{ }
} ;
MODULE_DEVICE_TABLE ( i2c , pcm512x_i2c_id ) ;
2018-05-18 01:53:26 +03:00
# if defined(CONFIG_OF)
2014-03-07 07:44:08 +04:00
static const struct of_device_id pcm512x_of_match [ ] = {
{ . compatible = " ti,pcm5121 " , } ,
{ . compatible = " ti,pcm5122 " , } ,
2014-12-09 11:28:09 +03:00
{ . compatible = " ti,pcm5141 " , } ,
{ . compatible = " ti,pcm5142 " , } ,
2014-03-07 07:44:08 +04:00
{ }
} ;
MODULE_DEVICE_TABLE ( of , pcm512x_of_match ) ;
2018-05-18 01:53:26 +03:00
# endif
# ifdef CONFIG_ACPI
static const struct acpi_device_id pcm512x_acpi_match [ ] = {
{ " 104C5121 " , 0 } ,
{ " 104C5122 " , 0 } ,
{ " 104C5141 " , 0 } ,
{ " 104C5142 " , 0 } ,
{ } ,
} ;
MODULE_DEVICE_TABLE ( acpi , pcm512x_acpi_match ) ;
# endif
2014-03-07 07:44:08 +04:00
static struct i2c_driver pcm512x_i2c_driver = {
2022-04-05 19:58:30 +03:00
. probe_new = pcm512x_i2c_probe ,
2014-03-07 07:44:08 +04:00
. remove = pcm512x_i2c_remove ,
. id_table = pcm512x_i2c_id ,
. driver = {
. name = " pcm512x " ,
2018-05-18 01:53:26 +03:00
. of_match_table = of_match_ptr ( pcm512x_of_match ) ,
. acpi_match_table = ACPI_PTR ( pcm512x_acpi_match ) ,
2014-03-07 07:44:08 +04:00
. pm = & pcm512x_pm_ops ,
} ,
} ;
module_i2c_driver ( pcm512x_i2c_driver ) ;
MODULE_DESCRIPTION ( " ASoC PCM512x codec driver - I2C " ) ;
2017-09-07 16:22:48 +03:00
MODULE_AUTHOR ( " Mark Brown <broonie@kernel.org> " ) ;
2014-03-07 07:44:08 +04:00
MODULE_LICENSE ( " GPL v2 " ) ;