Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 332152
b: refs/heads/master
c: 2d6d649
h: refs/heads/master
v: v3
  • Loading branch information
Peter Ujfalusi authored and Mark Brown committed Sep 22, 2012
1 parent f01fb3c commit f596c01
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 182f73f6bbd6a2bf65cd7e15558aa8a651b8c9f7
refs/heads/master: 2d6d649a2e0fa0268c0d03d5b1d330ca7907d33c
55 changes: 47 additions & 8 deletions trunk/sound/soc/codecs/twl4030.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
#include <linux/pm.h>
#include <linux/i2c.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/i2c/twl.h>
#include <linux/slab.h>
#include <linux/gpio.h>
Expand Down Expand Up @@ -295,13 +297,57 @@ static inline void twl4030_reset_registers(struct snd_soc_codec *codec)

}

static void twl4030_init_chip(struct snd_soc_codec *codec)
static void twl4030_setup_pdata_of(struct twl4030_codec_data *pdata,
struct device_node *node)
{
int value;

of_property_read_u32(node, "ti,digimic_delay",
&pdata->digimic_delay);
of_property_read_u32(node, "ti,ramp_delay_value",
&pdata->ramp_delay_value);
of_property_read_u32(node, "ti,offset_cncl_path",
&pdata->offset_cncl_path);
if (!of_property_read_u32(node, "ti,hs_extmute", &value))
pdata->hs_extmute = value;

pdata->hs_extmute_gpio = of_get_named_gpio(node,
"ti,hs_extmute_gpio", 0);
if (gpio_is_valid(pdata->hs_extmute_gpio))
pdata->hs_extmute = 1;
}

static struct twl4030_codec_data *twl4030_get_pdata(struct snd_soc_codec *codec)
{
struct twl4030_codec_data *pdata = dev_get_platdata(codec->dev);
struct device_node *twl4030_codec_node = NULL;

twl4030_codec_node = of_find_node_by_name(codec->dev->parent->of_node,
"codec");

if (!pdata && twl4030_codec_node) {
pdata = devm_kzalloc(codec->dev,
sizeof(struct twl4030_codec_data),
GFP_KERNEL);
if (!pdata) {
dev_err(codec->dev, "Can not allocate memory\n");
return NULL;
}
twl4030_setup_pdata_of(pdata, twl4030_codec_node);
}

return pdata;
}

static void twl4030_init_chip(struct snd_soc_codec *codec)
{
struct twl4030_codec_data *pdata;
struct twl4030_priv *twl4030 = snd_soc_codec_get_drvdata(codec);
u8 reg, byte;
int i = 0;

pdata = twl4030_get_pdata(codec);

if (pdata && pdata->hs_extmute &&
gpio_is_valid(pdata->hs_extmute_gpio)) {
int ret;
Expand Down Expand Up @@ -2290,13 +2336,6 @@ static struct snd_soc_codec_driver soc_codec_dev_twl4030 = {

static int __devinit twl4030_codec_probe(struct platform_device *pdev)
{
struct twl4030_codec_data *pdata = pdev->dev.platform_data;

if (!pdata) {
dev_err(&pdev->dev, "platform_data is missing\n");
return -EINVAL;
}

return snd_soc_register_codec(&pdev->dev, &soc_codec_dev_twl4030,
twl4030_dai, ARRAY_SIZE(twl4030_dai));
}
Expand Down

0 comments on commit f596c01

Please sign in to comment.