Commit 31390d0f authored by Linus Torvalds's avatar Linus Torvalds

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/
parents 6634160a 0a9b8638
/* /*
* Initialisation code for Cyrix/NatSemi VSA1 softaudio * 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. * XpressAudio(tm) is used on the Cyrix MediaGX (now NatSemi Geode) systems.
* The older version (VSA1) provides fairly good soundblaster emulation * The older version (VSA1) provides fairly good soundblaster emulation
......
...@@ -932,7 +932,7 @@ snd_ad1889_create(struct snd_card *card, ...@@ -932,7 +932,7 @@ snd_ad1889_create(struct snd_card *card,
goto free_and_ret; goto free_and_ret;
chip->bar = pci_resource_start(pci, 0); 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) { if (chip->iobase == NULL) {
printk(KERN_ERR PFX "unable to reserve region.\n"); printk(KERN_ERR PFX "unable to reserve region.\n");
err = -EBUSY; err = -EBUSY;
......
...@@ -1609,7 +1609,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card, ...@@ -1609,7 +1609,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card,
return err; return err;
} }
chip->addr = pci_resource_start(pci, 0); 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) { if (chip->remap_addr == NULL) {
snd_printk(KERN_ERR "AC'97 space ioremap problem\n"); snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
snd_atiixp_free(chip); snd_atiixp_free(chip);
......
...@@ -1252,7 +1252,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card, ...@@ -1252,7 +1252,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card,
return err; return err;
} }
chip->addr = pci_resource_start(pci, 0); 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) { if (chip->remap_addr == NULL) {
snd_printk(KERN_ERR "AC'97 space ioremap problem\n"); snd_printk(KERN_ERR "AC'97 space ioremap problem\n");
snd_atiixp_free(chip); snd_atiixp_free(chip);
......
...@@ -180,8 +180,7 @@ snd_vortex_create(struct snd_card *card, struct pci_dev *pci, vortex_t ** rchip) ...@@ -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) if ((err = pci_request_regions(pci, CARD_NAME_SHORT)) != 0)
goto regions_out; goto regions_out;
chip->mmio = ioremap_nocache(pci_resource_start(pci, 0), chip->mmio = pci_ioremap_bar(pci, 0);
pci_resource_len(pci, 0));
if (!chip->mmio) { if (!chip->mmio) {
printk(KERN_ERR "MMIO area remap failed.\n"); printk(KERN_ERR "MMIO area remap failed.\n");
err = -ENOMEM; err = -ENOMEM;
......
...@@ -749,8 +749,7 @@ static int __devinit snd_bt87x_create(struct snd_card *card, ...@@ -749,8 +749,7 @@ static int __devinit snd_bt87x_create(struct snd_card *card,
pci_disable_device(pci); pci_disable_device(pci);
return err; return err;
} }
chip->mmio = ioremap_nocache(pci_resource_start(pci, 0), chip->mmio = pci_ioremap_bar(pci, 0);
pci_resource_len(pci, 0));
if (!chip->mmio) { if (!chip->mmio) {
snd_printk(KERN_ERR "cannot remap io memory\n"); snd_printk(KERN_ERR "cannot remap io memory\n");
err = -ENOMEM; err = -ENOMEM;
......
...@@ -1382,8 +1382,8 @@ static int __devinit snd_cs4281_create(struct snd_card *card, ...@@ -1382,8 +1382,8 @@ static int __devinit snd_cs4281_create(struct snd_card *card,
chip->ba0_addr = pci_resource_start(pci, 0); chip->ba0_addr = pci_resource_start(pci, 0);
chip->ba1_addr = pci_resource_start(pci, 1); chip->ba1_addr = pci_resource_start(pci, 1);
chip->ba0 = ioremap_nocache(chip->ba0_addr, pci_resource_len(pci, 0)); chip->ba0 = pci_ioremap_bar(pci, 0);
chip->ba1 = ioremap_nocache(chip->ba1_addr, pci_resource_len(pci, 1)); chip->ba1 = pci_ioremap_bar(pci, 1);
if (!chip->ba0 || !chip->ba1) { if (!chip->ba0 || !chip->ba1) {
snd_cs4281_free(chip); snd_cs4281_free(chip);
return -ENOMEM; return -ENOMEM;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* cs5530.c - Initialisation code for Cyrix/NatSemi VSA1 softaudio * cs5530.c - Initialisation code for Cyrix/NatSemi VSA1 softaudio
* *
* (C) Copyright 2007 Ash Willis <ashwillis@programmer.net> * (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 * 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 * 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, ...@@ -132,7 +132,7 @@ static int __devinit snd_cs5530_create(struct snd_card *card,
} }
chip->pci_base = pci_resource_start(pci, 0); 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) { if (mem == NULL) {
kfree(chip); kfree(chip);
pci_disable_device(pci); pci_disable_device(pci);
......
...@@ -2158,7 +2158,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *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->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) { if (chip->remap_addr == NULL) {
snd_printk(KERN_ERR SFX "ioremap error\n"); snd_printk(KERN_ERR SFX "ioremap error\n");
err = -ENXIO; err = -ENXIO;
......
...@@ -307,6 +307,13 @@ struct alc_spec { ...@@ -307,6 +307,13 @@ struct alc_spec {
/* for PLL fix */ /* for PLL fix */
hda_nid_t pll_nid; hda_nid_t pll_nid;
unsigned int pll_coef_idx, pll_coef_bit; 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) ...@@ -2778,6 +2785,64 @@ static void alc_free(struct hda_codec *codec)
codec->spec = NULL; /* to be sure */ 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 = { static struct hda_codec_ops alc_patch_ops = {
...@@ -2786,6 +2851,9 @@ static struct hda_codec_ops alc_patch_ops = { ...@@ -2786,6 +2851,9 @@ static struct hda_codec_ops alc_patch_ops = {
.init = alc_init, .init = alc_init,
.free = alc_free, .free = alc_free,
.unsol_event = alc_unsol_event, .unsol_event = alc_unsol_event,
#ifdef SND_HDA_NEEDS_RESUME
.resume = alc_resume,
#endif
#ifdef CONFIG_SND_HDA_POWER_SAVE #ifdef CONFIG_SND_HDA_POWER_SAVE
.check_power_status = alc_check_power_status, .check_power_status = alc_check_power_status,
#endif #endif
...@@ -3832,6 +3900,7 @@ static int alc880_parse_auto_config(struct hda_codec *codec) ...@@ -3832,6 +3900,7 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
spec->num_mux_defs = 1; spec->num_mux_defs = 1;
spec->input_mux = &spec->private_imux; spec->input_mux = &spec->private_imux;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -5250,6 +5319,7 @@ static int alc260_parse_auto_config(struct hda_codec *codec) ...@@ -5250,6 +5319,7 @@ static int alc260_parse_auto_config(struct hda_codec *codec)
} }
spec->num_mixers++; spec->num_mixers++;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -10313,6 +10383,7 @@ static int alc262_parse_auto_config(struct hda_codec *codec) ...@@ -10313,6 +10383,7 @@ static int alc262_parse_auto_config(struct hda_codec *codec)
if (err < 0) if (err < 0)
return err; return err;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -11447,6 +11518,7 @@ static int alc268_parse_auto_config(struct hda_codec *codec) ...@@ -11447,6 +11518,7 @@ static int alc268_parse_auto_config(struct hda_codec *codec)
if (err < 0) if (err < 0)
return err; return err;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -12230,6 +12302,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec) ...@@ -12230,6 +12302,7 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
spec->mixers[spec->num_mixers] = alc269_capture_mixer; spec->mixers[spec->num_mixers] = alc269_capture_mixer;
spec->num_mixers++; spec->num_mixers++;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -13316,6 +13389,7 @@ static int alc861_parse_auto_config(struct hda_codec *codec) ...@@ -13316,6 +13389,7 @@ static int alc861_parse_auto_config(struct hda_codec *codec)
spec->mixers[spec->num_mixers] = alc861_capture_mixer; spec->mixers[spec->num_mixers] = alc861_capture_mixer;
spec->num_mixers++; spec->num_mixers++;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -14427,6 +14501,7 @@ static int alc861vd_parse_auto_config(struct hda_codec *codec) ...@@ -14427,6 +14501,7 @@ static int alc861vd_parse_auto_config(struct hda_codec *codec)
if (err < 0) if (err < 0)
return err; return err;
store_pin_configs(codec);
return 1; return 1;
} }
...@@ -16258,6 +16333,8 @@ static int alc662_parse_auto_config(struct hda_codec *codec) ...@@ -16258,6 +16333,8 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
spec->mixers[spec->num_mixers] = alc662_capture_mixer; spec->mixers[spec->num_mixers] = alc662_capture_mixer;
spec->num_mixers++; spec->num_mixers++;
store_pin_configs(codec);
return 1; return 1;
} }
......
...@@ -1314,8 +1314,7 @@ static int __devinit snd_mixart_probe(struct pci_dev *pci, ...@@ -1314,8 +1314,7 @@ static int __devinit snd_mixart_probe(struct pci_dev *pci,
} }
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
mgr->mem[i].phys = pci_resource_start(pci, i); mgr->mem[i].phys = pci_resource_start(pci, i);
mgr->mem[i].virt = ioremap_nocache(mgr->mem[i].phys, mgr->mem[i].virt = pci_ioremap_bar(pci, i);
pci_resource_len(pci, i));
if (!mgr->mem[i].virt) { if (!mgr->mem[i].virt) {
printk(KERN_ERR "unable to remap resource 0x%lx\n", printk(KERN_ERR "unable to remap resource 0x%lx\n",
mgr->mem[i].phys); mgr->mem[i].phys);
......
...@@ -70,12 +70,24 @@ static struct sport_param sport_params[2] = { ...@@ -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, * Setting the TFS pin selector for SPORT 0 based on whether the selected
P_SPORT0_DRPRI, P_SPORT0_RSCLK, 0}, * port id F or G. If the port is F then no conflict should exist for the
{ P_SPORT1_DTPRI, P_SPORT1_TSCLK, P_SPORT1_RFS, * TFS. When Port G is selected and EMAC then there is a conflict between
P_SPORT1_DRPRI, P_SPORT1_RSCLK, 0}, * 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, static int bf5xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
unsigned int fmt) unsigned int fmt)
...@@ -98,23 +110,21 @@ static int bf5xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai, ...@@ -98,23 +110,21 @@ static int bf5xx_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
ret = -EINVAL; ret = -EINVAL;
break; break;
default: default:
printk(KERN_ERR "%s: Unknown DAI format type\n", __func__);
ret = -EINVAL; ret = -EINVAL;
break; break;
} }
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { 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: case SND_SOC_DAIFMT_CBM_CFM:
break; break;
case SND_SOC_DAIFMT_CBS_CFS:
case SND_SOC_DAIFMT_CBM_CFS:
case SND_SOC_DAIFMT_CBS_CFM: case SND_SOC_DAIFMT_CBS_CFM:
ret = -EINVAL; ret = -EINVAL;
break; break;
default: default:
printk(KERN_ERR "%s: Unknown DAI master type\n", __func__);
ret = -EINVAL; ret = -EINVAL;
break; break;
} }
......
...@@ -57,7 +57,7 @@ module_exit(cleanup_soundcore); ...@@ -57,7 +57,7 @@ module_exit(cleanup_soundcore);
/* /*
* OSS sound core handling. Breaks out sound functions to submodules * 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: * Fixes:
* *
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment