Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * SSM2602/SSM2603/SSM2604 I2C audio driver
0004  *
0005  * Copyright 2014 Analog Devices Inc.
0006  */
0007 
0008 #include <linux/module.h>
0009 #include <linux/i2c.h>
0010 #include <linux/regmap.h>
0011 
0012 #include <sound/soc.h>
0013 
0014 #include "ssm2602.h"
0015 
0016 static const struct i2c_device_id ssm2602_i2c_id[];
0017 
0018 /*
0019  * ssm2602 2 wire address is determined by GPIO5
0020  * state during powerup.
0021  *    low  = 0x1a
0022  *    high = 0x1b
0023  */
0024 static int ssm2602_i2c_probe(struct i2c_client *client)
0025 {
0026     const struct i2c_device_id *id = i2c_match_id(ssm2602_i2c_id, client);
0027     return ssm2602_probe(&client->dev, id->driver_data,
0028         devm_regmap_init_i2c(client, &ssm2602_regmap_config));
0029 }
0030 
0031 static const struct i2c_device_id ssm2602_i2c_id[] = {
0032     { "ssm2602", SSM2602 },
0033     { "ssm2603", SSM2602 },
0034     { "ssm2604", SSM2604 },
0035     { }
0036 };
0037 MODULE_DEVICE_TABLE(i2c, ssm2602_i2c_id);
0038 
0039 static const struct of_device_id ssm2602_of_match[] = {
0040     { .compatible = "adi,ssm2602", },
0041     { .compatible = "adi,ssm2603", },
0042     { .compatible = "adi,ssm2604", },
0043     { }
0044 };
0045 MODULE_DEVICE_TABLE(of, ssm2602_of_match);
0046 
0047 static struct i2c_driver ssm2602_i2c_driver = {
0048     .driver = {
0049         .name = "ssm2602",
0050         .of_match_table = ssm2602_of_match,
0051     },
0052     .probe_new = ssm2602_i2c_probe,
0053     .id_table = ssm2602_i2c_id,
0054 };
0055 module_i2c_driver(ssm2602_i2c_driver);
0056 
0057 MODULE_DESCRIPTION("ASoC SSM2602/SSM2603/SSM2604 I2C driver");
0058 MODULE_AUTHOR("Cliff Cai");
0059 MODULE_LICENSE("GPL");