16c3d713eSLars-Peter Clausen /* 26c3d713eSLars-Peter Clausen * AD1938/AD1939 audio driver 36c3d713eSLars-Peter Clausen * 46c3d713eSLars-Peter Clausen * Copyright 2014 Analog Devices Inc. 56c3d713eSLars-Peter Clausen * 66c3d713eSLars-Peter Clausen * Licensed under the GPL-2. 76c3d713eSLars-Peter Clausen */ 86c3d713eSLars-Peter Clausen 96c3d713eSLars-Peter Clausen #include <linux/module.h> 106c3d713eSLars-Peter Clausen #include <linux/spi/spi.h> 116c3d713eSLars-Peter Clausen #include <linux/regmap.h> 126c3d713eSLars-Peter Clausen 136c3d713eSLars-Peter Clausen #include <sound/soc.h> 146c3d713eSLars-Peter Clausen 156c3d713eSLars-Peter Clausen #include "ad193x.h" 166c3d713eSLars-Peter Clausen 176c3d713eSLars-Peter Clausen static int ad193x_spi_probe(struct spi_device *spi) 186c3d713eSLars-Peter Clausen { 19e5224f58SCyrille Pitchen const struct spi_device_id *id = spi_get_device_id(spi); 206c3d713eSLars-Peter Clausen struct regmap_config config; 216c3d713eSLars-Peter Clausen 226c3d713eSLars-Peter Clausen config = ad193x_regmap_config; 236c3d713eSLars-Peter Clausen config.val_bits = 8; 246c3d713eSLars-Peter Clausen config.reg_bits = 16; 256c3d713eSLars-Peter Clausen config.read_flag_mask = 0x09; 266c3d713eSLars-Peter Clausen config.write_flag_mask = 0x08; 276c3d713eSLars-Peter Clausen 28e5224f58SCyrille Pitchen return ad193x_probe(&spi->dev, devm_regmap_init_spi(spi, &config), 29e5224f58SCyrille Pitchen (enum ad193x_type)id->driver_data); 306c3d713eSLars-Peter Clausen } 316c3d713eSLars-Peter Clausen 326c3d713eSLars-Peter Clausen static int ad193x_spi_remove(struct spi_device *spi) 336c3d713eSLars-Peter Clausen { 346c3d713eSLars-Peter Clausen snd_soc_unregister_codec(&spi->dev); 356c3d713eSLars-Peter Clausen return 0; 366c3d713eSLars-Peter Clausen } 376c3d713eSLars-Peter Clausen 38e5224f58SCyrille Pitchen static const struct spi_device_id ad193x_spi_id[] = { 39e5224f58SCyrille Pitchen { "ad193x", AD193X }, 40e5224f58SCyrille Pitchen { "ad1933", AD1933 }, 41e5224f58SCyrille Pitchen { "ad1934", AD1934 }, 42e5224f58SCyrille Pitchen { "ad1938", AD193X }, 43d46183efSAxel Lin { "ad1939", AD193X }, 44355b27e1SAxel Lin { "adau1328", AD193X }, 45e5224f58SCyrille Pitchen { } 46e5224f58SCyrille Pitchen }; 47e5224f58SCyrille Pitchen MODULE_DEVICE_TABLE(spi, ad193x_spi_id); 48e5224f58SCyrille Pitchen 496c3d713eSLars-Peter Clausen static struct spi_driver ad193x_spi_driver = { 506c3d713eSLars-Peter Clausen .driver = { 516c3d713eSLars-Peter Clausen .name = "ad193x", 526c3d713eSLars-Peter Clausen .owner = THIS_MODULE, 536c3d713eSLars-Peter Clausen }, 546c3d713eSLars-Peter Clausen .probe = ad193x_spi_probe, 556c3d713eSLars-Peter Clausen .remove = ad193x_spi_remove, 56e5224f58SCyrille Pitchen .id_table = ad193x_spi_id, 576c3d713eSLars-Peter Clausen }; 586c3d713eSLars-Peter Clausen module_spi_driver(ad193x_spi_driver); 596c3d713eSLars-Peter Clausen 606c3d713eSLars-Peter Clausen MODULE_DESCRIPTION("ASoC AD1938/AD1939 audio CODEC driver"); 616c3d713eSLars-Peter Clausen MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>"); 626c3d713eSLars-Peter Clausen MODULE_LICENSE("GPL"); 63