16ee47d4aSKirill Marinushkin // SPDX-License-Identifier: GPL-2.0 2aec785f6SKirill Marinushkin // 3aec785f6SKirill Marinushkin // PCM3060 I2C driver 4aec785f6SKirill Marinushkin // 59e944c9bSKirill Marinushkin // Copyright (C) 2018 Kirill Marinushkin <kmarinushkin@birdec.com> 66ee47d4aSKirill Marinushkin 76ee47d4aSKirill Marinushkin #include <linux/i2c.h> 86ee47d4aSKirill Marinushkin #include <linux/module.h> 96ee47d4aSKirill Marinushkin #include <sound/soc.h> 106ee47d4aSKirill Marinushkin 116ee47d4aSKirill Marinushkin #include "pcm3060.h" 126ee47d4aSKirill Marinushkin 13*5a07a41fSStephen Kitt static int pcm3060_i2c_probe(struct i2c_client *i2c) 146ee47d4aSKirill Marinushkin { 156ee47d4aSKirill Marinushkin struct pcm3060_priv *priv; 166ee47d4aSKirill Marinushkin 176ee47d4aSKirill Marinushkin priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL); 186ee47d4aSKirill Marinushkin if (!priv) 196ee47d4aSKirill Marinushkin return -ENOMEM; 206ee47d4aSKirill Marinushkin 216ee47d4aSKirill Marinushkin i2c_set_clientdata(i2c, priv); 226ee47d4aSKirill Marinushkin 236ee47d4aSKirill Marinushkin priv->regmap = devm_regmap_init_i2c(i2c, &pcm3060_regmap); 246ee47d4aSKirill Marinushkin if (IS_ERR(priv->regmap)) 256ee47d4aSKirill Marinushkin return PTR_ERR(priv->regmap); 266ee47d4aSKirill Marinushkin 276ee47d4aSKirill Marinushkin return pcm3060_probe(&i2c->dev); 286ee47d4aSKirill Marinushkin } 296ee47d4aSKirill Marinushkin 306ee47d4aSKirill Marinushkin static const struct i2c_device_id pcm3060_i2c_id[] = { 316ee47d4aSKirill Marinushkin { .name = "pcm3060" }, 326ee47d4aSKirill Marinushkin { }, 336ee47d4aSKirill Marinushkin }; 346ee47d4aSKirill Marinushkin MODULE_DEVICE_TABLE(i2c, pcm3060_i2c_id); 356ee47d4aSKirill Marinushkin 366ee47d4aSKirill Marinushkin #ifdef CONFIG_OF 376ee47d4aSKirill Marinushkin static const struct of_device_id pcm3060_of_match[] = { 386ee47d4aSKirill Marinushkin { .compatible = "ti,pcm3060" }, 396ee47d4aSKirill Marinushkin { }, 406ee47d4aSKirill Marinushkin }; 416ee47d4aSKirill Marinushkin MODULE_DEVICE_TABLE(of, pcm3060_of_match); 426ee47d4aSKirill Marinushkin #endif /* CONFIG_OF */ 436ee47d4aSKirill Marinushkin 446ee47d4aSKirill Marinushkin static struct i2c_driver pcm3060_i2c_driver = { 456ee47d4aSKirill Marinushkin .driver = { 466ee47d4aSKirill Marinushkin .name = "pcm3060", 476ee47d4aSKirill Marinushkin #ifdef CONFIG_OF 486ee47d4aSKirill Marinushkin .of_match_table = pcm3060_of_match, 496ee47d4aSKirill Marinushkin #endif /* CONFIG_OF */ 506ee47d4aSKirill Marinushkin }, 516ee47d4aSKirill Marinushkin .id_table = pcm3060_i2c_id, 52*5a07a41fSStephen Kitt .probe_new = pcm3060_i2c_probe, 536ee47d4aSKirill Marinushkin }; 546ee47d4aSKirill Marinushkin 556ee47d4aSKirill Marinushkin module_i2c_driver(pcm3060_i2c_driver); 566ee47d4aSKirill Marinushkin 576ee47d4aSKirill Marinushkin MODULE_DESCRIPTION("PCM3060 I2C driver"); 589e944c9bSKirill Marinushkin MODULE_AUTHOR("Kirill Marinushkin <kmarinushkin@birdec.com>"); 596ee47d4aSKirill Marinushkin MODULE_LICENSE("GPL v2"); 60