mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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
					
				
					 1 changed files with 42 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue