summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-07-18 13:05:23 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-07-18 13:05:23 -0700
commitc4873787c3ee5bbbf33082273cbce2f7c8dc16de (patch)
tree9fb7495f9e987def5c2ec8edbc546af5367eaeba
parent5effe5f433a82337154793adb95005f6bbfdc420 (diff)
parent5bd34e1e583faf0991d0b9530d7432ba1ccda0b3 (diff)
Merge "ASoC: aud-ext-clk: enable lnbbclk2 for tavil"
-rw-r--r--include/dt-bindings/clock/audio-ext-clk.h1
-rwxr-xr-xsound/soc/codecs/audio-ext-clk.c72
2 files changed, 45 insertions, 28 deletions
diff --git a/include/dt-bindings/clock/audio-ext-clk.h b/include/dt-bindings/clock/audio-ext-clk.h
index 4945d6956293..6e4932342751 100644
--- a/include/dt-bindings/clock/audio-ext-clk.h
+++ b/include/dt-bindings/clock/audio-ext-clk.h
@@ -18,4 +18,5 @@
#define clk_audio_pmi_clk 0xcbfe416d
#define clk_audio_ap_clk2 0x454d1e91
#define clk_audio_lpass_mclk 0xf0f2a284
+#define clk_audio_pmi_lnbb_clk 0x57312343
#endif
diff --git a/sound/soc/codecs/audio-ext-clk.c b/sound/soc/codecs/audio-ext-clk.c
index 2d7e55f69990..7faabcfb1db1 100755
--- a/sound/soc/codecs/audio-ext-clk.c
+++ b/sound/soc/codecs/audio-ext-clk.c
@@ -146,6 +146,15 @@ static struct audio_ext_pmi_clk audio_pmi_clk = {
},
};
+static struct audio_ext_pmi_clk audio_pmi_lnbb_clk = {
+ .gpio = -EINVAL,
+ .c = {
+ .dbg_name = "audio_ext_pmi_lnbb_clk",
+ .ops = &clk_ops_dummy,
+ CLK_INIT(audio_pmi_lnbb_clk.c),
+ },
+};
+
static struct audio_ext_ap_clk audio_ap_clk = {
.gpio = -EINVAL,
.c = {
@@ -166,6 +175,7 @@ static struct audio_ext_ap_clk2 audio_ap_clk2 = {
static struct clk_lookup audio_ref_clock[] = {
CLK_LIST(audio_ap_clk),
CLK_LIST(audio_pmi_clk),
+ CLK_LIST(audio_pmi_lnbb_clk),
CLK_LIST(audio_ap_clk2),
};
@@ -216,38 +226,44 @@ static int audio_ref_clk_probe(struct platform_device *pdev)
{
int clk_gpio;
int ret;
- struct clk *div_clk1;
+ struct clk *audio_clk;
clk_gpio = of_get_named_gpio(pdev->dev.of_node,
"qcom,audio-ref-clk-gpio", 0);
- if (clk_gpio < 0) {
- dev_err(&pdev->dev,
- "Looking up %s property in node %s failed %d\n",
- "qcom,audio-ref-clk-gpio",
- pdev->dev.of_node->full_name,
- clk_gpio);
- ret = -EINVAL;
- goto err;
- }
- ret = gpio_request(clk_gpio, "EXT_CLK");
- if (ret) {
- dev_err(&pdev->dev,
- "Request ext clk gpio failed %d, err:%d\n",
- clk_gpio, ret);
- goto err;
- }
- if (of_property_read_bool(pdev->dev.of_node,
- "qcom,node_has_rpm_clock")) {
- div_clk1 = clk_get(&pdev->dev, "osr_clk");
- if (IS_ERR(div_clk1)) {
- dev_err(&pdev->dev, "Failed to get RPM div clk\n");
- ret = PTR_ERR(div_clk1);
- goto err_gpio;
+ if (clk_gpio > 0) {
+ ret = gpio_request(clk_gpio, "EXT_CLK");
+ if (ret) {
+ dev_err(&pdev->dev,
+ "Request ext clk gpio failed %d, err:%d\n",
+ clk_gpio, ret);
+ goto err;
+ }
+ if (of_property_read_bool(pdev->dev.of_node,
+ "qcom,node_has_rpm_clock")) {
+ audio_clk = clk_get(&pdev->dev, NULL);
+ if (IS_ERR(audio_clk)) {
+ dev_err(&pdev->dev, "Failed to get RPM div clk\n");
+ ret = PTR_ERR(audio_clk);
+ goto err_gpio;
+ }
+ audio_pmi_clk.c.parent = audio_clk;
+ audio_pmi_clk.gpio = clk_gpio;
+ } else
+ audio_ap_clk.gpio = clk_gpio;
+
+ } else {
+ if (of_property_read_bool(pdev->dev.of_node,
+ "qcom,node_has_rpm_clock")) {
+ audio_clk = clk_get(&pdev->dev, NULL);
+ if (IS_ERR(audio_clk)) {
+ dev_err(&pdev->dev, "Failed to get lnbbclk2\n");
+ ret = PTR_ERR(audio_clk);
+ goto err;
+ }
+ audio_pmi_lnbb_clk.c.parent = audio_clk;
+ audio_pmi_lnbb_clk.gpio = -EINVAL;
}
- audio_pmi_clk.c.parent = div_clk1;
- audio_pmi_clk.gpio = clk_gpio;
- } else
- audio_ap_clk.gpio = clk_gpio;
+ }
ret = audio_get_pinctrl(pdev);
if (ret)