Commit 391fc59d authored by Brian Austin's avatar Brian Austin Committed by Mark Brown

ASoC: cs42l52: Add devicetree support for CS42L52

This patch adds device tree support for the CS42L52 Codec
Signed-off-by: default avatarBrian Austin <brian.austin@cirrus.com>
Signed-off-by: default avatarMark Brown <broonie@linaro.org>
parent 44b2ed54
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/gpio.h> #include <linux/of_gpio.h>
#include <linux/pm.h> #include <linux/pm.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/input.h> #include <linux/input.h>
...@@ -1193,6 +1193,7 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client, ...@@ -1193,6 +1193,7 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client,
int ret; int ret;
unsigned int devid = 0; unsigned int devid = 0;
unsigned int reg; unsigned int reg;
u32 val32;
cs42l52 = devm_kzalloc(&i2c_client->dev, sizeof(struct cs42l52_private), cs42l52 = devm_kzalloc(&i2c_client->dev, sizeof(struct cs42l52_private),
GFP_KERNEL); GFP_KERNEL);
...@@ -1206,9 +1207,39 @@ static int cs42l52_i2c_probe(struct i2c_client *i2c_client, ...@@ -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); dev_err(&i2c_client->dev, "regmap_init() failed: %d\n", ret);
return 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; cs42l52->pdata = *pdata;
}
if (cs42l52->pdata.reset_gpio) { if (cs42l52->pdata.reset_gpio) {
ret = gpio_request_one(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) ...@@ -1280,6 +1311,13 @@ static int cs42l52_i2c_remove(struct i2c_client *client)
return 0; 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[] = { static const struct i2c_device_id cs42l52_id[] = {
{ "cs42l52", 0 }, { "cs42l52", 0 },
{ } { }
...@@ -1290,6 +1328,7 @@ static struct i2c_driver cs42l52_i2c_driver = { ...@@ -1290,6 +1328,7 @@ static struct i2c_driver cs42l52_i2c_driver = {
.driver = { .driver = {
.name = "cs42l52", .name = "cs42l52",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.of_match_table = cs42l52_of_match,
}, },
.id_table = cs42l52_id, .id_table = cs42l52_id,
.probe = cs42l52_i2c_probe, .probe = cs42l52_i2c_probe,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment