-
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/omap', 'asoc/topic/rcar' a…
…nd 'asoc/topic/rockchip' into asoc-next
- Loading branch information
Showing
19 changed files
with
504 additions
and
308 deletions.
There are no files selected for viewing
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
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,36 @@ | ||
/* | ||
* simple_card_core.h | ||
* | ||
* Copyright (c) 2016 Kuninori Morimoto <kuninori.morimoto.gx@renesas.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 __SIMPLE_CARD_CORE_H | ||
#define __SIMPLE_CARD_CORE_H | ||
|
||
#include <sound/soc.h> | ||
|
||
struct asoc_simple_dai { | ||
const char *name; | ||
unsigned int sysclk; | ||
int slots; | ||
int slot_width; | ||
unsigned int tx_slot_mask; | ||
unsigned int rx_slot_mask; | ||
struct clk *clk; | ||
}; | ||
|
||
int asoc_simple_card_parse_daifmt(struct device *dev, | ||
struct device_node *node, | ||
struct device_node *codec, | ||
char *prefix, | ||
unsigned int *retfmt); | ||
int asoc_simple_card_set_dailink_name(struct device *dev, | ||
struct snd_soc_dai_link *dai_link, | ||
const char *fmt, ...); | ||
int asoc_simple_card_parse_card_name(struct snd_soc_card *card, | ||
char *prefix); | ||
|
||
#endif /* __SIMPLE_CARD_CORE_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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,8 @@ | ||
config SND_SIMPLE_CARD_UTILS | ||
tristate | ||
|
||
config SND_SIMPLE_CARD | ||
tristate "ASoC Simple sound card support" | ||
select SND_SIMPLE_CARD_UTILS | ||
help | ||
This option enables generic simple sound card support |
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 |
---|---|---|
@@ -1,3 +1,5 @@ | ||
obj-$(CONFIG_SND_SIMPLE_CARD_UTILS) := simple-card-utils.o | ||
|
||
snd-soc-simple-card-objs := simple-card.o | ||
|
||
obj-$(CONFIG_SND_SIMPLE_CARD) += snd-soc-simple-card.o |
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,97 @@ | ||
/* | ||
* simple-card-core.c | ||
* | ||
* Copyright (c) 2016 Kuninori Morimoto <kuninori.morimoto.gx@renesas.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/of.h> | ||
#include <sound/simple_card_utils.h> | ||
|
||
int asoc_simple_card_parse_daifmt(struct device *dev, | ||
struct device_node *node, | ||
struct device_node *codec, | ||
char *prefix, | ||
unsigned int *retfmt) | ||
{ | ||
struct device_node *bitclkmaster = NULL; | ||
struct device_node *framemaster = NULL; | ||
int prefix_len = prefix ? strlen(prefix) : 0; | ||
unsigned int daifmt; | ||
|
||
daifmt = snd_soc_of_parse_daifmt(node, prefix, | ||
&bitclkmaster, &framemaster); | ||
daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK; | ||
|
||
if (prefix_len && !bitclkmaster && !framemaster) { | ||
/* | ||
* No dai-link level and master setting was not found from | ||
* sound node level, revert back to legacy DT parsing and | ||
* take the settings from codec node. | ||
*/ | ||
dev_dbg(dev, "Revert to legacy daifmt parsing\n"); | ||
|
||
daifmt = snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) | | ||
(daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK); | ||
} else { | ||
if (codec == bitclkmaster) | ||
daifmt |= (codec == framemaster) ? | ||
SND_SOC_DAIFMT_CBM_CFM : SND_SOC_DAIFMT_CBM_CFS; | ||
else | ||
daifmt |= (codec == framemaster) ? | ||
SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS; | ||
} | ||
|
||
of_node_put(bitclkmaster); | ||
of_node_put(framemaster); | ||
|
||
*retfmt = daifmt; | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL_GPL(asoc_simple_card_parse_daifmt); | ||
|
||
int asoc_simple_card_set_dailink_name(struct device *dev, | ||
struct snd_soc_dai_link *dai_link, | ||
const char *fmt, ...) | ||
{ | ||
va_list ap; | ||
char *name = NULL; | ||
int ret = -ENOMEM; | ||
|
||
va_start(ap, fmt); | ||
name = devm_kvasprintf(dev, GFP_KERNEL, fmt, ap); | ||
va_end(ap); | ||
|
||
if (name) { | ||
ret = 0; | ||
|
||
dai_link->name = name; | ||
dai_link->stream_name = name; | ||
} | ||
|
||
return ret; | ||
} | ||
EXPORT_SYMBOL_GPL(asoc_simple_card_set_dailink_name); | ||
|
||
int asoc_simple_card_parse_card_name(struct snd_soc_card *card, | ||
char *prefix) | ||
{ | ||
char prop[128]; | ||
int ret; | ||
|
||
snprintf(prop, sizeof(prop), "%sname", prefix); | ||
|
||
/* Parse the card name from DT */ | ||
ret = snd_soc_of_parse_card_name(card, prop); | ||
if (ret < 0) | ||
return ret; | ||
|
||
if (!card->name && card->dai_link) | ||
card->name = card->dai_link->name; | ||
|
||
return 0; | ||
} | ||
EXPORT_SYMBOL_GPL(asoc_simple_card_parse_card_name); |
Oops, something went wrong.