1fda8d26eSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 22923af02SLars-Peter Clausen /* 32923af02SLars-Peter Clausen * Driver for ADAU1381/ADAU1781 CODEC 42923af02SLars-Peter Clausen * 52923af02SLars-Peter Clausen * Copyright 2014 Analog Devices Inc. 62923af02SLars-Peter Clausen * Author: Lars-Peter Clausen <lars@metafoo.de> 72923af02SLars-Peter Clausen */ 82923af02SLars-Peter Clausen 92923af02SLars-Peter Clausen #include <linux/i2c.h> 102923af02SLars-Peter Clausen #include <linux/mod_devicetable.h> 112923af02SLars-Peter Clausen #include <linux/module.h> 122923af02SLars-Peter Clausen #include <linux/regmap.h> 132923af02SLars-Peter Clausen #include <sound/soc.h> 142923af02SLars-Peter Clausen 152923af02SLars-Peter Clausen #include "adau1781.h" 162923af02SLars-Peter Clausen 17*e5cd0623SStephen Kitt static const struct i2c_device_id adau1781_i2c_ids[]; 18*e5cd0623SStephen Kitt 19*e5cd0623SStephen Kitt static int adau1781_i2c_probe(struct i2c_client *client) 202923af02SLars-Peter Clausen { 212923af02SLars-Peter Clausen struct regmap_config config; 22*e5cd0623SStephen Kitt const struct i2c_device_id *id = i2c_match_id(adau1781_i2c_ids, client); 232923af02SLars-Peter Clausen 242923af02SLars-Peter Clausen config = adau1781_regmap_config; 252923af02SLars-Peter Clausen config.val_bits = 8; 262923af02SLars-Peter Clausen config.reg_bits = 16; 272923af02SLars-Peter Clausen 282923af02SLars-Peter Clausen return adau1781_probe(&client->dev, 292923af02SLars-Peter Clausen devm_regmap_init_i2c(client, &config), 302923af02SLars-Peter Clausen id->driver_data, NULL); 312923af02SLars-Peter Clausen } 322923af02SLars-Peter Clausen 332923af02SLars-Peter Clausen static int adau1781_i2c_remove(struct i2c_client *client) 342923af02SLars-Peter Clausen { 355d76de61SLars-Peter Clausen adau17x1_remove(&client->dev); 362923af02SLars-Peter Clausen return 0; 372923af02SLars-Peter Clausen } 382923af02SLars-Peter Clausen 392923af02SLars-Peter Clausen static const struct i2c_device_id adau1781_i2c_ids[] = { 402923af02SLars-Peter Clausen { "adau1381", ADAU1381 }, 412923af02SLars-Peter Clausen { "adau1781", ADAU1781 }, 422923af02SLars-Peter Clausen { } 432923af02SLars-Peter Clausen }; 442923af02SLars-Peter Clausen MODULE_DEVICE_TABLE(i2c, adau1781_i2c_ids); 452923af02SLars-Peter Clausen 46aaf0f3aeSAndreas Irestål #if defined(CONFIG_OF) 47aaf0f3aeSAndreas Irestål static const struct of_device_id adau1781_i2c_dt_ids[] = { 48aaf0f3aeSAndreas Irestål { .compatible = "adi,adau1381", }, 49aaf0f3aeSAndreas Irestål { .compatible = "adi,adau1781", }, 50aaf0f3aeSAndreas Irestål { }, 51aaf0f3aeSAndreas Irestål }; 52aaf0f3aeSAndreas Irestål MODULE_DEVICE_TABLE(of, adau1781_i2c_dt_ids); 53aaf0f3aeSAndreas Irestål #endif 54aaf0f3aeSAndreas Irestål 552923af02SLars-Peter Clausen static struct i2c_driver adau1781_i2c_driver = { 562923af02SLars-Peter Clausen .driver = { 572923af02SLars-Peter Clausen .name = "adau1781", 58aaf0f3aeSAndreas Irestål .of_match_table = of_match_ptr(adau1781_i2c_dt_ids), 592923af02SLars-Peter Clausen }, 60*e5cd0623SStephen Kitt .probe_new = adau1781_i2c_probe, 612923af02SLars-Peter Clausen .remove = adau1781_i2c_remove, 622923af02SLars-Peter Clausen .id_table = adau1781_i2c_ids, 632923af02SLars-Peter Clausen }; 642923af02SLars-Peter Clausen module_i2c_driver(adau1781_i2c_driver); 652923af02SLars-Peter Clausen 662923af02SLars-Peter Clausen MODULE_DESCRIPTION("ASoC ADAU1381/ADAU1781 CODEC I2C driver"); 672923af02SLars-Peter Clausen MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>"); 682923af02SLars-Peter Clausen MODULE_LICENSE("GPL"); 69