4 * Copyright (c) 2016 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
11 #include <sound/simple_card_utils.h>
13 int asoc_simple_card_parse_daifmt(struct device
*dev
,
14 struct device_node
*node
,
15 struct device_node
*codec
,
19 struct device_node
*bitclkmaster
= NULL
;
20 struct device_node
*framemaster
= NULL
;
21 int prefix_len
= prefix
? strlen(prefix
) : 0;
24 daifmt
= snd_soc_of_parse_daifmt(node
, prefix
,
25 &bitclkmaster
, &framemaster
);
26 daifmt
&= ~SND_SOC_DAIFMT_MASTER_MASK
;
28 if (prefix_len
&& !bitclkmaster
&& !framemaster
) {
30 * No dai-link level and master setting was not found from
31 * sound node level, revert back to legacy DT parsing and
32 * take the settings from codec node.
34 dev_dbg(dev
, "Revert to legacy daifmt parsing\n");
36 daifmt
= snd_soc_of_parse_daifmt(codec
, NULL
, NULL
, NULL
) |
37 (daifmt
& ~SND_SOC_DAIFMT_CLOCK_MASK
);
39 if (codec
== bitclkmaster
)
40 daifmt
|= (codec
== framemaster
) ?
41 SND_SOC_DAIFMT_CBM_CFM
: SND_SOC_DAIFMT_CBM_CFS
;
43 daifmt
|= (codec
== framemaster
) ?
44 SND_SOC_DAIFMT_CBS_CFM
: SND_SOC_DAIFMT_CBS_CFS
;
47 of_node_put(bitclkmaster
);
48 of_node_put(framemaster
);
54 EXPORT_SYMBOL_GPL(asoc_simple_card_parse_daifmt
);