2019-05-28 19:57:06 +03:00
// SPDX-License-Identifier: GPL-2.0-only
2014-05-27 12:53:19 +04:00
/*
* Driver for ADAU1381 / ADAU1781 CODEC
*
* Copyright 2014 Analog Devices Inc .
* Author : Lars - Peter Clausen < lars @ metafoo . de >
*/
# include <linux/mod_devicetable.h>
# include <linux/module.h>
# include <linux/regmap.h>
# include <linux/spi/spi.h>
# include <sound/soc.h>
# include "adau1781.h"
static void adau1781_spi_switch_mode ( struct device * dev )
{
struct spi_device * spi = to_spi_device ( dev ) ;
/*
* To get the device into SPI mode CLATCH has to be pulled low three
* times . Do this by issuing three dummy reads .
*/
spi_w8r8 ( spi , 0x00 ) ;
spi_w8r8 ( spi , 0x00 ) ;
spi_w8r8 ( spi , 0x00 ) ;
}
static int adau1781_spi_probe ( struct spi_device * spi )
{
const struct spi_device_id * id = spi_get_device_id ( spi ) ;
struct regmap_config config ;
if ( ! id )
return - EINVAL ;
config = adau1781_regmap_config ;
config . val_bits = 8 ;
config . reg_bits = 24 ;
config . read_flag_mask = 0x1 ;
return adau1781_probe ( & spi - > dev ,
devm_regmap_init_spi ( spi , & config ) ,
id - > driver_data , adau1781_spi_switch_mode ) ;
}
2022-01-23 20:52:01 +03:00
static void adau1781_spi_remove ( struct spi_device * spi )
2014-05-27 12:53:19 +04:00
{
2016-06-15 16:07:27 +03:00
adau17x1_remove ( & spi - > dev ) ;
2014-05-27 12:53:19 +04:00
}
static const struct spi_device_id adau1781_spi_id [ ] = {
{ " adau1381 " , ADAU1381 } ,
{ " adau1781 " , ADAU1781 } ,
{ }
} ;
MODULE_DEVICE_TABLE ( spi , adau1781_spi_id ) ;
2016-02-16 15:56:44 +03:00
# if defined(CONFIG_OF)
static const struct of_device_id adau1781_spi_dt_ids [ ] = {
{ . compatible = " adi,adau1381 " , } ,
{ . compatible = " adi,adau1781 " , } ,
{ } ,
} ;
MODULE_DEVICE_TABLE ( of , adau1781_spi_dt_ids ) ;
# endif
2014-05-27 12:53:19 +04:00
static struct spi_driver adau1781_spi_driver = {
. driver = {
. name = " adau1781 " ,
2016-02-16 15:56:44 +03:00
. of_match_table = of_match_ptr ( adau1781_spi_dt_ids ) ,
2014-05-27 12:53:19 +04:00
} ,
. probe = adau1781_spi_probe ,
. remove = adau1781_spi_remove ,
. id_table = adau1781_spi_id ,
} ;
module_spi_driver ( adau1781_spi_driver ) ;
MODULE_DESCRIPTION ( " ASoC ADAU1381/ADAU1781 CODEC SPI driver " ) ;
MODULE_AUTHOR ( " Lars-Peter Clausen <lars@metafoo.de> " ) ;
MODULE_LICENSE ( " GPL " ) ;