mirror of https://gitee.com/openkylin/linux.git
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6: ALSA: ASoC: Blackfin: update SPORT0 port selector (v2) ALSA: hda - Restore default pin configs for realtek codecs sound: use a common working email address pci: use pci_ioremap_bar() in sound/
This commit is contained in:
commit
31390d0fde
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* Initialisation code for Cyrix/NatSemi VSA1 softaudio
|
||||
*
|
||||
* (C) Copyright 2003 Red Hat Inc <alan@redhat.com>
|
||||
* (C) Copyright 2003 Red Hat Inc <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* XpressAudio(tm) is used on the Cyrix MediaGX (now NatSemi Geode) systems.
|
||||
* The older version (VSA1) provides fairly good soundblaster emulation
|
||||
|
|
|
@ -932,7 +932,7 @@ snd_ad1889_create(struct snd_card *card,
|
|||
goto free_and_ret;
|
||||
|
||||
chip->bar = pci_resource_start(pci, 0);
|
||||
chip->iobase = ioremap_nocache(chip->bar, pci_resource_len(pci, 0));
|
||||
chip->iobase = pci_ioremap_bar(pci, 0);
|
||||
if (chip->iobase == NULL) {
|
||||
printk(KERN_ERR PFX "unable to reserve region.\n");
|
||||
err = -EBUSY;
|
||||
|
|
|
@ -1609,7 +1609,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card,
|
|||
return err;
|
||||
}
|
||||
chip->addr = pci_resource_start(pci, 0);
|
||||
chip->remap_addr = ioremap_nocache(chip->addr, pci_resource_len(pci, 0));
|
||||
chip->remap_addr = pci_ioremap_bar(pci, 0);
|
||||
if (chip->remap_addr == NULL) {
|
||||
snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
|
||||
snd_atiixp_free(chip);
|
||||
|
|
|
@ -1252,7 +1252,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card,
|
|||
return err;
|
||||
}
|
||||
chip->addr = pci_resource_start(pci, 0);
|
||||
chip->remap_addr = ioremap_nocache(chip->addr, pci_resource_len(pci, 0));
|
||||
chip->remap_addr = pci_ioremap_bar(pci, 0);
|
||||
if (chip->remap_addr == NULL) {
|
||||
snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
|
||||
snd_atiixp_free(chip);
|
||||
|
|
|
@ -180,8 +180,7 @@ snd_vortex_create(struct snd_card *card, struct pci_dev *pci, vortex_t ** rchip)
|
|||
if ((err = pci_request_regions(pci, CARD_NAME_SHORT)) != 0)
|
||||
goto regions_out;
|
||||
|
||||
chip->mmio = ioremap_nocache(pci_resource_start(pci, 0),
|
||||
pci_resource_len(pci, 0));
|
||||
chip->mmio = pci_ioremap_bar(pci, 0);
|
||||
if (!chip->mmio) {
|
||||
printk(KERN_ERR "MMIO area remap failed.\n");
|
||||
err = -ENOMEM;
|
||||
|
|
|
@ -749,8 +749,7 @@ static int __devinit snd_bt87x_create(struct snd_card *card,
|
|||
pci_disable_device(pci);
|
||||
return err;
|
||||
}
|
||||
chip->mmio = ioremap_nocache(pci_resource_start(pci, 0),
|
||||
pci_resource_len(pci, 0));
|
||||
chip->mmio = pci_ioremap_bar(pci, 0);
|
||||
if (!chip->mmio) {
|
||||
snd_printk(KERN_ERR "cannot remap io memory\n");
|
||||
err = -ENOMEM;
|
||||
|
|
|
@ -1382,8 +1382,8 @@ static int __devinit snd_cs4281_create(struct snd_card *card,
|
|||
chip->ba0_addr = pci_resource_start(pci, 0);
|
||||
chip->ba1_addr = pci_resource_start(pci, 1);
|
||||
|
||||
chip->ba0 = ioremap_nocache(chip->ba0_addr, pci_resource_len(pci, 0));
|
||||
chip->ba1 = ioremap_nocache(chip->ba1_addr, pci_resource_len(pci, 1));
|
||||
chip->ba0 = pci_ioremap_bar(pci, 0);
|
||||
chip->ba1 = pci_ioremap_bar(pci, 1);
|
||||
if (!chip->ba0 || !chip->ba1) {
|
||||
snd_cs4281_free(chip);
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* cs5530.c - Initialisation code for Cyrix/NatSemi VSA1 softaudio
|
||||
*
|
||||
* (C) Copyright 2007 Ash Willis <ashwillis@programmer.net>
|
||||
* (C) Copyright 2003 Red Hat Inc <alan@redhat.com>
|
||||
* (C) Copyright 2003 Red Hat Inc <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* This driver was ported (shamelessly ripped ;) from oss/kahlua.c but I did
|
||||
* mess with it a bit. The chip seems to have to have trouble with full duplex
|
||||
|
@ -132,7 +132,7 @@ static int __devinit snd_cs5530_create(struct snd_card *card,
|
|||
}
|
||||
chip->pci_base = pci_resource_start(pci, 0);
|
||||
|
||||
mem = ioremap_nocache(chip->pci_base, pci_resource_len(pci, 0));
|
||||
mem = pci_ioremap_bar(pci, 0);
|
||||
if (mem == NULL) {
|
||||
kfree(chip);
|
||||
pci_disable_device(pci);
|
||||
|
|
|
@ -2158,7 +2158,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
|
|||
}
|
||||
|
||||
chip->addr = pci_resource_start(pci, 0);
|
||||
chip->remap_addr = ioremap_nocache(chip->addr, pci_resource_len(pci,0));
|
||||
chip->remap_addr = pci_ioremap_bar(pci, 0);
|
||||
if (chip->remap_addr == NULL) {
|
||||
snd_printk(KERN_ERR SFX "ioremap error\n");
|
||||
err = -ENXIO;
|
||||
|
|
|
@ -307,6 +307,13 @@ struct alc_spec {
|
|||
/* for PLL fix */
|
||||
hda_nid_t pll_nid;
|
||||
unsigned int pll_coef_idx, pll_coef_bit;
|
||||
|
||||
#ifdef SND_HDA_NEEDS_RESUME
|
||||
#define ALC_MAX_PINS 16
|
||||
unsigned int num_pins;
|
||||
hda_nid_t pin_nids[ALC_MAX_PINS];
|
||||
unsigned int pin_cfgs[ALC_MAX_PINS];
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -2778,6 +2785,64 @@ static void alc_free(struct hda_codec *codec)
|
|||
codec->spec = NULL; /* to be sure */
|
||||
}
|
||||
|
||||
#ifdef SND_HDA_NEEDS_RESUME
|
||||
static void store_pin_configs(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
hda_nid_t nid, end_nid;
|
||||
|
||||
end_nid = codec->start_nid + codec->num_nodes;
|
||||
for (nid = codec->start_nid; nid < end_nid; nid++) {
|
||||
unsigned int wid_caps = get_wcaps(codec, nid);
|
||||
unsigned int wid_type =
|
||||
(wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT;
|
||||
if (wid_type != AC_WID_PIN)
|
||||
continue;
|
||||
if (spec->num_pins >= ARRAY_SIZE(spec->pin_nids))
|
||||
break;
|
||||
spec->pin_nids[spec->num_pins] = nid;
|
||||
spec->pin_cfgs[spec->num_pins] =
|
||||
snd_hda_codec_read(codec, nid, 0,
|
||||
AC_VERB_GET_CONFIG_DEFAULT, 0);
|
||||
spec->num_pins++;
|
||||
}
|
||||
}
|
||||
|
||||
static void resume_pin_configs(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < spec->num_pins; i++) {
|
||||
hda_nid_t pin_nid = spec->pin_nids[i];
|
||||
unsigned int pin_config = spec->pin_cfgs[i];
|
||||
snd_hda_codec_write(codec, pin_nid, 0,
|
||||
AC_VERB_SET_CONFIG_DEFAULT_BYTES_0,
|
||||
pin_config & 0x000000ff);
|
||||
snd_hda_codec_write(codec, pin_nid, 0,
|
||||
AC_VERB_SET_CONFIG_DEFAULT_BYTES_1,
|
||||
(pin_config & 0x0000ff00) >> 8);
|
||||
snd_hda_codec_write(codec, pin_nid, 0,
|
||||
AC_VERB_SET_CONFIG_DEFAULT_BYTES_2,
|
||||
(pin_config & 0x00ff0000) >> 16);
|
||||
snd_hda_codec_write(codec, pin_nid, 0,
|
||||
AC_VERB_SET_CONFIG_DEFAULT_BYTES_3,
|
||||
pin_config >> 24);
|
||||
}
|
||||
}
|
||||
|
||||
static int alc_resume(struct hda_codec *codec)
|
||||
{
|
||||
resume_pin_configs(codec);
|
||||
codec->patch_ops.init(codec);
|
||||
snd_hda_codec_resume_amp(codec);
|
||||
snd_hda_codec_resume_cache(codec);
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define store_pin_configs(codec)
|
||||
#endif
|
||||
|
||||
/*
|
||||
*/
|
||||
static struct hda_codec_ops alc_patch_ops = {
|
||||
|
@ -2786,6 +2851,9 @@ static struct hda_codec_ops alc_patch_ops = {
|
|||
.init = alc_init,
|
||||
.free = alc_free,
|
||||
.unsol_event = alc_unsol_event,
|
||||
#ifdef SND_HDA_NEEDS_RESUME
|
||||
.resume = alc_resume,
|
||||
#endif
|
||||
#ifdef CONFIG_SND_HDA_POWER_SAVE
|
||||
.check_power_status = alc_check_power_status,
|
||||
#endif
|
||||
|
@ -3832,6 +3900,7 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
|
|||
spec->num_mux_defs = 1;
|
||||
spec->input_mux = &spec->private_imux;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -5250,6 +5319,7 @@ static int alc260_parse_auto_config(struct hda_codec *codec)
|
|||
}
|
||||
spec->num_mixers++;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -10313,6 +10383,7 @@ static int alc262_parse_auto_config(struct hda_codec *codec)
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -11447,6 +11518,7 @@ static int alc268_parse_auto_config(struct hda_codec *codec)
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -12230,6 +12302,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
|
|||
spec->mixers[spec->num_mixers] = alc269_capture_mixer;
|
||||
spec->num_mixers++;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -13316,6 +13389,7 @@ static int alc861_parse_auto_config(struct hda_codec *codec)
|
|||
spec->mixers[spec->num_mixers] = alc861_capture_mixer;
|
||||
spec->num_mixers++;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -14427,6 +14501,7 @@ static int alc861vd_parse_auto_config(struct hda_codec *codec)
|
|||
if (err < 0)
|
||||
return err;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -16258,6 +16333,8 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
|
|||
|
||||
spec->mixers[spec->num_mixers] = alc662_capture_mixer;
|
||||
spec->num_mixers++;
|
||||
|
||||
store_pin_configs(codec);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
@ -1314,8 +1314,7 @@ static int __devinit snd_mixart_probe(struct pci_dev *pci,
|
|||
}
|
||||
for (i = 0; i < 2; i++) {
|
||||
mgr->mem[i].phys = pci_resource_start(pci, i);
|
||||
mgr->mem[i].virt = ioremap_nocache(mgr->mem[i].phys,
|
||||
pci_resource_len(pci, i));
|
||||
mgr->mem[i].virt = pci_ioremap_bar(pci, i);
|
||||
if (!mgr->mem[i].virt) {
|
||||
printk(KERN_ERR "unable to remap resource 0x%lx\n",
|
||||
mgr->mem[i].phys);
|
||||
|
|
|
@ -70,12 +70,24 @@ static struct sport_param sport_params[2] = {
|
|||
}
|
||||
};
|
||||
|
||||
static u16 sport_req[][7] = {
|
||||
{ P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_RFS,
|
||||
P_SPORT0_DRPRI, P_SPORT0_RSCLK, 0},
|
||||
{ P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS,
|
||||
P_SPORT1_DRPRI, P_SPORT1_RSCLK, 0},
|
||||
};
|
||||
/*
|
||||
* Setting the TFS pin selector for SPORT 0 based on whether the selected
|
||||
* port id F or G. If the port is F then no conflict should exist for the
|
||||
* TFS. When Port G is selected and EMAC then there is a conflict between
|
||||
* the PHY interrupt line and TFS. Current settings prevent the conflict
|
||||
* by ignoring the TFS pin when Port G is selected. This allows both
|
||||
* ssm2602 using Port G and EMAC concurrently.
|
||||
*/
|
||||
#ifdef CONFIG_BF527_SPORT0_PORTF
|
||||
#define LOCAL_SPORT0_TFS (P_SPORT0_TFS)
|
||||
#else
|
||||
#define LOCAL_SPORT0_TFS (0)
|
||||
#endif
|
||||
|
||||
static u16 sport_req[][7] = { {P_SPORT0_DTPRI, P_SPORT0_TSCLK, P_SPORT0_RFS,
|
||||
P_SPORT0_DRPRI, P_SPORT0_RSCLK, LOCAL_SPORT0_TFS, 0},
|
||||
{P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS, P_SPORT1_DRPRI,
|
||||
P_SPORT1_RSCLK, P_SPORT1_TFS, 0} };
|
||||
|
||||
static int bf5xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
unsigned int fmt)
|
||||
|
@ -98,23 +110,21 @@ static int bf5xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
|||
ret = -EINVAL;
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "%s: Unknown DAI format type\n", __func__);
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
|
||||
case SND_SOC_DAIFMT_CBS_CFS:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_CBM_CFS:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
case SND_SOC_DAIFMT_CBM_CFM:
|
||||
break;
|
||||
case SND_SOC_DAIFMT_CBS_CFS:
|
||||
case SND_SOC_DAIFMT_CBM_CFS:
|
||||
case SND_SOC_DAIFMT_CBS_CFM:
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "%s: Unknown DAI master type\n", __func__);
|
||||
ret = -EINVAL;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ module_exit(cleanup_soundcore);
|
|||
/*
|
||||
* OSS sound core handling. Breaks out sound functions to submodules
|
||||
*
|
||||
* Author: Alan Cox <alan.cox@linux.org>
|
||||
* Author: Alan Cox <alan@lxorguk.ukuu.org.uk>
|
||||
*
|
||||
* Fixes:
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue