-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branches 'asoc/topic/qcom', 'asoc/topic/rcar', …
…'asoc/topic/rt286' and 'asoc/topic/rt5640' into asoc-next
- Loading branch information
Showing
18 changed files
with
1,010 additions
and
575 deletions.
There are no files selected for viewing
60 changes: 60 additions & 0 deletions
60
Documentation/devicetree/bindings/sound/qcom,apq8016-sbc.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
* Qualcomm Technologies APQ8016 SBC ASoC machine driver | ||
|
||
This node models the Qualcomm Technologies APQ8016 SBC ASoC machine driver | ||
|
||
Required properties: | ||
|
||
- compatible : "qcom,apq8016-sbc-sndcard" | ||
|
||
- pinctrl-N : One property must exist for each entry in | ||
pinctrl-names. See ../pinctrl/pinctrl-bindings.txt | ||
for details of the property values. | ||
- pinctrl-names : Must contain a "default" entry. | ||
- reg : Must contain an address for each entry in reg-names. | ||
- reg-names : A list which must include the following entries: | ||
* "mic-iomux" | ||
* "spkr-iomux" | ||
- qcom,model : Name of the sound card. | ||
|
||
Dai-link subnode properties and subnodes: | ||
|
||
Required dai-link subnodes: | ||
|
||
- cpu : CPU sub-node | ||
- codec : CODEC sub-node | ||
|
||
Required CPU/CODEC subnodes properties: | ||
|
||
-link-name : Name of the dai link. | ||
-sound-dai : phandle and port of CPU/CODEC | ||
-capture-dai : phandle and port of CPU/CODEC | ||
|
||
Example: | ||
|
||
sound: sound { | ||
compatible = "qcom,apq8016-sbc-sndcard"; | ||
reg = <0x07702000 0x4>, <0x07702004 0x4>; | ||
reg-names = "mic-iomux", "spkr-iomux"; | ||
qcom,model = "DB410c"; | ||
|
||
/* I2S - Internal codec */ | ||
internal-dai-link@0 { | ||
cpu { /* PRIMARY */ | ||
sound-dai = <&lpass MI2S_PRIMARY>; | ||
}; | ||
codec { | ||
sound-dai = <&wcd_codec 0>; | ||
}; | ||
}; | ||
|
||
/* External Primary or External Secondary -ADV7533 HDMI */ | ||
external-dai-link@0 { | ||
link-name = "ADV7533"; | ||
cpu { /* QUAT */ | ||
sound-dai = <&lpass MI2S_QUATERNARY>; | ||
}; | ||
codec { | ||
sound-dai = <&adv_bridge 0>; | ||
}; | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
/* | ||
* rl6347a.c - RL6347A class device shared support | ||
* | ||
* Copyright 2015 Realtek Semiconductor Corp. | ||
* | ||
* Author: Oder Chiou <oder_chiou@realtek.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#include <linux/module.h> | ||
#include <linux/moduleparam.h> | ||
#include <linux/init.h> | ||
#include <linux/delay.h> | ||
#include <linux/pm.h> | ||
#include <linux/i2c.h> | ||
#include <linux/platform_device.h> | ||
#include <linux/spi/spi.h> | ||
#include <linux/dmi.h> | ||
#include <linux/acpi.h> | ||
#include <sound/core.h> | ||
#include <sound/pcm.h> | ||
#include <sound/pcm_params.h> | ||
#include <sound/soc.h> | ||
#include <sound/soc-dapm.h> | ||
#include <sound/initval.h> | ||
#include <sound/tlv.h> | ||
#include <sound/jack.h> | ||
#include <linux/workqueue.h> | ||
#include <sound/hda_verbs.h> | ||
|
||
#include "rl6347a.h" | ||
|
||
int rl6347a_hw_write(void *context, unsigned int reg, unsigned int value) | ||
{ | ||
struct i2c_client *client = context; | ||
struct rl6347a_priv *rl6347a = i2c_get_clientdata(client); | ||
u8 data[4]; | ||
int ret, i; | ||
|
||
/* handle index registers */ | ||
if (reg <= 0xff) { | ||
rl6347a_hw_write(client, RL6347A_COEF_INDEX, reg); | ||
for (i = 0; i < rl6347a->index_cache_size; i++) { | ||
if (reg == rl6347a->index_cache[i].reg) { | ||
rl6347a->index_cache[i].def = value; | ||
break; | ||
} | ||
|
||
} | ||
reg = RL6347A_PROC_COEF; | ||
} | ||
|
||
data[0] = (reg >> 24) & 0xff; | ||
data[1] = (reg >> 16) & 0xff; | ||
/* | ||
* 4 bit VID: reg should be 0 | ||
* 12 bit VID: value should be 0 | ||
* So we use an OR operator to handle it rather than use if condition. | ||
*/ | ||
data[2] = ((reg >> 8) & 0xff) | ((value >> 8) & 0xff); | ||
data[3] = value & 0xff; | ||
|
||
ret = i2c_master_send(client, data, 4); | ||
|
||
if (ret == 4) | ||
return 0; | ||
else | ||
pr_err("ret=%d\n", ret); | ||
if (ret < 0) | ||
return ret; | ||
else | ||
return -EIO; | ||
} | ||
EXPORT_SYMBOL_GPL(rl6347a_hw_write); | ||
|
||
int rl6347a_hw_read(void *context, unsigned int reg, unsigned int *value) | ||
{ | ||
struct i2c_client *client = context; | ||
struct i2c_msg xfer[2]; | ||
int ret; | ||
__be32 be_reg; | ||
unsigned int index, vid, buf = 0x0; | ||
|
||
/* handle index registers */ | ||
if (reg <= 0xff) { | ||
rl6347a_hw_write(client, RL6347A_COEF_INDEX, reg); | ||
reg = RL6347A_PROC_COEF; | ||
} | ||
|
||
reg = reg | 0x80000; | ||
vid = (reg >> 8) & 0xfff; | ||
|
||
if (AC_VERB_GET_AMP_GAIN_MUTE == (vid & 0xf00)) { | ||
index = (reg >> 8) & 0xf; | ||
reg = (reg & ~0xf0f) | index; | ||
} | ||
be_reg = cpu_to_be32(reg); | ||
|
||
/* Write register */ | ||
xfer[0].addr = client->addr; | ||
xfer[0].flags = 0; | ||
xfer[0].len = 4; | ||
xfer[0].buf = (u8 *)&be_reg; | ||
|
||
/* Read data */ | ||
xfer[1].addr = client->addr; | ||
xfer[1].flags = I2C_M_RD; | ||
xfer[1].len = 4; | ||
xfer[1].buf = (u8 *)&buf; | ||
|
||
ret = i2c_transfer(client->adapter, xfer, 2); | ||
if (ret < 0) | ||
return ret; | ||
else if (ret != 2) | ||
return -EIO; | ||
|
||
*value = be32_to_cpu(buf); | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL_GPL(rl6347a_hw_read); | ||
|
||
MODULE_DESCRIPTION("RL6347A class device shared support"); | ||
MODULE_AUTHOR("Oder Chiou <oder_chiou@realtek.com>"); | ||
MODULE_LICENSE("GPL v2"); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* rl6347a.h - RL6347A class device shared support | ||
* | ||
* Copyright 2015 Realtek Semiconductor Corp. | ||
* | ||
* Author: Oder Chiou <oder_chiou@realtek.com> | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License version 2 as | ||
* published by the Free Software Foundation. | ||
*/ | ||
#ifndef __RL6347A_H__ | ||
#define __RL6347A_H__ | ||
|
||
#define VERB_CMD(V, N, D) ((N << 20) | (V << 8) | D) | ||
|
||
#define RL6347A_VENDOR_REGISTERS 0x20 | ||
|
||
#define RL6347A_COEF_INDEX\ | ||
VERB_CMD(AC_VERB_SET_COEF_INDEX, RL6347A_VENDOR_REGISTERS, 0) | ||
#define RL6347A_PROC_COEF\ | ||
VERB_CMD(AC_VERB_SET_PROC_COEF, RL6347A_VENDOR_REGISTERS, 0) | ||
|
||
struct rl6347a_priv { | ||
struct reg_default *index_cache; | ||
int index_cache_size; | ||
}; | ||
|
||
int rl6347a_hw_write(void *context, unsigned int reg, unsigned int value); | ||
int rl6347a_hw_read(void *context, unsigned int reg, unsigned int *value); | ||
|
||
#endif /* __RL6347A_H__ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.