18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * SSM2602/SSM2603/SSM2604 I2C audio driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright 2014 Analog Devices Inc. 68c2ecf20Sopenharmony_ci */ 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci#include <linux/module.h> 98c2ecf20Sopenharmony_ci#include <linux/i2c.h> 108c2ecf20Sopenharmony_ci#include <linux/regmap.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <sound/soc.h> 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include "ssm2602.h" 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_ci/* 178c2ecf20Sopenharmony_ci * ssm2602 2 wire address is determined by GPIO5 188c2ecf20Sopenharmony_ci * state during powerup. 198c2ecf20Sopenharmony_ci * low = 0x1a 208c2ecf20Sopenharmony_ci * high = 0x1b 218c2ecf20Sopenharmony_ci */ 228c2ecf20Sopenharmony_cistatic int ssm2602_i2c_probe(struct i2c_client *client, 238c2ecf20Sopenharmony_ci const struct i2c_device_id *id) 248c2ecf20Sopenharmony_ci{ 258c2ecf20Sopenharmony_ci return ssm2602_probe(&client->dev, id->driver_data, 268c2ecf20Sopenharmony_ci devm_regmap_init_i2c(client, &ssm2602_regmap_config)); 278c2ecf20Sopenharmony_ci} 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistatic const struct i2c_device_id ssm2602_i2c_id[] = { 308c2ecf20Sopenharmony_ci { "ssm2602", SSM2602 }, 318c2ecf20Sopenharmony_ci { "ssm2603", SSM2602 }, 328c2ecf20Sopenharmony_ci { "ssm2604", SSM2604 }, 338c2ecf20Sopenharmony_ci { } 348c2ecf20Sopenharmony_ci}; 358c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(i2c, ssm2602_i2c_id); 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_cistatic const struct of_device_id ssm2602_of_match[] = { 388c2ecf20Sopenharmony_ci { .compatible = "adi,ssm2602", }, 398c2ecf20Sopenharmony_ci { .compatible = "adi,ssm2603", }, 408c2ecf20Sopenharmony_ci { .compatible = "adi,ssm2604", }, 418c2ecf20Sopenharmony_ci { } 428c2ecf20Sopenharmony_ci}; 438c2ecf20Sopenharmony_ciMODULE_DEVICE_TABLE(of, ssm2602_of_match); 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cistatic struct i2c_driver ssm2602_i2c_driver = { 468c2ecf20Sopenharmony_ci .driver = { 478c2ecf20Sopenharmony_ci .name = "ssm2602", 488c2ecf20Sopenharmony_ci .of_match_table = ssm2602_of_match, 498c2ecf20Sopenharmony_ci }, 508c2ecf20Sopenharmony_ci .probe = ssm2602_i2c_probe, 518c2ecf20Sopenharmony_ci .id_table = ssm2602_i2c_id, 528c2ecf20Sopenharmony_ci}; 538c2ecf20Sopenharmony_cimodule_i2c_driver(ssm2602_i2c_driver); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ciMODULE_DESCRIPTION("ASoC SSM2602/SSM2603/SSM2604 I2C driver"); 568c2ecf20Sopenharmony_ciMODULE_AUTHOR("Cliff Cai"); 578c2ecf20Sopenharmony_ciMODULE_LICENSE("GPL"); 58