summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-07-31 05:25:02 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2016-07-31 05:25:02 -0400
commitc9b95e5961c0294e0efffeaa847c1a1e6369204c (patch)
tree384daa5e36a795d48475d445b3857b47e0b3f8d3 /include
parentbad60e6f259a01cf9f29a1ef8d435ab6c60b2de9 (diff)
parent0984d159c8ad6618c6ebd9f00bc3f374fa52bc35 (diff)
Merge tag 'sound-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound updates from Takashi Iwai: "The majority of this update is about ASoC, including a few new drivers, and the rest are mostly minor changes. The only substantial change in ALSA core is about the additional error handling in the compress-offload API. Below are highlights: - Add the error propagating support in compress-offload API - HD-audio: a usual Dell headset fixup, an Intel HDMI/DP fix, and the default mixer setup change ot turn off the loopback - Lots of updates for ASoC Intel drivers, mostly board support and bug fixing, and to the NAU8825 driver - Work on generalizing bits of simple-card to allow more code sharing with the Renesas rsrc-card (which can't use simple-card due to DPCM) - Removal of the Odroid X2 driver due to replacement with simple-card - Support for several new Mediatek platforms and associated boards - New ASoC drivers for Allwinner A10, Analog Devices ADAU7002, Broadcom Cygnus, Cirrus Logic CS35L33 and CS53L30, Maxim MAX8960 and MAX98504, Realtek RT5514 and Wolfson WM8758" * tag 'sound-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (278 commits) sound: oss: Use kernel_read_file_from_path() for mod_firmware_load() ASoC: Intel: Skylake: Delete an unnecessary check before the function call "release_firmware" ASoC: Intel: Skylake: Fix NULL Pointer exception in dynamic_debug. ASoC: samsung: Specify DMA channels through struct snd_dmaengine_pcm_config ASoC: samsung: Fix error paths in the I2S driver's probe() ASoC: cs53l30: Fix bit shift issue of TDM mode ASoC: cs53l30: Fix a bug for TDM slot location validation ASoC: rockchip: correct the spdif clk ALSA: echoaudio: purge contradictions between dimension matrix members and total number of members ASoC: rsrc-card: use asoc_simple_card_parse_card_name() ASoC: rsrc-card: use asoc_simple_dai instead of rsrc_card_dai ASoC: rsrc-card: use asoc_simple_card_parse_dailink_name() ASoC: simple-card: use asoc_simple_card_parse_card_name() ASoC: simple-card-utils: add asoc_simple_card_parse_card_name() ASoC: simple-card: use asoc_simple_card_parse_dailink_name() ASoC: simple-card-utils: add asoc_simple_card_set_dailink_name() ASoC: nau8825: drop redundant idiom when converting integer to boolean ASoC: nau8825: jack connection decision with different insertion logic ASoC: mediatek: Add HDMI dai-links to the mt8173-rt5650 machine driver ASoC: mediatek: mt2701: fix non static symbol warning ...
Diffstat (limited to 'include')
-rw-r--r--include/acpi/acpi_bus.h7
-rw-r--r--include/linux/acpi.h6
-rw-r--r--include/linux/mfd/arizona/core.h10
-rw-r--r--include/linux/of.h14
-rw-r--r--include/linux/property.h3
-rw-r--r--include/sound/compress_driver.h5
-rw-r--r--include/sound/cs35l33.h48
-rw-r--r--include/sound/hdmi-codec.h13
-rw-r--r--include/sound/simple_card.h11
-rw-r--r--include/sound/simple_card_utils.h36
-rw-r--r--include/sound/soc-dapm.h8
-rw-r--r--include/sound/soc.h11
12 files changed, 149 insertions, 23 deletions
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 788c6c35291a..c1a524de67c5 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -420,6 +420,13 @@ static inline struct acpi_data_node *to_acpi_data_node(struct fwnode_handle *fwn
420 container_of(fwnode, struct acpi_data_node, fwnode) : NULL; 420 container_of(fwnode, struct acpi_data_node, fwnode) : NULL;
421} 421}
422 422
423static inline bool acpi_data_node_match(struct fwnode_handle *fwnode,
424 const char *name)
425{
426 return is_acpi_data_node(fwnode) ?
427 (!strcmp(to_acpi_data_node(fwnode)->name, name)) : false;
428}
429
423static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev) 430static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
424{ 431{
425 return &adev->fwnode; 432 return &adev->fwnode;
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index db7c8bd39a3c..4d8452c2384b 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -608,6 +608,12 @@ static inline struct acpi_data_node *to_acpi_data_node(struct fwnode_handle *fwn
608 return NULL; 608 return NULL;
609} 609}
610 610
611static inline bool acpi_data_node_match(struct fwnode_handle *fwnode,
612 const char *name)
613{
614 return false;
615}
616
611static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev) 617static inline struct fwnode_handle *acpi_fwnode_handle(struct acpi_device *adev)
612{ 618{
613 return NULL; 619 return NULL;
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h
index d55a42297d49..58ab4c0fe761 100644
--- a/include/linux/mfd/arizona/core.h
+++ b/include/linux/mfd/arizona/core.h
@@ -14,6 +14,7 @@
14#define _WM_ARIZONA_CORE_H 14#define _WM_ARIZONA_CORE_H
15 15
16#include <linux/interrupt.h> 16#include <linux/interrupt.h>
17#include <linux/notifier.h>
17#include <linux/regmap.h> 18#include <linux/regmap.h>
18#include <linux/regulator/consumer.h> 19#include <linux/regulator/consumer.h>
19#include <linux/mfd/arizona/pdata.h> 20#include <linux/mfd/arizona/pdata.h>
@@ -148,8 +149,17 @@ struct arizona {
148 uint16_t dac_comp_coeff; 149 uint16_t dac_comp_coeff;
149 uint8_t dac_comp_enabled; 150 uint8_t dac_comp_enabled;
150 struct mutex dac_comp_lock; 151 struct mutex dac_comp_lock;
152
153 struct blocking_notifier_head notifier;
151}; 154};
152 155
156static inline int arizona_call_notifiers(struct arizona *arizona,
157 unsigned long event,
158 void *data)
159{
160 return blocking_notifier_call_chain(&arizona->notifier, event, data);
161}
162
153int arizona_clk32k_enable(struct arizona *arizona); 163int arizona_clk32k_enable(struct arizona *arizona);
154int arizona_clk32k_disable(struct arizona *arizona); 164int arizona_clk32k_disable(struct arizona *arizona);
155 165
diff --git a/include/linux/of.h b/include/linux/of.h
index eb8d4b4c5dfc..3d9ff8e9d803 100644
--- a/include/linux/of.h
+++ b/include/linux/of.h
@@ -238,13 +238,6 @@ static inline unsigned long of_read_ulong(const __be32 *cell, int size)
238#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1 238#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1
239#endif 239#endif
240 240
241/* Default string compare functions, Allow arch asm/prom.h to override */
242#if !defined(of_compat_cmp)
243#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2))
244#define of_prop_cmp(s1, s2) strcmp((s1), (s2))
245#define of_node_cmp(s1, s2) strcasecmp((s1), (s2))
246#endif
247
248#define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags) 241#define OF_IS_DYNAMIC(x) test_bit(OF_DYNAMIC, &x->_flags)
249#define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags) 242#define OF_MARK_DYNAMIC(x) set_bit(OF_DYNAMIC, &x->_flags)
250 243
@@ -728,6 +721,13 @@ static inline void of_property_clear_flag(struct property *p, unsigned long flag
728#define of_match_node(_matches, _node) NULL 721#define of_match_node(_matches, _node) NULL
729#endif /* CONFIG_OF */ 722#endif /* CONFIG_OF */
730 723
724/* Default string compare functions, Allow arch asm/prom.h to override */
725#if !defined(of_compat_cmp)
726#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2))
727#define of_prop_cmp(s1, s2) strcmp((s1), (s2))
728#define of_node_cmp(s1, s2) strcasecmp((s1), (s2))
729#endif
730
731#if defined(CONFIG_OF) && defined(CONFIG_NUMA) 731#if defined(CONFIG_OF) && defined(CONFIG_NUMA)
732extern int of_node_to_nid(struct device_node *np); 732extern int of_node_to_nid(struct device_node *np);
733#else 733#else
diff --git a/include/linux/property.h b/include/linux/property.h
index ecab11e40794..3a2f9ae25c86 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -77,6 +77,9 @@ struct fwnode_handle *device_get_next_child_node(struct device *dev,
77 for (child = device_get_next_child_node(dev, NULL); child; \ 77 for (child = device_get_next_child_node(dev, NULL); child; \
78 child = device_get_next_child_node(dev, child)) 78 child = device_get_next_child_node(dev, child))
79 79
80struct fwnode_handle *device_get_named_child_node(struct device *dev,
81 const char *childname);
82
80void fwnode_handle_put(struct fwnode_handle *fwnode); 83void fwnode_handle_put(struct fwnode_handle *fwnode);
81 84
82unsigned int device_get_child_node_count(struct device *dev); 85unsigned int device_get_child_node_count(struct device *dev);
diff --git a/include/sound/compress_driver.h b/include/sound/compress_driver.h
index c0abcdc11470..cee8c00f3d3e 100644
--- a/include/sound/compress_driver.h
+++ b/include/sound/compress_driver.h
@@ -68,6 +68,7 @@ struct snd_compr_runtime {
68 * @ops: pointer to DSP callbacks 68 * @ops: pointer to DSP callbacks
69 * @runtime: pointer to runtime structure 69 * @runtime: pointer to runtime structure
70 * @device: device pointer 70 * @device: device pointer
71 * @error_work: delayed work used when closing the stream due to an error
71 * @direction: stream direction, playback/recording 72 * @direction: stream direction, playback/recording
72 * @metadata_set: metadata set flag, true when set 73 * @metadata_set: metadata set flag, true when set
73 * @next_track: has userspace signal next track transition, true when set 74 * @next_track: has userspace signal next track transition, true when set
@@ -78,6 +79,7 @@ struct snd_compr_stream {
78 struct snd_compr_ops *ops; 79 struct snd_compr_ops *ops;
79 struct snd_compr_runtime *runtime; 80 struct snd_compr_runtime *runtime;
80 struct snd_compr *device; 81 struct snd_compr *device;
82 struct delayed_work error_work;
81 enum snd_compr_direction direction; 83 enum snd_compr_direction direction;
82 bool metadata_set; 84 bool metadata_set;
83 bool next_track; 85 bool next_track;
@@ -187,4 +189,7 @@ static inline void snd_compr_drain_notify(struct snd_compr_stream *stream)
187 wake_up(&stream->runtime->sleep); 189 wake_up(&stream->runtime->sleep);
188} 190}
189 191
192int snd_compr_stop_error(struct snd_compr_stream *stream,
193 snd_pcm_state_t state);
194
190#endif 195#endif
diff --git a/include/sound/cs35l33.h b/include/sound/cs35l33.h
new file mode 100644
index 000000000000..b6eadce76fc8
--- /dev/null
+++ b/include/sound/cs35l33.h
@@ -0,0 +1,48 @@
1/*
2 * linux/sound/cs35l33.h -- Platform data for CS35l33
3 *
4 * Copyright (c) 2016 Cirrus Logic Inc.
5 *
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.
9 */
10
11#ifndef __CS35L33_H
12#define __CS35L33_H
13
14struct cs35l33_hg {
15 bool enable_hg_algo;
16 unsigned int mem_depth;
17 unsigned int release_rate;
18 unsigned int hd_rm;
19 unsigned int ldo_thld;
20 unsigned int ldo_path_disable;
21 unsigned int ldo_entry_delay;
22 bool vp_hg_auto;
23 unsigned int vp_hg;
24 unsigned int vp_hg_rate;
25 unsigned int vp_hg_va;
26};
27
28struct cs35l33_pdata {
29 /* Boost Controller Voltage Setting */
30 unsigned int boost_ctl;
31
32 /* Boost Controller Peak Current */
33 unsigned int boost_ipk;
34
35 /* Amplifier Drive Select */
36 unsigned int amp_drv_sel;
37
38 /* soft volume ramp */
39 unsigned int ramp_rate;
40
41 /* IMON adc scale */
42 unsigned int imon_adc_scale;
43
44 /* H/G algo configuration */
45 struct cs35l33_hg hg_config;
46};
47
48#endif /* __CS35L33_H */
diff --git a/include/sound/hdmi-codec.h b/include/sound/hdmi-codec.h
index fc3a481ad91e..530c57bdefa0 100644
--- a/include/sound/hdmi-codec.h
+++ b/include/sound/hdmi-codec.h
@@ -53,18 +53,19 @@ struct hdmi_codec_params {
53 int channels; 53 int channels;
54}; 54};
55 55
56struct hdmi_codec_pdata;
56struct hdmi_codec_ops { 57struct hdmi_codec_ops {
57 /* 58 /*
58 * Called when ASoC starts an audio stream setup. 59 * Called when ASoC starts an audio stream setup.
59 * Optional 60 * Optional
60 */ 61 */
61 int (*audio_startup)(struct device *dev); 62 int (*audio_startup)(struct device *dev, void *data);
62 63
63 /* 64 /*
64 * Configures HDMI-encoder for audio stream. 65 * Configures HDMI-encoder for audio stream.
65 * Mandatory 66 * Mandatory
66 */ 67 */
67 int (*hw_params)(struct device *dev, 68 int (*hw_params)(struct device *dev, void *data,
68 struct hdmi_codec_daifmt *fmt, 69 struct hdmi_codec_daifmt *fmt,
69 struct hdmi_codec_params *hparms); 70 struct hdmi_codec_params *hparms);
70 71
@@ -72,19 +73,20 @@ struct hdmi_codec_ops {
72 * Shuts down the audio stream. 73 * Shuts down the audio stream.
73 * Mandatory 74 * Mandatory
74 */ 75 */
75 void (*audio_shutdown)(struct device *dev); 76 void (*audio_shutdown)(struct device *dev, void *data);
76 77
77 /* 78 /*
78 * Mute/unmute HDMI audio stream. 79 * Mute/unmute HDMI audio stream.
79 * Optional 80 * Optional
80 */ 81 */
81 int (*digital_mute)(struct device *dev, bool enable); 82 int (*digital_mute)(struct device *dev, void *data, bool enable);
82 83
83 /* 84 /*
84 * Provides EDID-Like-Data from connected HDMI device. 85 * Provides EDID-Like-Data from connected HDMI device.
85 * Optional 86 * Optional
86 */ 87 */
87 int (*get_eld)(struct device *dev, uint8_t *buf, size_t len); 88 int (*get_eld)(struct device *dev, void *data,
89 uint8_t *buf, size_t len);
88}; 90};
89 91
90/* HDMI codec initalization data */ 92/* HDMI codec initalization data */
@@ -93,6 +95,7 @@ struct hdmi_codec_pdata {
93 uint i2s:1; 95 uint i2s:1;
94 uint spdif:1; 96 uint spdif:1;
95 int max_i2s_channels; 97 int max_i2s_channels;
98 void *data;
96}; 99};
97 100
98#define HDMI_CODEC_DRV_NAME "hdmi-audio-codec" 101#define HDMI_CODEC_DRV_NAME "hdmi-audio-codec"
diff --git a/include/sound/simple_card.h b/include/sound/simple_card.h
index 0399352f3a62..a6a2e1547092 100644
--- a/include/sound/simple_card.h
+++ b/include/sound/simple_card.h
@@ -13,16 +13,7 @@
13#define __SIMPLE_CARD_H 13#define __SIMPLE_CARD_H
14 14
15#include <sound/soc.h> 15#include <sound/soc.h>
16 16#include <sound/simple_card_utils.h>
17struct asoc_simple_dai {
18 const char *name;
19 unsigned int sysclk;
20 int slots;
21 int slot_width;
22 unsigned int tx_slot_mask;
23 unsigned int rx_slot_mask;
24 struct clk *clk;
25};
26 17
27struct asoc_simple_card_info { 18struct asoc_simple_card_info {
28 const char *name; 19 const char *name;
diff --git a/include/sound/simple_card_utils.h b/include/sound/simple_card_utils.h
new file mode 100644
index 000000000000..86088aed9002
--- /dev/null
+++ b/include/sound/simple_card_utils.h
@@ -0,0 +1,36 @@
1/*
2 * simple_card_core.h
3 *
4 * Copyright (c) 2016 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
5 *
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.
9 */
10#ifndef __SIMPLE_CARD_CORE_H
11#define __SIMPLE_CARD_CORE_H
12
13#include <sound/soc.h>
14
15struct asoc_simple_dai {
16 const char *name;
17 unsigned int sysclk;
18 int slots;
19 int slot_width;
20 unsigned int tx_slot_mask;
21 unsigned int rx_slot_mask;
22 struct clk *clk;
23};
24
25int asoc_simple_card_parse_daifmt(struct device *dev,
26 struct device_node *node,
27 struct device_node *codec,
28 char *prefix,
29 unsigned int *retfmt);
30int asoc_simple_card_set_dailink_name(struct device *dev,
31 struct snd_soc_dai_link *dai_link,
32 const char *fmt, ...);
33int asoc_simple_card_parse_card_name(struct snd_soc_card *card,
34 char *prefix);
35
36#endif /* __SIMPLE_CARD_CORE_H */
diff --git a/include/sound/soc-dapm.h b/include/sound/soc-dapm.h
index 3101d53468aa..f60d755f7ac6 100644
--- a/include/sound/soc-dapm.h
+++ b/include/sound/soc-dapm.h
@@ -358,6 +358,7 @@ struct snd_soc_dapm_context;
358struct regulator; 358struct regulator;
359struct snd_soc_dapm_widget_list; 359struct snd_soc_dapm_widget_list;
360struct snd_soc_dapm_update; 360struct snd_soc_dapm_update;
361enum snd_soc_dapm_direction;
361 362
362int dapm_regulator_event(struct snd_soc_dapm_widget *w, 363int dapm_regulator_event(struct snd_soc_dapm_widget *w,
363 struct snd_kcontrol *kcontrol, int event); 364 struct snd_kcontrol *kcontrol, int event);
@@ -382,6 +383,9 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
382int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm, 383int snd_soc_dapm_new_controls(struct snd_soc_dapm_context *dapm,
383 const struct snd_soc_dapm_widget *widget, 384 const struct snd_soc_dapm_widget *widget,
384 int num); 385 int num);
386struct snd_soc_dapm_widget *snd_soc_dapm_new_control(
387 struct snd_soc_dapm_context *dapm,
388 const struct snd_soc_dapm_widget *widget);
385int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm, 389int snd_soc_dapm_new_dai_widgets(struct snd_soc_dapm_context *dapm,
386 struct snd_soc_dai *dai); 390 struct snd_soc_dai *dai);
387int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card); 391int snd_soc_dapm_link_dai_widgets(struct snd_soc_card *card);
@@ -451,7 +455,9 @@ void dapm_mark_endpoints_dirty(struct snd_soc_card *card);
451 455
452/* dapm path query */ 456/* dapm path query */
453int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream, 457int snd_soc_dapm_dai_get_connected_widgets(struct snd_soc_dai *dai, int stream,
454 struct snd_soc_dapm_widget_list **list); 458 struct snd_soc_dapm_widget_list **list,
459 bool (*custom_stop_condition)(struct snd_soc_dapm_widget *,
460 enum snd_soc_dapm_direction));
455 461
456struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm( 462struct snd_soc_dapm_context *snd_soc_dapm_kcontrol_dapm(
457 struct snd_kcontrol *kcontrol); 463 struct snd_kcontrol *kcontrol);
diff --git a/include/sound/soc.h b/include/sound/soc.h
index fd7b58a58d6f..6144882cc96a 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -179,6 +179,17 @@
179 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \ 179 .get = snd_soc_get_volsw, .put = snd_soc_put_volsw, \
180 .private_value = SOC_DOUBLE_R_S_VALUE(reg_left, reg_right, xshift, \ 180 .private_value = SOC_DOUBLE_R_S_VALUE(reg_left, reg_right, xshift, \
181 xmin, xmax, xsign_bit, xinvert) } 181 xmin, xmax, xsign_bit, xinvert) }
182#define SOC_SINGLE_S8_TLV(xname, xreg, xmin, xmax, tlv_array) \
183{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
184 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \
185 SNDRV_CTL_ELEM_ACCESS_READWRITE, \
186 .tlv.p = (tlv_array), \
187 .info = snd_soc_info_volsw, .get = snd_soc_get_volsw,\
188 .put = snd_soc_put_volsw, \
189 .private_value = (unsigned long)&(struct soc_mixer_control) \
190 {.reg = xreg, .rreg = xreg, \
191 .min = xmin, .max = xmax, .platform_max = xmax, \
192 .sign_bit = 7,} }
182#define SOC_DOUBLE_S8_TLV(xname, xreg, xmin, xmax, tlv_array) \ 193#define SOC_DOUBLE_S8_TLV(xname, xreg, xmin, xmax, tlv_array) \
183{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ 194{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \
184 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \ 195 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | \