lkml.org 
[lkml]   [2008]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[GIT PULL] ALSA fixes
    Linus,

    please pull ALSA updates for 2.6.28-rc1 from:

    git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git for-linus

    containing the following fixes.


    Thanks!

    Takashi

    ==

    Alan Cox (1):
    sound: use a common working email address

    Arjan van de Ven (1):
    pci: use pci_ioremap_bar() in sound/

    Cliff Cai (1):
    ALSA: ASoC: Blackfin: update SPORT0 port selector (v2)

    Takashi Iwai (1):
    ALSA: hda - Restore default pin configs for realtek codecs

    ---
    sound/oss/kahlua.c | 2 +-
    sound/pci/ad1889.c | 2 +-
    sound/pci/atiixp.c | 2 +-
    sound/pci/atiixp_modem.c | 2 +-
    sound/pci/au88x0/au88x0.c | 3 +-
    sound/pci/bt87x.c | 3 +-
    sound/pci/cs4281.c | 4 +-
    sound/pci/cs5530.c | 4 +-
    sound/pci/hda/hda_intel.c | 2 +-
    sound/pci/hda/patch_realtek.c | 77 ++++++++++++++++++++++++++++++++++++++++
    sound/pci/mixart/mixart.c | 3 +-
    sound/soc/blackfin/bf5xx-i2s.c | 34 +++++++++++------
    sound/sound_core.c | 2 +-
    13 files changed, 112 insertions(+), 28 deletions(-)

    diff --git a/sound/oss/kahlua.c b/sound/oss/kahlua.c
    index eb9bc36..c180598 100644
    --- a/sound/oss/kahlua.c
    +++ b/sound/oss/kahlua.c
    @@ -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
    diff --git a/sound/pci/ad1889.c b/sound/pci/ad1889.c
    index 92f3a97..a7f38e6 100644
    --- a/sound/pci/ad1889.c
    +++ b/sound/pci/ad1889.c
    @@ -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;
    diff --git a/sound/pci/atiixp.c b/sound/pci/atiixp.c
    index 085a52b..226fe82 100644
    --- a/sound/pci/atiixp.c
    +++ b/sound/pci/atiixp.c
    @@ -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);
    diff --git a/sound/pci/atiixp_modem.c b/sound/pci/atiixp_modem.c
    index 2f10630..0e6e5cc 100644
    --- a/sound/pci/atiixp_modem.c
    +++ b/sound/pci/atiixp_modem.c
    @@ -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);
    diff --git a/sound/pci/au88x0/au88x0.c b/sound/pci/au88x0/au88x0.c
    index 68368e4..a36d4d1 100644
    --- a/sound/pci/au88x0/au88x0.c
    +++ b/sound/pci/au88x0/au88x0.c
    @@ -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;
    diff --git a/sound/pci/bt87x.c b/sound/pci/bt87x.c
    index 3aa8d97..1aa1c04 100644
    --- a/sound/pci/bt87x.c
    +++ b/sound/pci/bt87x.c
    @@ -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;
    diff --git a/sound/pci/cs4281.c b/sound/pci/cs4281.c
    index ef9308f..192e784 100644
    --- a/sound/pci/cs4281.c
    +++ b/sound/pci/cs4281.c
    @@ -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;
    diff --git a/sound/pci/cs5530.c b/sound/pci/cs5530.c
    index 7ff8b68..6dea5b5 100644
    --- a/sound/pci/cs5530.c
    +++ b/sound/pci/cs5530.c
    @@ -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);
    diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
    index 9f316c1..f080f8c 100644
    --- a/sound/pci/hda/hda_intel.c
    +++ b/sound/pci/hda/hda_intel.c
    @@ -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;
    diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
    index ef4955c..4eceab9 100644
    --- a/sound/pci/hda/patch_realtek.c
    +++ b/sound/pci/hda/patch_realtek.c
    @@ -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;
    }

    diff --git a/sound/pci/mixart/mixart.c b/sound/pci/mixart/mixart.c
    index 2d0dce6..ae7601f 100644
    --- a/sound/pci/mixart/mixart.c
    +++ b/sound/pci/mixart/mixart.c
    @@ -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);
    diff --git a/sound/soc/blackfin/bf5xx-i2s.c b/sound/soc/blackfin/bf5xx-i2s.c
    index 827587f..e020c16 100644
    --- a/sound/soc/blackfin/bf5xx-i2s.c
    +++ b/sound/soc/blackfin/bf5xx-i2s.c
    @@ -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;
    }
    diff --git a/sound/sound_core.c b/sound/sound_core.c
    index faef87a..a75b289 100644
    --- a/sound/sound_core.c
    +++ b/sound/sound_core.c
    @@ -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:
    *

    \
     
     \ /
      Last update: 2008-10-27 17:25    [W:2.867 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site