mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux: update to linux-3.8.4
This commit is contained in:
parent
136fab38f0
commit
c405618532
@ -19,7 +19,7 @@
|
||||
################################################################################
|
||||
|
||||
PKG_NAME="linux"
|
||||
PKG_VERSION="3.7.10"
|
||||
PKG_VERSION="3.8.4"
|
||||
PKG_REV="1"
|
||||
PKG_ARCH="any"
|
||||
PKG_LICENSE="GPL"
|
||||
|
@ -1,74 +0,0 @@
|
||||
diff -Naur linux-3.7.2/drivers/media/rc/ene_ir.c linux-3.7.2.patch/drivers/media/rc/ene_ir.c
|
||||
--- linux-3.7.2/drivers/media/rc/ene_ir.c 2013-01-11 18:19:28.000000000 +0100
|
||||
+++ linux-3.7.2.patch/drivers/media/rc/ene_ir.c 2013-01-16 11:32:07.124857030 +0100
|
||||
@@ -1003,7 +1003,7 @@
|
||||
dev = kzalloc(sizeof(struct ene_device), GFP_KERNEL);
|
||||
rdev = rc_allocate_device();
|
||||
if (!dev || !rdev)
|
||||
- goto error1;
|
||||
+ goto failure;
|
||||
|
||||
/* validate resources */
|
||||
error = -ENODEV;
|
||||
@@ -1014,10 +1014,10 @@
|
||||
|
||||
if (!pnp_port_valid(pnp_dev, 0) ||
|
||||
pnp_port_len(pnp_dev, 0) < ENE_IO_SIZE)
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
|
||||
if (!pnp_irq_valid(pnp_dev, 0))
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
|
||||
spin_lock_init(&dev->hw_lock);
|
||||
|
||||
@@ -1033,7 +1033,7 @@
|
||||
/* detect hardware version and features */
|
||||
error = ene_hw_detect(dev);
|
||||
if (error)
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
|
||||
if (!dev->hw_learning_and_tx_capable && txsim) {
|
||||
dev->hw_learning_and_tx_capable = true;
|
||||
@@ -1078,30 +1078,27 @@
|
||||
/* claim the resources */
|
||||
error = -EBUSY;
|
||||
if (!request_region(dev->hw_io, ENE_IO_SIZE, ENE_DRIVER_NAME)) {
|
||||
- dev->hw_io = -1;
|
||||
- dev->irq = -1;
|
||||
- goto error;
|
||||
+ goto failure;
|
||||
}
|
||||
|
||||
dev->irq = pnp_irq(pnp_dev, 0);
|
||||
if (request_irq(dev->irq, ene_isr,
|
||||
IRQF_SHARED, ENE_DRIVER_NAME, (void *)dev)) {
|
||||
- dev->irq = -1;
|
||||
- goto error;
|
||||
+ goto failure2;
|
||||
}
|
||||
|
||||
error = rc_register_device(rdev);
|
||||
if (error < 0)
|
||||
- goto error;
|
||||
+ goto failure3;
|
||||
|
||||
pr_notice("driver has been successfully loaded\n");
|
||||
return 0;
|
||||
-error:
|
||||
- if (dev && dev->irq >= 0)
|
||||
- free_irq(dev->irq, dev);
|
||||
- if (dev && dev->hw_io >= 0)
|
||||
- release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
-error1:
|
||||
+
|
||||
+failure3:
|
||||
+ free_irq(dev->irq, dev);
|
||||
+failure2:
|
||||
+ release_region(dev->hw_io, ENE_IO_SIZE);
|
||||
+failure:
|
||||
rc_free_device(rdev);
|
||||
kfree(dev);
|
||||
return error;
|
5942
packages/linux/patches/3.7.10/linux-210-dvbsky.patch
vendored
5942
packages/linux/patches/3.7.10/linux-210-dvbsky.patch
vendored
File diff suppressed because it is too large
Load Diff
@ -1,44 +0,0 @@
|
||||
From e9de051666a42dc7866267f85869170bcc6b957a Mon Sep 17 00:00:00 2001
|
||||
From: Juergen Lock <nox@jelal.kn-bremen.de>
|
||||
Date: Tue, 13 Nov 2012 14:09:28 -0300
|
||||
Subject: [PATCH] [media] rtl28xxu: add NOXON DAB/DAB+ USB dongle rev 2
|
||||
|
||||
This just adds the usbid to the rtl28xxu driver, that's all that's
|
||||
needed to make the stick work for DVB.
|
||||
|
||||
Signed-off-by: Juergen Lock <nox@jelal.kn-bremen.de>
|
||||
Signed-off-by: Antti Palosaari <crope@iki.fi>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
---
|
||||
drivers/media/dvb-core/dvb-usb-ids.h | 1 +
|
||||
drivers/media/usb/dvb-usb-v2/rtl28xxu.c | 2 ++
|
||||
2 files changed, 3 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb-core/dvb-usb-ids.h b/drivers/media/dvb-core/dvb-usb-ids.h
|
||||
index 58e0220..388c2eb 100644
|
||||
--- a/drivers/media/dvb-core/dvb-usb-ids.h
|
||||
+++ b/drivers/media/dvb-core/dvb-usb-ids.h
|
||||
@@ -250,6 +250,7 @@
|
||||
#define USB_PID_TERRATEC_T3 0x10a0
|
||||
#define USB_PID_TERRATEC_T5 0x10a1
|
||||
#define USB_PID_NOXON_DAB_STICK 0x00b3
|
||||
+#define USB_PID_NOXON_DAB_STICK_REV2 0x00e0
|
||||
#define USB_PID_PINNACLE_EXPRESSCARD_320CX 0x022e
|
||||
#define USB_PID_PINNACLE_PCTV2000E 0x022c
|
||||
#define USB_PID_PINNACLE_PCTV_DVB_T_FLASH 0x0228
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
index 223f0e7..a4c302d 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/rtl28xxu.c
|
||||
@@ -1338,6 +1338,8 @@ static const struct usb_device_id rtl28xxu_id_table[] = {
|
||||
&rtl2832u_props, "G-Tek Electronics Group Lifeview LV5TDLX DVB-T", NULL) },
|
||||
{ DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK,
|
||||
&rtl2832u_props, "NOXON DAB/DAB+ USB dongle", NULL) },
|
||||
+ { DVB_USB_DEVICE(USB_VID_TERRATEC, USB_PID_NOXON_DAB_STICK_REV2,
|
||||
+ &rtl2832u_props, "NOXON DAB/DAB+ USB dongle (rev 2)", NULL) },
|
||||
{ DVB_USB_DEVICE(USB_VID_GTEK, USB_PID_TREKSTOR_TERRES_2_0,
|
||||
&rtl2832u_props, "Trekstor DVB-T Stick Terres 2.0", NULL) },
|
||||
{ DVB_USB_DEVICE(USB_VID_DEXATEK, 0x1101,
|
||||
--
|
||||
1.7.7.6
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,266 +0,0 @@
|
||||
From dcda5806165c155d90b9aa466a1602cf4726012b Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Fri, 12 Oct 2012 17:24:51 +0200
|
||||
Subject: [PATCH] ALSA: hda - Add workaround for conflicting IEC958 controls
|
||||
|
||||
When both an SPDIF and an HDMI device are created on the same card
|
||||
instance, multiple IEC958 controls are created with indices=0, 1, ...
|
||||
But the alsa-lib configuration can't know which index corresponds
|
||||
actually to which PCM device, and both the SPDIF and the HDMI
|
||||
configurations point to the first IEC958 control wrongly.
|
||||
|
||||
This patch introduces a (hackish and ugly) workaround: the IEC958
|
||||
controls for the SPDIF device are re-labeled with device=1 when HDMI
|
||||
coexists. The device=1 corresponds to the actual PCM device for
|
||||
SPDIF, so it's anyway a better representation. In future, HDMI
|
||||
controls should be moved with the corresponding PCM device number,
|
||||
too.
|
||||
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/hda_codec.c | 60 ++++++++++++++++++++++++++++------------
|
||||
sound/pci/hda/hda_codec.h | 1 +
|
||||
sound/pci/hda/hda_local.h | 8 +++--
|
||||
sound/pci/hda/patch_cirrus.c | 5 ++-
|
||||
sound/pci/hda/patch_hdmi.c | 7 ++--
|
||||
sound/pci/hda/patch_realtek.c | 7 ++--
|
||||
sound/pci/hda/patch_sigmatel.c | 7 ++--
|
||||
7 files changed, 63 insertions(+), 32 deletions(-)
|
||||
|
||||
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
|
||||
index ee958a7..2da7875 100644
|
||||
--- a/sound/pci/hda/hda_codec.c
|
||||
+++ b/sound/pci/hda/hda_codec.c
|
||||
@@ -2166,12 +2166,12 @@ EXPORT_SYMBOL_HDA(snd_hda_set_vmaster_tlv);
|
||||
|
||||
/* find a mixer control element with the given name */
|
||||
static struct snd_kcontrol *
|
||||
-_snd_hda_find_mixer_ctl(struct hda_codec *codec,
|
||||
- const char *name, int idx)
|
||||
+find_mixer_ctl(struct hda_codec *codec, const char *name, int dev, int idx)
|
||||
{
|
||||
struct snd_ctl_elem_id id;
|
||||
memset(&id, 0, sizeof(id));
|
||||
id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
|
||||
+ id.device = dev;
|
||||
id.index = idx;
|
||||
if (snd_BUG_ON(strlen(name) >= sizeof(id.name)))
|
||||
return NULL;
|
||||
@@ -2189,15 +2189,16 @@ _snd_hda_find_mixer_ctl(struct hda_codec *codec,
|
||||
struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
|
||||
const char *name)
|
||||
{
|
||||
- return _snd_hda_find_mixer_ctl(codec, name, 0);
|
||||
+ return find_mixer_ctl(codec, name, 0, 0);
|
||||
}
|
||||
EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
|
||||
|
||||
-static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name)
|
||||
+static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
|
||||
+ int dev)
|
||||
{
|
||||
int idx;
|
||||
for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
|
||||
- if (!_snd_hda_find_mixer_ctl(codec, name, idx))
|
||||
+ if (!find_mixer_ctl(codec, name, dev, idx))
|
||||
return idx;
|
||||
}
|
||||
return -EBUSY;
|
||||
@@ -3148,26 +3149,48 @@ static struct snd_kcontrol_new dig_mixes[] = {
|
||||
};
|
||||
|
||||
/**
|
||||
- * snd_hda_create_spdif_out_ctls - create Output SPDIF-related controls
|
||||
+ * snd_hda_create_dig_out_ctls - create Output SPDIF-related controls
|
||||
* @codec: the HDA codec
|
||||
- * @nid: audio out widget NID
|
||||
- *
|
||||
- * Creates controls related with the SPDIF output.
|
||||
- * Called from each patch supporting the SPDIF out.
|
||||
+ * @associated_nid: NID that new ctls associated with
|
||||
+ * @cvt_nid: converter NID
|
||||
+ * @type: HDA_PCM_TYPE_*
|
||||
+ * Creates controls related with the digital output.
|
||||
+ * Called from each patch supporting the digital out.
|
||||
*
|
||||
* Returns 0 if successful, or a negative error code.
|
||||
*/
|
||||
-int snd_hda_create_spdif_out_ctls(struct hda_codec *codec,
|
||||
- hda_nid_t associated_nid,
|
||||
- hda_nid_t cvt_nid)
|
||||
+int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
|
||||
+ hda_nid_t associated_nid,
|
||||
+ hda_nid_t cvt_nid,
|
||||
+ int type)
|
||||
{
|
||||
int err;
|
||||
struct snd_kcontrol *kctl;
|
||||
struct snd_kcontrol_new *dig_mix;
|
||||
- int idx;
|
||||
+ int idx, dev = 0;
|
||||
+ const int spdif_pcm_dev = 1;
|
||||
struct hda_spdif_out *spdif;
|
||||
|
||||
- idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch");
|
||||
+ if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
|
||||
+ type == HDA_PCM_TYPE_SPDIF) {
|
||||
+ dev = spdif_pcm_dev;
|
||||
+ } else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
|
||||
+ type == HDA_PCM_TYPE_HDMI) {
|
||||
+ for (idx = 0; idx < codec->spdif_out.used; idx++) {
|
||||
+ spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
+ for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
|
||||
+ kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx);
|
||||
+ if (!kctl)
|
||||
+ break;
|
||||
+ kctl->id.device = spdif_pcm_dev;
|
||||
+ }
|
||||
+ }
|
||||
+ codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
|
||||
+ }
|
||||
+ if (!codec->primary_dig_out_type)
|
||||
+ codec->primary_dig_out_type = type;
|
||||
+
|
||||
+ idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev);
|
||||
if (idx < 0) {
|
||||
printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
|
||||
return -EBUSY;
|
||||
@@ -3177,6 +3200,7 @@ int snd_hda_create_spdif_out_ctls(struct hda_codec *codec,
|
||||
kctl = snd_ctl_new1(dig_mix, codec);
|
||||
if (!kctl)
|
||||
return -ENOMEM;
|
||||
+ kctl->id.device = dev;
|
||||
kctl->id.index = idx;
|
||||
kctl->private_value = codec->spdif_out.used - 1;
|
||||
err = snd_hda_ctl_add(codec, associated_nid, kctl);
|
||||
@@ -3189,7 +3213,7 @@ int snd_hda_create_spdif_out_ctls(struct hda_codec *codec,
|
||||
spdif->status = convert_to_spdif_status(spdif->ctls);
|
||||
return 0;
|
||||
}
|
||||
-EXPORT_SYMBOL_HDA(snd_hda_create_spdif_out_ctls);
|
||||
+EXPORT_SYMBOL_HDA(snd_hda_create_dig_out_ctls);
|
||||
|
||||
/* get the hda_spdif_out entry from the given NID
|
||||
* call within spdif_mutex lock
|
||||
@@ -3364,7 +3388,7 @@ int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid)
|
||||
struct snd_kcontrol_new *dig_mix;
|
||||
int idx;
|
||||
|
||||
- idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch");
|
||||
+ idx = find_empty_mixer_ctl_idx(codec, "IEC958 Capture Switch", 0);
|
||||
if (idx < 0) {
|
||||
printk(KERN_ERR "hda_codec: too many IEC958 inputs\n");
|
||||
return -EBUSY;
|
||||
@@ -4472,7 +4496,7 @@ int snd_hda_add_new_ctls(struct hda_codec *codec,
|
||||
addr = codec->addr;
|
||||
else if (!idx && !knew->index) {
|
||||
idx = find_empty_mixer_ctl_idx(codec,
|
||||
- knew->name);
|
||||
+ knew->name, 0);
|
||||
if (idx <= 0)
|
||||
return err;
|
||||
} else
|
||||
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
|
||||
index 10a03b0..62d4229 100644
|
||||
--- a/sound/pci/hda/hda_codec.h
|
||||
+++ b/sound/pci/hda/hda_codec.h
|
||||
@@ -836,6 +836,7 @@ struct hda_codec {
|
||||
struct mutex hash_mutex;
|
||||
struct snd_array spdif_out;
|
||||
unsigned int spdif_in_enable; /* SPDIF input enable? */
|
||||
+ int primary_dig_out_type; /* primary digital out PCM type */
|
||||
const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */
|
||||
struct snd_array init_pins; /* initial (BIOS) pin configurations */
|
||||
struct snd_array driver_pins; /* pin configs set by codec parser */
|
||||
diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h
|
||||
index 09dbdc3..8c43198 100644
|
||||
--- a/sound/pci/hda/hda_local.h
|
||||
+++ b/sound/pci/hda/hda_local.h
|
||||
@@ -240,9 +240,11 @@ int snd_hda_mixer_bind_tlv(struct snd_kcontrol *kcontrol, int op_flag,
|
||||
/*
|
||||
* SPDIF I/O
|
||||
*/
|
||||
-int snd_hda_create_spdif_out_ctls(struct hda_codec *codec,
|
||||
- hda_nid_t associated_nid,
|
||||
- hda_nid_t cvt_nid);
|
||||
+int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
|
||||
+ hda_nid_t associated_nid,
|
||||
+ hda_nid_t cvt_nid, int type);
|
||||
+#define snd_hda_create_spdif_out_ctls(codec, anid, cnid) \
|
||||
+ snd_hda_create_dig_out_ctls(codec, anid, cnid, HDA_PCM_TYPE_SPDIF)
|
||||
int snd_hda_create_spdif_in_ctls(struct hda_codec *codec, hda_nid_t nid);
|
||||
|
||||
/*
|
||||
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c
|
||||
index 61a7113..a7f8790 100644
|
||||
--- a/sound/pci/hda/patch_cirrus.c
|
||||
+++ b/sound/pci/hda/patch_cirrus.c
|
||||
@@ -873,8 +873,9 @@ static int build_digital_output(struct hda_codec *codec)
|
||||
if (!spec->multiout.dig_out_nid)
|
||||
return 0;
|
||||
|
||||
- err = snd_hda_create_spdif_out_ctls(codec, spec->multiout.dig_out_nid,
|
||||
- spec->multiout.dig_out_nid);
|
||||
+ err = snd_hda_create_dig_out_ctls(codec, spec->multiout.dig_out_nid,
|
||||
+ spec->multiout.dig_out_nid,
|
||||
+ spec->pcm_rec[1].pcm_type);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = snd_hda_create_spdif_share_sw(codec, &spec->multiout);
|
||||
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
|
||||
index 71555cc..39ca100 100644
|
||||
--- a/sound/pci/hda/patch_hdmi.c
|
||||
+++ b/sound/pci/hda/patch_hdmi.c
|
||||
@@ -1589,9 +1589,10 @@ static int generic_hdmi_build_controls(struct hda_codec *codec)
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
- err = snd_hda_create_spdif_out_ctls(codec,
|
||||
- per_pin->pin_nid,
|
||||
- per_pin->mux_nids[0]);
|
||||
+ err = snd_hda_create_dig_out_ctls(codec,
|
||||
+ per_pin->pin_nid,
|
||||
+ per_pin->mux_nids[0],
|
||||
+ HDA_PCM_TYPE_HDMI);
|
||||
if (err < 0)
|
||||
return err;
|
||||
snd_hda_spdif_ctls_unassign(codec, pin_idx);
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 8253b4e..2d2bb66 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -1836,9 +1836,10 @@ static int __alc_build_controls(struct hda_codec *codec)
|
||||
return err;
|
||||
}
|
||||
if (spec->multiout.dig_out_nid) {
|
||||
- err = snd_hda_create_spdif_out_ctls(codec,
|
||||
- spec->multiout.dig_out_nid,
|
||||
- spec->multiout.dig_out_nid);
|
||||
+ err = snd_hda_create_dig_out_ctls(codec,
|
||||
+ spec->multiout.dig_out_nid,
|
||||
+ spec->multiout.dig_out_nid,
|
||||
+ spec->pcm_rec[1].pcm_type);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (!spec->no_analog) {
|
||||
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
|
||||
index 770013f..6214165 100644
|
||||
--- a/sound/pci/hda/patch_sigmatel.c
|
||||
+++ b/sound/pci/hda/patch_sigmatel.c
|
||||
@@ -1136,9 +1136,10 @@ static int stac92xx_build_controls(struct hda_codec *codec)
|
||||
}
|
||||
|
||||
if (spec->multiout.dig_out_nid) {
|
||||
- err = snd_hda_create_spdif_out_ctls(codec,
|
||||
- spec->multiout.dig_out_nid,
|
||||
- spec->multiout.dig_out_nid);
|
||||
+ err = snd_hda_create_dig_out_ctls(codec,
|
||||
+ spec->multiout.dig_out_nid,
|
||||
+ spec->multiout.dig_out_nid,
|
||||
+ spec->autocfg.dig_out_type[0]);
|
||||
if (err < 0)
|
||||
return err;
|
||||
err = snd_hda_create_spdif_share_sw(codec,
|
||||
--
|
||||
1.7.7.6
|
||||
|
@ -1,11 +0,0 @@
|
||||
X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux.git;a=blobdiff_plain;f=drivers%2Fmedia%2Fdvb-frontends%2Fds3000.c;h=c84cd98a91504dcf2995a75a1e8d6e5013cf4f2d;hp=5b639087ce45623f7a2f1be7e1b6216c1bc686a8;hb=feadd7d3eca4da531b35b2af3623dd992f2d988d;hpb=6c17c24d384ce69893e191c94b500c97bd263c27
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/ds3000.c b/drivers/media/dvb-frontends/ds3000.c
|
||||
index 5b63908..c84cd98 100644
|
||||
--- a/drivers/media/dvb-frontends/ds3000.c
|
||||
+++ b/drivers/media/dvb-frontends/ds3000.c
|
||||
@@ -1316,3 +1316,4 @@ MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
|
||||
"DS3000/TS2020 hardware");
|
||||
MODULE_AUTHOR("Konstantin Dimitrov");
|
||||
MODULE_LICENSE("GPL");
|
||||
+MODULE_FIRMWARE(DS3000_DEFAULT_FIRMWARE);
|
@ -1,87 +0,0 @@
|
||||
From b41a536cf9806c3478b2fa68d59edafd0787e8aa Mon Sep 17 00:00:00 2001
|
||||
From: =?utf8?q?R=C3=A9mi=20Cardona?= <remi.cardona@smartjog.com>
|
||||
Date: Fri, 28 Sep 2012 08:59:27 -0300
|
||||
Subject: [PATCH] [media] ds3000: remove useless 'locking'
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=utf8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Since b9bf2eafaad9c1ef02fb3db38c74568be601a43a, the function
|
||||
ds3000_firmware_ondemand() is called only once during init. This
|
||||
locking scheme may have been useful when the firmware was loaded at
|
||||
each tune.
|
||||
Furthermore, it looks like this 'lock' was put in to prevent concurrent
|
||||
access (and not recursion as the comments suggest). However, this open-
|
||||
coded mechanism is anything but race-free and should have used a proper
|
||||
mutex.
|
||||
|
||||
Signed-off-by: Rémi Cardona <remi.cardona@smartjog.com>
|
||||
Reviewed-by: Antti Palosaari <crope@iki.fi>
|
||||
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
|
||||
---
|
||||
drivers/media/dvb-frontends/ds3000.c | 14 --------------
|
||||
1 files changed, 0 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb-frontends/ds3000.c b/drivers/media/dvb-frontends/ds3000.c
|
||||
index c84cd98..60a529e 100644
|
||||
--- a/drivers/media/dvb-frontends/ds3000.c
|
||||
+++ b/drivers/media/dvb-frontends/ds3000.c
|
||||
@@ -30,7 +30,6 @@
|
||||
#include "ds3000.h"
|
||||
|
||||
static int debug;
|
||||
-static int force_fw_upload;
|
||||
|
||||
#define dprintk(args...) \
|
||||
do { \
|
||||
@@ -234,7 +233,6 @@ struct ds3000_state {
|
||||
struct i2c_adapter *i2c;
|
||||
const struct ds3000_config *config;
|
||||
struct dvb_frontend frontend;
|
||||
- u8 skip_fw_load;
|
||||
/* previous uncorrected block counter for DVB-S2 */
|
||||
u16 prevUCBS2;
|
||||
};
|
||||
@@ -397,9 +395,6 @@ static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
- if (state->skip_fw_load || !force_fw_upload)
|
||||
- return 0; /* Firmware already uploaded, skipping */
|
||||
-
|
||||
/* Load firmware */
|
||||
/* request the firmware, this will block until someone uploads it */
|
||||
printk(KERN_INFO "%s: Waiting for firmware upload (%s)...\n", __func__,
|
||||
@@ -413,9 +408,6 @@ static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
|
||||
return ret;
|
||||
}
|
||||
|
||||
- /* Make sure we don't recurse back through here during loading */
|
||||
- state->skip_fw_load = 1;
|
||||
-
|
||||
ret = ds3000_load_firmware(fe, fw);
|
||||
if (ret)
|
||||
printk("%s: Writing firmware to device failed\n", __func__);
|
||||
@@ -425,9 +417,6 @@ static int ds3000_firmware_ondemand(struct dvb_frontend *fe)
|
||||
dprintk("%s: Firmware upload %s\n", __func__,
|
||||
ret == 0 ? "complete" : "failed");
|
||||
|
||||
- /* Ensure firmware is always loaded if required */
|
||||
- state->skip_fw_load = 0;
|
||||
-
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1309,9 +1298,6 @@ static struct dvb_frontend_ops ds3000_ops = {
|
||||
module_param(debug, int, 0644);
|
||||
MODULE_PARM_DESC(debug, "Activates frontend debugging (default:0)");
|
||||
|
||||
-module_param(force_fw_upload, int, 0644);
|
||||
-MODULE_PARM_DESC(force_fw_upload, "Force firmware upload (default:0)");
|
||||
-
|
||||
MODULE_DESCRIPTION("DVB Frontend module for Montage Technology "
|
||||
"DS3000/TS2020 hardware");
|
||||
MODULE_AUTHOR("Konstantin Dimitrov");
|
||||
--
|
||||
1.7.6.5
|
||||
|
@ -1,139 +0,0 @@
|
||||
From ea9b43addc4d90ca5b029f47f85ca152320a1e8d Mon Sep 17 00:00:00 2001
|
||||
From: Takashi Iwai <tiwai@suse.de>
|
||||
Date: Tue, 12 Feb 2013 17:02:41 +0100
|
||||
Subject: [PATCH] ALSA: hda - Fix broken workaround for HDMI/SPDIF conflicts
|
||||
|
||||
The commit [dcda58061: ALSA: hda - Add workaround for conflicting
|
||||
IEC958 controls] introduced a workaround for cards that have both
|
||||
SPDIF and HDMI devices for giving device=1 to SPDIF control elements.
|
||||
It turned out, however, that this workaround doesn't work well -
|
||||
|
||||
- The workaround checks only conflicts in a single codec, but SPDIF
|
||||
and HDMI are provided by multiple codecs in many cases, and
|
||||
|
||||
- ALSA mixer abstraction doesn't care about the device number in ctl
|
||||
elements, thus you'll get errors from amixer such as
|
||||
% amixer scontrols -c 0
|
||||
ALSA lib simple_none.c:1551:(simple_add1) helem (MIXER,'IEC958
|
||||
Playback Switch',0,1,0) appears twice or more
|
||||
amixer: Mixer hw:0 load error: Invalid argument
|
||||
|
||||
This patch fixes the previous broken workaround. Instead of changing
|
||||
the device number of SPDIF ctl elements, shift the element indices of
|
||||
such controls up to 16. Also, the conflict check is performed over
|
||||
all codecs found on the bus.
|
||||
|
||||
HDMI devices will be put to dev=0,index=0 as before. Only the
|
||||
conflicting SPDIF device is moved to a different place. The new place
|
||||
of SPDIF device is supposed by the updated alsa-lib HDA-Intel.conf,
|
||||
respectively.
|
||||
|
||||
Reported-by: Stephan Raue <stephan@openelec.tv>
|
||||
Reported-by: Anssi Hannula <anssi.hannula@iki.fi>
|
||||
Cc: <stable@vger.kernel.org> [v3.8]
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/hda_codec.c | 43 +++++++++++++++++++++----------------------
|
||||
sound/pci/hda/hda_codec.h | 3 ++-
|
||||
2 files changed, 23 insertions(+), 23 deletions(-)
|
||||
|
||||
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
|
||||
index e80f835..04b5738 100644
|
||||
--- a/sound/pci/hda/hda_codec.c
|
||||
+++ b/sound/pci/hda/hda_codec.c
|
||||
@@ -2332,11 +2332,12 @@ struct snd_kcontrol *snd_hda_find_mixer_ctl(struct hda_codec *codec,
|
||||
EXPORT_SYMBOL_HDA(snd_hda_find_mixer_ctl);
|
||||
|
||||
static int find_empty_mixer_ctl_idx(struct hda_codec *codec, const char *name,
|
||||
- int dev)
|
||||
+ int start_idx)
|
||||
{
|
||||
- int idx;
|
||||
- for (idx = 0; idx < 16; idx++) { /* 16 ctlrs should be large enough */
|
||||
- if (!find_mixer_ctl(codec, name, dev, idx))
|
||||
+ int i, idx;
|
||||
+ /* 16 ctlrs should be large enough */
|
||||
+ for (i = 0, idx = start_idx; i < 16; i++, idx++) {
|
||||
+ if (!find_mixer_ctl(codec, name, 0, idx))
|
||||
return idx;
|
||||
}
|
||||
return -EBUSY;
|
||||
@@ -3305,30 +3306,29 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
|
||||
int err;
|
||||
struct snd_kcontrol *kctl;
|
||||
struct snd_kcontrol_new *dig_mix;
|
||||
- int idx, dev = 0;
|
||||
- const int spdif_pcm_dev = 1;
|
||||
+ int idx = 0;
|
||||
+ const int spdif_index = 16;
|
||||
struct hda_spdif_out *spdif;
|
||||
+ struct hda_bus *bus = codec->bus;
|
||||
|
||||
- if (codec->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
|
||||
+ if (bus->primary_dig_out_type == HDA_PCM_TYPE_HDMI &&
|
||||
type == HDA_PCM_TYPE_SPDIF) {
|
||||
- dev = spdif_pcm_dev;
|
||||
- } else if (codec->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
|
||||
+ idx = spdif_index;
|
||||
+ } else if (bus->primary_dig_out_type == HDA_PCM_TYPE_SPDIF &&
|
||||
type == HDA_PCM_TYPE_HDMI) {
|
||||
- for (idx = 0; idx < codec->spdif_out.used; idx++) {
|
||||
- spdif = snd_array_elem(&codec->spdif_out, idx);
|
||||
- for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
|
||||
- kctl = find_mixer_ctl(codec, dig_mix->name, 0, idx);
|
||||
- if (!kctl)
|
||||
- break;
|
||||
- kctl->id.device = spdif_pcm_dev;
|
||||
- }
|
||||
+ /* suppose a single SPDIF device */
|
||||
+ for (dig_mix = dig_mixes; dig_mix->name; dig_mix++) {
|
||||
+ kctl = find_mixer_ctl(codec, dig_mix->name, 0, 0);
|
||||
+ if (!kctl)
|
||||
+ break;
|
||||
+ kctl->id.index = spdif_index;
|
||||
}
|
||||
- codec->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
|
||||
+ bus->primary_dig_out_type = HDA_PCM_TYPE_HDMI;
|
||||
}
|
||||
- if (!codec->primary_dig_out_type)
|
||||
- codec->primary_dig_out_type = type;
|
||||
+ if (!bus->primary_dig_out_type)
|
||||
+ bus->primary_dig_out_type = type;
|
||||
|
||||
- idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", dev);
|
||||
+ idx = find_empty_mixer_ctl_idx(codec, "IEC958 Playback Switch", idx);
|
||||
if (idx < 0) {
|
||||
printk(KERN_ERR "hda_codec: too many IEC958 outputs\n");
|
||||
return -EBUSY;
|
||||
@@ -3338,7 +3338,6 @@ int snd_hda_create_dig_out_ctls(struct hda_codec *codec,
|
||||
kctl = snd_ctl_new1(dig_mix, codec);
|
||||
if (!kctl)
|
||||
return -ENOMEM;
|
||||
- kctl->id.device = dev;
|
||||
kctl->id.index = idx;
|
||||
kctl->private_value = codec->spdif_out.used - 1;
|
||||
err = snd_hda_ctl_add(codec, associated_nid, kctl);
|
||||
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h
|
||||
index e8c9442..23ca172 100644
|
||||
--- a/sound/pci/hda/hda_codec.h
|
||||
+++ b/sound/pci/hda/hda_codec.h
|
||||
@@ -679,6 +679,8 @@ struct hda_bus {
|
||||
unsigned int response_reset:1; /* controller was reset */
|
||||
unsigned int in_reset:1; /* during reset operation */
|
||||
unsigned int power_keep_link_on:1; /* don't power off HDA link */
|
||||
+
|
||||
+ int primary_dig_out_type; /* primary digital out PCM type */
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -846,7 +848,6 @@ struct hda_codec {
|
||||
struct mutex hash_mutex;
|
||||
struct snd_array spdif_out;
|
||||
unsigned int spdif_in_enable; /* SPDIF input enable? */
|
||||
- int primary_dig_out_type; /* primary digital out PCM type */
|
||||
const hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */
|
||||
struct snd_array init_pins; /* initial (BIOS) pin configurations */
|
||||
struct snd_array driver_pins; /* pin configs set by codec parser */
|
||||
--
|
||||
1.7.10
|
||||
|
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user