提交 12b76f3b 编写于 作者: L Linus Torvalds

Merge tag 'sound-fix-4.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "Here are a collection of small fixes tha have been gathered for
  4.4-rc1.  The only significant changes are those in PCI drivers
  Kconfig, to use "depends on" instead of "select" for CONFIG_ZONE_DMA.
  A reverse select is often more user-friendly, but in this case, it
  makes hard to manage with the conflict with ZONE_DEVICE, so changed in
  such a way for now.

  Others are all small fixes and quirks: an error check in soundcore
  reigster_chrdev(), HD-audio HDMI/DP phantom jack fix, Intel Broxton DP
  quirk, USB-audio DSD device quirk, some constifications, etc"

* tag 'sound-fix-4.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: pci: depend on ZONE_DMA
  ALSA: hda - Simplify phantom jack handling for HDMI/DP
  ALSA: hda/hdmi - apply Skylake fix-ups to Broxton display codec
  ALSA: ctxfi: constify rsc ops structures
  ALSA: usb: Add native DSD support for Aune X1S
  ALSA: oxfw: add an comment to Kconfig for TASCAM FireOne
  sound: fix check for error condition of register_chrdev()
...@@ -38,6 +38,7 @@ config SND_OXFW ...@@ -38,6 +38,7 @@ config SND_OXFW
* Mackie(Loud) Tapco Link.Firewire * Mackie(Loud) Tapco Link.Firewire
* Mackie(Loud) d.2 pro/d.4 pro * Mackie(Loud) d.2 pro/d.4 pro
* Mackie(Loud) U.420/U.420d * Mackie(Loud) U.420/U.420d
* TASCAM FireOne
To compile this driver as a module, choose M here: the module To compile this driver as a module, choose M here: the module
will be called snd-oxfw. will be called snd-oxfw.
......
...@@ -25,7 +25,7 @@ config SND_ALS300 ...@@ -25,7 +25,7 @@ config SND_ALS300
select SND_PCM select SND_PCM
select SND_AC97_CODEC select SND_AC97_CODEC
select SND_OPL3_LIB select SND_OPL3_LIB
select ZONE_DMA depends on ZONE_DMA
help help
Say 'Y' or 'M' to include support for Avance Logic ALS300/ALS300+ Say 'Y' or 'M' to include support for Avance Logic ALS300/ALS300+
...@@ -50,7 +50,7 @@ config SND_ALI5451 ...@@ -50,7 +50,7 @@ config SND_ALI5451
tristate "ALi M5451 PCI Audio Controller" tristate "ALi M5451 PCI Audio Controller"
select SND_MPU401_UART select SND_MPU401_UART
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for the integrated AC97 sound Say Y here to include support for the integrated AC97 sound
device on motherboards using the ALi M5451 Audio Controller device on motherboards using the ALi M5451 Audio Controller
...@@ -155,7 +155,7 @@ config SND_AZT3328 ...@@ -155,7 +155,7 @@ config SND_AZT3328
select SND_PCM select SND_PCM
select SND_RAWMIDI select SND_RAWMIDI
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for Aztech AZF3328 (PCI168) Say Y here to include support for Aztech AZF3328 (PCI168)
soundcards. soundcards.
...@@ -463,7 +463,7 @@ config SND_EMU10K1 ...@@ -463,7 +463,7 @@ config SND_EMU10K1
select SND_HWDEP select SND_HWDEP
select SND_RAWMIDI select SND_RAWMIDI
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y to include support for Sound Blaster PCI 512, Live!, Say Y to include support for Sound Blaster PCI 512, Live!,
Audigy and E-mu APS (partially supported) soundcards. Audigy and E-mu APS (partially supported) soundcards.
...@@ -479,7 +479,7 @@ config SND_EMU10K1X ...@@ -479,7 +479,7 @@ config SND_EMU10K1X
tristate "Emu10k1X (Dell OEM Version)" tristate "Emu10k1X (Dell OEM Version)"
select SND_AC97_CODEC select SND_AC97_CODEC
select SND_RAWMIDI select SND_RAWMIDI
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for the Dell OEM version of the Say Y here to include support for the Dell OEM version of the
Sound Blaster Live!. Sound Blaster Live!.
...@@ -513,7 +513,7 @@ config SND_ES1938 ...@@ -513,7 +513,7 @@ config SND_ES1938
select SND_OPL3_LIB select SND_OPL3_LIB
select SND_MPU401_UART select SND_MPU401_UART
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for soundcards based on ESS Solo-1 Say Y here to include support for soundcards based on ESS Solo-1
(ES1938, ES1946, ES1969) chips. (ES1938, ES1946, ES1969) chips.
...@@ -525,7 +525,7 @@ config SND_ES1968 ...@@ -525,7 +525,7 @@ config SND_ES1968
tristate "ESS ES1968/1978 (Maestro-1/2/2E)" tristate "ESS ES1968/1978 (Maestro-1/2/2E)"
select SND_MPU401_UART select SND_MPU401_UART
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for soundcards based on ESS Maestro Say Y here to include support for soundcards based on ESS Maestro
1/2/2E chips. 1/2/2E chips.
...@@ -612,7 +612,7 @@ config SND_ICE1712 ...@@ -612,7 +612,7 @@ config SND_ICE1712
select SND_MPU401_UART select SND_MPU401_UART
select SND_AC97_CODEC select SND_AC97_CODEC
select BITREVERSE select BITREVERSE
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for soundcards based on the Say Y here to include support for soundcards based on the
ICE1712 (Envy24) chip. ICE1712 (Envy24) chip.
...@@ -700,7 +700,7 @@ config SND_LX6464ES ...@@ -700,7 +700,7 @@ config SND_LX6464ES
config SND_MAESTRO3 config SND_MAESTRO3
tristate "ESS Allegro/Maestro3" tristate "ESS Allegro/Maestro3"
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for soundcards based on ESS Maestro 3 Say Y here to include support for soundcards based on ESS Maestro 3
(Allegro) chips. (Allegro) chips.
...@@ -806,7 +806,7 @@ config SND_SIS7019 ...@@ -806,7 +806,7 @@ config SND_SIS7019
tristate "SiS 7019 Audio Accelerator" tristate "SiS 7019 Audio Accelerator"
depends on X86_32 depends on X86_32
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for the SiS 7019 Audio Accelerator. Say Y here to include support for the SiS 7019 Audio Accelerator.
...@@ -818,7 +818,7 @@ config SND_SONICVIBES ...@@ -818,7 +818,7 @@ config SND_SONICVIBES
select SND_OPL3_LIB select SND_OPL3_LIB
select SND_MPU401_UART select SND_MPU401_UART
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for soundcards based on the S3 Say Y here to include support for soundcards based on the S3
SonicVibes chip. SonicVibes chip.
...@@ -830,7 +830,7 @@ config SND_TRIDENT ...@@ -830,7 +830,7 @@ config SND_TRIDENT
tristate "Trident 4D-Wave DX/NX; SiS 7018" tristate "Trident 4D-Wave DX/NX; SiS 7018"
select SND_MPU401_UART select SND_MPU401_UART
select SND_AC97_CODEC select SND_AC97_CODEC
select ZONE_DMA depends on ZONE_DMA
help help
Say Y here to include support for soundcards based on Trident Say Y here to include support for soundcards based on Trident
4D-Wave DX/NX or SiS 7018 chips. 4D-Wave DX/NX or SiS 7018 chips.
......
...@@ -49,7 +49,7 @@ static int amixer_output_slot(const struct rsc *rsc) ...@@ -49,7 +49,7 @@ static int amixer_output_slot(const struct rsc *rsc)
return (amixer_index(rsc) << 4) + 0x4; return (amixer_index(rsc) << 4) + 0x4;
} }
static struct rsc_ops amixer_basic_rsc_ops = { static const struct rsc_ops amixer_basic_rsc_ops = {
.master = amixer_master, .master = amixer_master,
.next_conj = amixer_next_conj, .next_conj = amixer_next_conj,
.index = amixer_index, .index = amixer_index,
...@@ -186,7 +186,7 @@ static int amixer_setup(struct amixer *amixer, struct rsc *input, ...@@ -186,7 +186,7 @@ static int amixer_setup(struct amixer *amixer, struct rsc *input,
return 0; return 0;
} }
static struct amixer_rsc_ops amixer_ops = { static const struct amixer_rsc_ops amixer_ops = {
.set_input = amixer_set_input, .set_input = amixer_set_input,
.set_invalid_squash = amixer_set_invalid_squash, .set_invalid_squash = amixer_set_invalid_squash,
.set_scale = amixer_set_y, .set_scale = amixer_set_y,
...@@ -357,7 +357,7 @@ static int sum_output_slot(const struct rsc *rsc) ...@@ -357,7 +357,7 @@ static int sum_output_slot(const struct rsc *rsc)
return (sum_index(rsc) << 4) + 0xc; return (sum_index(rsc) << 4) + 0xc;
} }
static struct rsc_ops sum_basic_rsc_ops = { static const struct rsc_ops sum_basic_rsc_ops = {
.master = sum_master, .master = sum_master,
.next_conj = sum_next_conj, .next_conj = sum_next_conj,
.index = sum_index, .index = sum_index,
......
...@@ -58,7 +58,7 @@ struct amixer { ...@@ -58,7 +58,7 @@ struct amixer {
unsigned char idx[8]; unsigned char idx[8];
struct rsc *input; /* pointer to a resource acting as source */ struct rsc *input; /* pointer to a resource acting as source */
struct sum *sum; /* Put amixer output to this summation node */ struct sum *sum; /* Put amixer output to this summation node */
struct amixer_rsc_ops *ops; /* AMixer specific operations */ const struct amixer_rsc_ops *ops; /* AMixer specific operations */
}; };
struct amixer_rsc_ops { struct amixer_rsc_ops {
......
...@@ -83,21 +83,21 @@ static int daio_in_next_conj_20k2(struct rsc *rsc) ...@@ -83,21 +83,21 @@ static int daio_in_next_conj_20k2(struct rsc *rsc)
return rsc->conj += 0x100; return rsc->conj += 0x100;
} }
static struct rsc_ops daio_out_rsc_ops = { static const struct rsc_ops daio_out_rsc_ops = {
.master = daio_master, .master = daio_master,
.next_conj = daio_out_next_conj, .next_conj = daio_out_next_conj,
.index = daio_index, .index = daio_index,
.output_slot = NULL, .output_slot = NULL,
}; };
static struct rsc_ops daio_in_rsc_ops_20k1 = { static const struct rsc_ops daio_in_rsc_ops_20k1 = {
.master = daio_master, .master = daio_master,
.next_conj = daio_in_next_conj_20k1, .next_conj = daio_in_next_conj_20k1,
.index = NULL, .index = NULL,
.output_slot = daio_index, .output_slot = daio_index,
}; };
static struct rsc_ops daio_in_rsc_ops_20k2 = { static const struct rsc_ops daio_in_rsc_ops_20k2 = {
.master = daio_master, .master = daio_master,
.next_conj = daio_in_next_conj_20k2, .next_conj = daio_in_next_conj_20k2,
.index = NULL, .index = NULL,
...@@ -263,7 +263,7 @@ static int dao_clear_right_input(struct dao *dao) ...@@ -263,7 +263,7 @@ static int dao_clear_right_input(struct dao *dao)
return 0; return 0;
} }
static struct dao_rsc_ops dao_ops = { static const struct dao_rsc_ops dao_ops = {
.set_spos = dao_spdif_set_spos, .set_spos = dao_spdif_set_spos,
.commit_write = dao_commit_write, .commit_write = dao_commit_write,
.get_spos = dao_spdif_get_spos, .get_spos = dao_spdif_get_spos,
...@@ -318,7 +318,7 @@ static int dai_commit_write(struct dai *dai) ...@@ -318,7 +318,7 @@ static int dai_commit_write(struct dai *dai)
return 0; return 0;
} }
static struct dai_rsc_ops dai_ops = { static const struct dai_rsc_ops dai_ops = {
.set_srt_srcl = dai_set_srt_srcl, .set_srt_srcl = dai_set_srt_srcl,
.set_srt_srcr = dai_set_srt_srcr, .set_srt_srcr = dai_set_srt_srcr,
.set_srt_msr = dai_set_srt_msr, .set_srt_msr = dai_set_srt_msr,
......
...@@ -51,7 +51,7 @@ struct daio { ...@@ -51,7 +51,7 @@ struct daio {
struct dao { struct dao {
struct daio daio; struct daio daio;
struct dao_rsc_ops *ops; /* DAO specific operations */ const struct dao_rsc_ops *ops; /* DAO specific operations */
struct imapper **imappers; struct imapper **imappers;
struct daio_mgr *mgr; struct daio_mgr *mgr;
struct hw *hw; struct hw *hw;
...@@ -60,7 +60,7 @@ struct dao { ...@@ -60,7 +60,7 @@ struct dao {
struct dai { struct dai {
struct daio daio; struct daio daio;
struct dai_rsc_ops *ops; /* DAI specific operations */ const struct dai_rsc_ops *ops; /* DAI specific operations */
struct hw *hw; struct hw *hw;
void *ctrl_blk; void *ctrl_blk;
}; };
......
...@@ -127,7 +127,7 @@ static int rsc_master(struct rsc *rsc) ...@@ -127,7 +127,7 @@ static int rsc_master(struct rsc *rsc)
return rsc->conj = rsc->idx; return rsc->conj = rsc->idx;
} }
static struct rsc_ops rsc_generic_ops = { static const struct rsc_ops rsc_generic_ops = {
.index = rsc_index, .index = rsc_index,
.output_slot = audio_ring_slot, .output_slot = audio_ring_slot,
.master = rsc_master, .master = rsc_master,
......
...@@ -39,7 +39,7 @@ struct rsc { ...@@ -39,7 +39,7 @@ struct rsc {
u32 msr:4; /* The Master Sample Rate a resource working on */ u32 msr:4; /* The Master Sample Rate a resource working on */
void *ctrl_blk; /* Chip specific control info block for a resource */ void *ctrl_blk; /* Chip specific control info block for a resource */
struct hw *hw; /* Chip specific object for hardware access means */ struct hw *hw; /* Chip specific object for hardware access means */
struct rsc_ops *ops; /* Generic resource operations */ const struct rsc_ops *ops; /* Generic resource operations */
}; };
struct rsc_ops { struct rsc_ops {
......
...@@ -335,7 +335,7 @@ static int src_default_config_arcrw(struct src *src) ...@@ -335,7 +335,7 @@ static int src_default_config_arcrw(struct src *src)
return 0; return 0;
} }
static struct src_rsc_ops src_rsc_ops = { static const struct src_rsc_ops src_rsc_ops = {
.set_state = src_set_state, .set_state = src_set_state,
.set_bm = src_set_bm, .set_bm = src_set_bm,
.set_sf = src_set_sf, .set_sf = src_set_sf,
...@@ -611,7 +611,7 @@ static int srcimp_index(const struct rsc *rsc) ...@@ -611,7 +611,7 @@ static int srcimp_index(const struct rsc *rsc)
return container_of(rsc, struct srcimp, rsc)->idx[rsc->conj]; return container_of(rsc, struct srcimp, rsc)->idx[rsc->conj];
} }
static struct rsc_ops srcimp_basic_rsc_ops = { static const struct rsc_ops srcimp_basic_rsc_ops = {
.master = srcimp_master, .master = srcimp_master,
.next_conj = srcimp_next_conj, .next_conj = srcimp_next_conj,
.index = srcimp_index, .index = srcimp_index,
...@@ -662,7 +662,7 @@ static int srcimp_unmap(struct srcimp *srcimp) ...@@ -662,7 +662,7 @@ static int srcimp_unmap(struct srcimp *srcimp)
return 0; return 0;
} }
static struct srcimp_rsc_ops srcimp_ops = { static const struct srcimp_rsc_ops srcimp_ops = {
.map = srcimp_map, .map = srcimp_map,
.unmap = srcimp_unmap .unmap = srcimp_unmap
}; };
......
...@@ -48,7 +48,7 @@ struct src_rsc_ops; ...@@ -48,7 +48,7 @@ struct src_rsc_ops;
struct src { struct src {
struct rsc rsc; /* Basic resource info */ struct rsc rsc; /* Basic resource info */
struct src *intlv; /* Pointer to next interleaved SRC in a series */ struct src *intlv; /* Pointer to next interleaved SRC in a series */
struct src_rsc_ops *ops; /* SRC specific operations */ const struct src_rsc_ops *ops; /* SRC specific operations */
/* Number of contiguous srcs for interleaved usage */ /* Number of contiguous srcs for interleaved usage */
unsigned char multi; unsigned char multi;
unsigned char mode; /* Working mode of this SRC resource */ unsigned char mode; /* Working mode of this SRC resource */
...@@ -110,7 +110,7 @@ struct srcimp { ...@@ -110,7 +110,7 @@ struct srcimp {
struct imapper *imappers; struct imapper *imappers;
unsigned int mapped; /* A bit-map indicating which conj rsc is mapped */ unsigned int mapped; /* A bit-map indicating which conj rsc is mapped */
struct srcimp_mgr *mgr; struct srcimp_mgr *mgr;
struct srcimp_rsc_ops *ops; const struct srcimp_rsc_ops *ops;
}; };
struct srcimp_rsc_ops { struct srcimp_rsc_ops {
......
...@@ -383,7 +383,7 @@ static void hda_free_jack_priv(struct snd_jack *jack) ...@@ -383,7 +383,7 @@ static void hda_free_jack_priv(struct snd_jack *jack)
* This assigns a jack-detection kctl to the given pin. The kcontrol * This assigns a jack-detection kctl to the given pin. The kcontrol
* will have the given name and index. * will have the given name and index.
*/ */
static int __snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
const char *name, bool phantom_jack) const char *name, bool phantom_jack)
{ {
struct hda_jack_tbl *jack; struct hda_jack_tbl *jack;
...@@ -410,20 +410,6 @@ static int __snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, ...@@ -410,20 +410,6 @@ static int __snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
return 0; return 0;
} }
/**
* snd_hda_jack_add_kctl - Add a jack kctl for the given pin
* @codec: the HDA codec
* @nid: pin NID
* @name: the name string for the jack ctl
*
* This is a simple helper calling __snd_hda_jack_add_kctl().
*/
int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
const char *name)
{
return __snd_hda_jack_add_kctl(codec, nid, name, false);
}
EXPORT_SYMBOL_GPL(snd_hda_jack_add_kctl); EXPORT_SYMBOL_GPL(snd_hda_jack_add_kctl);
static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid, static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid,
...@@ -451,7 +437,7 @@ static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid, ...@@ -451,7 +437,7 @@ static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid,
if (phantom_jack) if (phantom_jack)
/* Example final name: "Internal Mic Phantom Jack" */ /* Example final name: "Internal Mic Phantom Jack" */
strncat(name, " Phantom", sizeof(name) - strlen(name) - 1); strncat(name, " Phantom", sizeof(name) - strlen(name) - 1);
err = __snd_hda_jack_add_kctl(codec, nid, name, phantom_jack); err = snd_hda_jack_add_kctl(codec, nid, name, phantom_jack);
if (err < 0) if (err < 0)
return err; return err;
......
...@@ -82,7 +82,7 @@ static inline bool snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid) ...@@ -82,7 +82,7 @@ static inline bool snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid)
bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid); bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid);
int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid,
const char *name); const char *name, bool phantom_jack);
int snd_hda_jack_add_kctls(struct hda_codec *codec, int snd_hda_jack_add_kctls(struct hda_codec *codec,
const struct auto_pin_cfg *cfg); const struct auto_pin_cfg *cfg);
......
...@@ -50,8 +50,9 @@ MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info"); ...@@ -50,8 +50,9 @@ MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info");
#define is_haswell(codec) ((codec)->core.vendor_id == 0x80862807) #define is_haswell(codec) ((codec)->core.vendor_id == 0x80862807)
#define is_broadwell(codec) ((codec)->core.vendor_id == 0x80862808) #define is_broadwell(codec) ((codec)->core.vendor_id == 0x80862808)
#define is_skylake(codec) ((codec)->core.vendor_id == 0x80862809) #define is_skylake(codec) ((codec)->core.vendor_id == 0x80862809)
#define is_broxton(codec) ((codec)->core.vendor_id == 0x8086280a)
#define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec) \ #define is_haswell_plus(codec) (is_haswell(codec) || is_broadwell(codec) \
|| is_skylake(codec)) || is_skylake(codec) || is_broxton(codec))
#define is_valleyview(codec) ((codec)->core.vendor_id == 0x80862882) #define is_valleyview(codec) ((codec)->core.vendor_id == 0x80862882)
#define is_cherryview(codec) ((codec)->core.vendor_id == 0x80862883) #define is_cherryview(codec) ((codec)->core.vendor_id == 0x80862883)
...@@ -2096,14 +2097,17 @@ static int generic_hdmi_build_jack(struct hda_codec *codec, int pin_idx) ...@@ -2096,14 +2097,17 @@ static int generic_hdmi_build_jack(struct hda_codec *codec, int pin_idx)
struct hdmi_spec *spec = codec->spec; struct hdmi_spec *spec = codec->spec;
struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
int pcmdev = get_pcm_rec(spec, pin_idx)->device; int pcmdev = get_pcm_rec(spec, pin_idx)->device;
bool phantom_jack;
if (pcmdev > 0) if (pcmdev > 0)
sprintf(hdmi_str + strlen(hdmi_str), ",pcm=%d", pcmdev); sprintf(hdmi_str + strlen(hdmi_str), ",pcm=%d", pcmdev);
if (!is_jack_detectable(codec, per_pin->pin_nid)) phantom_jack = !is_jack_detectable(codec, per_pin->pin_nid);
if (phantom_jack)
strncat(hdmi_str, " Phantom", strncat(hdmi_str, " Phantom",
sizeof(hdmi_str) - strlen(hdmi_str) - 1); sizeof(hdmi_str) - strlen(hdmi_str) - 1);
return snd_hda_jack_add_kctl(codec, per_pin->pin_nid, hdmi_str); return snd_hda_jack_add_kctl(codec, per_pin->pin_nid, hdmi_str,
phantom_jack);
} }
static int generic_hdmi_build_controls(struct hda_codec *codec) static int generic_hdmi_build_controls(struct hda_codec *codec)
......
...@@ -655,7 +655,7 @@ static void cleanup_oss_soundcore(void) ...@@ -655,7 +655,7 @@ static void cleanup_oss_soundcore(void)
static int __init init_oss_soundcore(void) static int __init init_oss_soundcore(void)
{ {
if (preclaim_oss && if (preclaim_oss &&
register_chrdev(SOUND_MAJOR, "sound", &soundcore_fops) == -1) { register_chrdev(SOUND_MAJOR, "sound", &soundcore_fops) < 0) {
printk(KERN_ERR "soundcore: sound device already in use.\n"); printk(KERN_ERR "soundcore: sound device already in use.\n");
return -EBUSY; return -EBUSY;
} }
......
...@@ -1274,6 +1274,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip, ...@@ -1274,6 +1274,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */ case USB_ID(0x20b1, 0x000a): /* Gustard DAC-X20U */
case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */ case USB_ID(0x20b1, 0x2009): /* DIYINHK DSD DXD 384kHz USB to I2S/DSD */
case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */ case USB_ID(0x20b1, 0x2023): /* JLsounds I2SoverUSB */
case USB_ID(0x20b1, 0x3023): /* Aune X1S 32BIT/384 DSD DAC */
if (fp->altsetting == 3) if (fp->altsetting == 3)
return SNDRV_PCM_FMTBIT_DSD_U32_BE; return SNDRV_PCM_FMTBIT_DSD_U32_BE;
break; break;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册