aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc
diff options
context:
space:
mode:
authorDaniel Mack <zonque@gmail.com>2012-07-25 09:28:35 -0400
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-08-03 18:03:59 -0400
commit02286190f3ec86f03025a60c4d3f747ff1047248 (patch)
tree7cf1d705d24807b3c5bea0fd22d45ee8f7227475 /sound/soc
parent85d07e4d625d6511934799f7df93e9111ac2c88b (diff)
ASoC: Add reset-gpio DT property to cs4270 driver
In the process of moving over from static board files to the device tree, reset pins of peripheral reset pins should be handled by their corresponding drivers. Add a reset-gpio DT property to the cs4270 driver, and de-assert it before probing the chip. The logic could be augmented some day to re-assert it when codec is put to suspend. Signed-off-by: Daniel Mack <zonque@gmail.com> Acked-by: Timur Tabi <timur@freescale.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc')
-rw-r--r--sound/soc/codecs/cs4270.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/sound/soc/codecs/cs4270.c b/sound/soc/codecs/cs4270.c
index 4b71b01ecbcd..fd11bb646d40 100644
--- a/sound/soc/codecs/cs4270.c
+++ b/sound/soc/codecs/cs4270.c
@@ -30,6 +30,7 @@
30#include <linux/delay.h> 30#include <linux/delay.h>
31#include <linux/regulator/consumer.h> 31#include <linux/regulator/consumer.h>
32#include <linux/of_device.h> 32#include <linux/of_device.h>
33#include <linux/of_gpio.h>
33 34
34/* 35/*
35 * The codec isn't really big-endian or little-endian, since the I2S 36 * The codec isn't really big-endian or little-endian, since the I2S
@@ -660,9 +661,25 @@ MODULE_DEVICE_TABLE(of, cs4270_of_match);
660static int cs4270_i2c_probe(struct i2c_client *i2c_client, 661static int cs4270_i2c_probe(struct i2c_client *i2c_client,
661 const struct i2c_device_id *id) 662 const struct i2c_device_id *id)
662{ 663{
664 struct device_node *np = i2c_client->dev.of_node;
663 struct cs4270_private *cs4270; 665 struct cs4270_private *cs4270;
664 int ret; 666 int ret;
665 667
668 /* See if we have a way to bring the codec out of reset */
669 if (np) {
670 enum of_gpio_flags flags;
671 int gpio = of_get_named_gpio_flags(np, "reset-gpio", 0, &flags);
672
673 if (gpio_is_valid(gpio)) {
674 ret = devm_gpio_request_one(&i2c_client->dev, gpio,
675 flags & OF_GPIO_ACTIVE_LOW ?
676 GPIOF_OUT_INIT_LOW : GPIOF_OUT_INIT_HIGH,
677 "cs4270 reset");
678 if (ret < 0)
679 return ret;
680 }
681 }
682
666 /* Verify that we have a CS4270 */ 683 /* Verify that we have a CS4270 */
667 684
668 ret = i2c_smbus_read_byte_data(i2c_client, CS4270_CHIPID); 685 ret = i2c_smbus_read_byte_data(i2c_client, CS4270_CHIPID);