12923af02SLars-Peter Clausen /* 22923af02SLars-Peter Clausen * Driver for ADAU1381/ADAU1781 CODEC 32923af02SLars-Peter Clausen * 42923af02SLars-Peter Clausen * Copyright 2014 Analog Devices Inc. 52923af02SLars-Peter Clausen * Author: Lars-Peter Clausen <lars@metafoo.de> 62923af02SLars-Peter Clausen * 72923af02SLars-Peter Clausen * Licensed under the GPL-2. 82923af02SLars-Peter Clausen */ 92923af02SLars-Peter Clausen 102923af02SLars-Peter Clausen #include <linux/i2c.h> 112923af02SLars-Peter Clausen #include <linux/mod_devicetable.h> 122923af02SLars-Peter Clausen #include <linux/module.h> 132923af02SLars-Peter Clausen #include <linux/regmap.h> 142923af02SLars-Peter Clausen #include <sound/soc.h> 152923af02SLars-Peter Clausen 162923af02SLars-Peter Clausen #include "adau1781.h" 172923af02SLars-Peter Clausen 182923af02SLars-Peter Clausen static int adau1781_i2c_probe(struct i2c_client *client, 192923af02SLars-Peter Clausen const struct i2c_device_id *id) 202923af02SLars-Peter Clausen { 212923af02SLars-Peter Clausen struct regmap_config config; 222923af02SLars-Peter Clausen 232923af02SLars-Peter Clausen config = adau1781_regmap_config; 242923af02SLars-Peter Clausen config.val_bits = 8; 252923af02SLars-Peter Clausen config.reg_bits = 16; 262923af02SLars-Peter Clausen 272923af02SLars-Peter Clausen return adau1781_probe(&client->dev, 282923af02SLars-Peter Clausen devm_regmap_init_i2c(client, &config), 292923af02SLars-Peter Clausen id->driver_data, NULL); 302923af02SLars-Peter Clausen } 312923af02SLars-Peter Clausen 322923af02SLars-Peter Clausen static int adau1781_i2c_remove(struct i2c_client *client) 332923af02SLars-Peter Clausen { 342923af02SLars-Peter Clausen snd_soc_unregister_codec(&client->dev); 352923af02SLars-Peter Clausen return 0; 362923af02SLars-Peter Clausen } 372923af02SLars-Peter Clausen 382923af02SLars-Peter Clausen static const struct i2c_device_id adau1781_i2c_ids[] = { 392923af02SLars-Peter Clausen { "adau1381", ADAU1381 }, 402923af02SLars-Peter Clausen { "adau1781", ADAU1781 }, 412923af02SLars-Peter Clausen { } 422923af02SLars-Peter Clausen }; 432923af02SLars-Peter Clausen MODULE_DEVICE_TABLE(i2c, adau1781_i2c_ids); 442923af02SLars-Peter Clausen 45aaf0f3aeSAndreas Irestål #if defined(CONFIG_OF) 46aaf0f3aeSAndreas Irestål static const struct of_device_id adau1781_i2c_dt_ids[] = { 47aaf0f3aeSAndreas Irestål { .compatible = "adi,adau1381", }, 48aaf0f3aeSAndreas Irestål { .compatible = "adi,adau1781", }, 49aaf0f3aeSAndreas Irestål { }, 50aaf0f3aeSAndreas Irestål }; 51aaf0f3aeSAndreas Irestål MODULE_DEVICE_TABLE(of, adau1781_i2c_dt_ids); 52aaf0f3aeSAndreas Irestål #endif 53aaf0f3aeSAndreas Irestål 542923af02SLars-Peter Clausen static struct i2c_driver adau1781_i2c_driver = { 552923af02SLars-Peter Clausen .driver = { 562923af02SLars-Peter Clausen .name = "adau1781", 57aaf0f3aeSAndreas Irestål .of_match_table = of_match_ptr(adau1781_i2c_dt_ids), 582923af02SLars-Peter Clausen }, 592923af02SLars-Peter Clausen .probe = adau1781_i2c_probe, 602923af02SLars-Peter Clausen .remove = adau1781_i2c_remove, 612923af02SLars-Peter Clausen .id_table = adau1781_i2c_ids, 622923af02SLars-Peter Clausen }; 632923af02SLars-Peter Clausen module_i2c_driver(adau1781_i2c_driver); 642923af02SLars-Peter Clausen 652923af02SLars-Peter Clausen MODULE_DESCRIPTION("ASoC ADAU1381/ADAU1781 CODEC I2C driver"); 662923af02SLars-Peter Clausen MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); 672923af02SLars-Peter Clausen MODULE_LICENSE("GPL"); 68