mirror of https://gitee.com/openkylin/linux.git
Merge series "ASoC: mediatek: mt6358: support DMIC one-wire mode" from Jiaxin Yu <jiaxin.yu@mediatek.com>:
v2 changes: 1. Uses a DT property to select DMIC mode instead of a mixer control. v1 changes: 1. Uses a mixer control to select DMIC mode. 2. patchwork list: https://patchwork.kernel.org/patch/11578309 Jiaxin Yu (2): ASoC: mediatek: mt6358: support DMIC one-wire mode ASoC: dt-bindings: mediatek: mt6358: add dmic-mode property Documentation/devicetree/bindings/sound/mt6358.txt | 6 ++++++ sound/soc/codecs/mt6358.c | 23 +++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) -- 1.8.1.1.dirty _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
This commit is contained in:
commit
ba05f17965
|
@ -10,9 +10,15 @@ Required properties:
|
|||
- compatible : "mediatek,mt6358-sound".
|
||||
- Avdd-supply : power source of AVDD
|
||||
|
||||
Optional properties:
|
||||
- mediatek,dmic-mode : Indicates how many data pins are used to transmit two
|
||||
channels of PDM signal. 0 means two wires, 1 means one wire. Default
|
||||
value is 0.
|
||||
|
||||
Example:
|
||||
|
||||
mt6358_snd {
|
||||
compatible = "mediatek,mt6358-sound";
|
||||
Avdd-supply = <&mt6358_vaud28_reg>;
|
||||
mediatek,dmic-mode = <0>;
|
||||
};
|
||||
|
|
|
@ -95,6 +95,8 @@ struct mt6358_priv {
|
|||
struct regulator *avdd_reg;
|
||||
|
||||
int wov_enabled;
|
||||
|
||||
unsigned int dmic_one_wire_mode;
|
||||
};
|
||||
|
||||
int mt6358_set_mtkaif_protocol(struct snd_soc_component *cmpnt,
|
||||
|
@ -1831,7 +1833,10 @@ static int mt6358_dmic_enable(struct mt6358_priv *priv)
|
|||
mt6358_mtkaif_tx_enable(priv);
|
||||
|
||||
/* UL dmic setting */
|
||||
regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_H, 0x0080);
|
||||
if (priv->dmic_one_wire_mode)
|
||||
regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_H, 0x0400);
|
||||
else
|
||||
regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_H, 0x0080);
|
||||
|
||||
/* UL turn on */
|
||||
regmap_write(priv->regmap, MT6358_AFE_UL_SRC_CON0_L, 0x0003);
|
||||
|
@ -2426,6 +2431,20 @@ static const struct snd_soc_component_driver mt6358_soc_component_driver = {
|
|||
.num_dapm_routes = ARRAY_SIZE(mt6358_dapm_routes),
|
||||
};
|
||||
|
||||
static void mt6358_parse_dt(struct mt6358_priv *priv)
|
||||
{
|
||||
int ret;
|
||||
struct device *dev = priv->dev;
|
||||
|
||||
ret = of_property_read_u32(dev->of_node, "mediatek,dmic-mode",
|
||||
&priv->dmic_one_wire_mode);
|
||||
if (ret) {
|
||||
dev_warn(priv->dev, "%s() failed to read dmic-mode\n",
|
||||
__func__);
|
||||
priv->dmic_one_wire_mode = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int mt6358_platform_driver_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct mt6358_priv *priv;
|
||||
|
@ -2445,6 +2464,8 @@ static int mt6358_platform_driver_probe(struct platform_device *pdev)
|
|||
if (IS_ERR(priv->regmap))
|
||||
return PTR_ERR(priv->regmap);
|
||||
|
||||
mt6358_parse_dt(priv);
|
||||
|
||||
dev_info(priv->dev, "%s(), dev name %s\n",
|
||||
__func__, dev_name(&pdev->dev));
|
||||
|
||||
|
|
Loading…
Reference in New Issue