mirror of
https://github.com/joel16/android_kernel_sony_msm8994_rework.git
synced 2024-12-28 23:35:17 +00:00
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
|
* 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,
|
|||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
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 @@
|
|||||||
* 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,
|
|||||||
}
|
}
|
||||||
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,
|
|||||||
}
|
}
|
||||||
|
|
||||||
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 {
|
|||||||
/* 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)
|
|||||||
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 = {
|
|||||||
.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)
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
|||||||
|
|
||||||
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,
|
|||||||
}
|
}
|
||||||
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] = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
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,
|
|||||||
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);
|
|||||||
/*
|
/*
|
||||||
* 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:
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user