ASoC: cs42l52: Add devicetree support for CS42L52
This patch adds device tree support for the CS42L52 Codec Signed-off-by: Brian Austin <brian.austin@cirrus.com> Signed-off-by: Mark Brown <broonie@linaro.org>
This commit is contained in:
parent
44b2ed5403
commit
391fc59db8
|
@ -17,7 +17,7 @@
|
|||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/of_gpio.h>
|
||||
#include <linux/pm.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/input.h>
|
||||
|
@ -1193,6 +1193,7 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
|
|||
int ret;
|
||||
unsigned int devid = 0;
|
||||
unsigned int reg;
|
||||
u32 val32;
|
||||
|
||||
cs42l52 = devm_kzalloc(&i2c_client->dev, sizeof(struct cs42l52_private),
|
||||
GFP_KERNEL);
|
||||
|
@ -1206,9 +1207,39 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
|
|||
dev_err(&i2c_client->dev, "regmap_init() failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (pdata)
|
||||
if (pdata) {
|
||||
cs42l52->pdata = *pdata;
|
||||
} else {
|
||||
pdata = devm_kzalloc(&i2c_client->dev,
|
||||
sizeof(struct cs42l52_platform_data),
|
||||
GFP_KERNEL);
|
||||
if (!pdata) {
|
||||
dev_err(&i2c_client->dev, "could not allocate pdata\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
if (i2c_client->dev.of_node) {
|
||||
if (of_property_read_bool(i2c_client->dev.of_node,
|
||||
"cirrus,mica-differential-cfg"))
|
||||
pdata->mica_diff_cfg = true;
|
||||
|
||||
if (of_property_read_bool(i2c_client->dev.of_node,
|
||||
"cirrus,micb-differential-cfg"))
|
||||
pdata->micb_diff_cfg = true;
|
||||
|
||||
if (of_property_read_u32(i2c_client->dev.of_node,
|
||||
"cirrus,micbias-lvl", &val32) >= 0)
|
||||
pdata->micbias_lvl = val32;
|
||||
|
||||
if (of_property_read_u32(i2c_client->dev.of_node,
|
||||
"cirrus,chgfreq-divisor", &val32) >= 0)
|
||||
pdata->chgfreq_divisor = val32;
|
||||
|
||||
pdata->reset_gpio =
|
||||
of_get_named_gpio(i2c_client->dev.of_node,
|
||||
"cirrus,reset-gpio", 0);
|
||||
}
|
||||
cs42l52->pdata = *pdata;
|
||||
}
|
||||
|
||||
if (cs42l52->pdata.reset_gpio) {
|
||||
ret = gpio_request_one(cs42l52->pdata.reset_gpio,
|
||||
|
@ -1280,6 +1311,13 @@ static int cs42l52_i2c_remove(struct i2c_client *client)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id cs42l52_of_match[] = {
|
||||
{ .compatible = "cirrus,cs42l52", },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, cs42l52_of_match);
|
||||
|
||||
|
||||
static const struct i2c_device_id cs42l52_id[] = {
|
||||
{ "cs42l52", 0 },
|
||||
{ }
|
||||
|
@ -1290,6 +1328,7 @@ static struct i2c_driver cs42l52_i2c_driver = {
|
|||
.driver = {
|
||||
.name = "cs42l52",
|
||||
.owner = THIS_MODULE,
|
||||
.of_match_table = cs42l52_of_match,
|
||||
},
|
||||
.id_table = cs42l52_id,
|
||||
.probe = cs42l52_i2c_probe,
|
||||
|
|
Loading…
Reference in New Issue