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 136ee47d4aSKirill Marinushkin static int pcm3060_i2c_probe(struct i2c_client *i2c, 146ee47d4aSKirill Marinushkin const struct i2c_device_id *id) 156ee47d4aSKirill Marinushkin { 166ee47d4aSKirill Marinushkin struct pcm3060_priv *priv; 176ee47d4aSKirill Marinushkin 186ee47d4aSKirill Marinushkin priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL); 196ee47d4aSKirill Marinushkin if (!priv) 206ee47d4aSKirill Marinushkin return -ENOMEM; 216ee47d4aSKirill Marinushkin 226ee47d4aSKirill Marinushkin i2c_set_clientdata(i2c, priv); 236ee47d4aSKirill Marinushkin 246ee47d4aSKirill Marinushkin priv->regmap = devm_regmap_init_i2c(i2c, &pcm3060_regmap); 256ee47d4aSKirill Marinushkin if (IS_ERR(priv->regmap)) 266ee47d4aSKirill Marinushkin return PTR_ERR(priv->regmap); 276ee47d4aSKirill Marinushkin 286ee47d4aSKirill Marinushkin return pcm3060_probe(&i2c->dev); 296ee47d4aSKirill Marinushkin } 306ee47d4aSKirill Marinushkin 316ee47d4aSKirill Marinushkin static const struct i2c_device_id pcm3060_i2c_id[] = { 326ee47d4aSKirill Marinushkin { .name = "pcm3060" }, 336ee47d4aSKirill Marinushkin { }, 346ee47d4aSKirill Marinushkin }; 356ee47d4aSKirill Marinushkin MODULE_DEVICE_TABLE(i2c, pcm3060_i2c_id); 366ee47d4aSKirill Marinushkin 376ee47d4aSKirill Marinushkin #ifdef CONFIG_OF 386ee47d4aSKirill Marinushkin static const struct of_device_id pcm3060_of_match[] = { 396ee47d4aSKirill Marinushkin { .compatible = "ti,pcm3060" }, 406ee47d4aSKirill Marinushkin { }, 416ee47d4aSKirill Marinushkin }; 426ee47d4aSKirill Marinushkin MODULE_DEVICE_TABLE(of, pcm3060_of_match); 436ee47d4aSKirill Marinushkin #endif /* CONFIG_OF */ 446ee47d4aSKirill Marinushkin 456ee47d4aSKirill Marinushkin static struct i2c_driver pcm3060_i2c_driver = { 466ee47d4aSKirill Marinushkin .driver = { 476ee47d4aSKirill Marinushkin .name = "pcm3060", 486ee47d4aSKirill Marinushkin #ifdef CONFIG_OF 496ee47d4aSKirill Marinushkin .of_match_table = pcm3060_of_match, 506ee47d4aSKirill Marinushkin #endif /* CONFIG_OF */ 516ee47d4aSKirill Marinushkin }, 526ee47d4aSKirill Marinushkin .id_table = pcm3060_i2c_id, 536ee47d4aSKirill Marinushkin .probe = pcm3060_i2c_probe, 546ee47d4aSKirill Marinushkin }; 556ee47d4aSKirill Marinushkin 566ee47d4aSKirill Marinushkin module_i2c_driver(pcm3060_i2c_driver); 576ee47d4aSKirill Marinushkin 586ee47d4aSKirill Marinushkin MODULE_DESCRIPTION("PCM3060 I2C driver"); 599e944c9bSKirill Marinushkin MODULE_AUTHOR("Kirill Marinushkin <kmarinushkin@birdec.com>"); 606ee47d4aSKirill Marinushkin MODULE_LICENSE("GPL v2"); 61