Commit b0b3d37e authored by Takashi Iwai's avatar Takashi Iwai Committed by Greg Kroah-Hartman

ALSA: hda - Raise AZX_DCAPS_RIRB_DELAY handling into top drivers

commit 7d9a1808 upstream.

AZX_DCAPS_RIRB_DELAY is dedicated only for Nvidia and its purpose is
just to set a flag in bus.  So it's better to be set in the toplevel
driver, either hda_intel.c or hda_tegra.c, instead of the common
hda_controller.c.  This also allows us to strip this flag from dcaps,
so save one more bit there.
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent aa72457d
...@@ -1055,11 +1055,6 @@ int azx_bus_init(struct azx *chip, const char *model, ...@@ -1055,11 +1055,6 @@ int azx_bus_init(struct azx *chip, const char *model,
if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR) if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)
bus->core.corbrp_self_clear = true; bus->core.corbrp_self_clear = true;
if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
bus->needs_damn_long_delay = 1;
}
if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY)
bus->core.align_bdle_4k = true; bus->core.align_bdle_4k = true;
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
#define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */ #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
#define AZX_DCAPS_SNOOP_MASK (3 << 10) /* snoop type mask */ #define AZX_DCAPS_SNOOP_MASK (3 << 10) /* snoop type mask */
#define AZX_DCAPS_SNOOP_OFF (1 << 12) /* snoop default off */ #define AZX_DCAPS_SNOOP_OFF (1 << 12) /* snoop default off */
#define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */ /* 13 unused */
/* 14 unused */ /* 14 unused */
#define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */ #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
#define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */ #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
......
...@@ -334,7 +334,7 @@ enum { ...@@ -334,7 +334,7 @@ enum {
/* quirks for Nvidia */ /* quirks for Nvidia */
#define AZX_DCAPS_PRESET_NVIDIA \ #define AZX_DCAPS_PRESET_NVIDIA \
(AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI | /*AZX_DCAPS_ALIGN_BUFSIZE |*/ \ (AZX_DCAPS_NO_MSI | /*AZX_DCAPS_ALIGN_BUFSIZE |*/ \
AZX_DCAPS_NO_64BIT | AZX_DCAPS_CORBRP_SELF_CLEAR |\ AZX_DCAPS_NO_64BIT | AZX_DCAPS_CORBRP_SELF_CLEAR |\
AZX_DCAPS_SNOOP_TYPE(NVIDIA)) AZX_DCAPS_SNOOP_TYPE(NVIDIA))
...@@ -1637,6 +1637,11 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci, ...@@ -1637,6 +1637,11 @@ static int azx_create(struct snd_card *card, struct pci_dev *pci,
return err; return err;
} }
if (chip->driver_type == AZX_DRIVER_NVIDIA) {
dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
chip->bus.needs_damn_long_delay = 1;
}
err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
if (err < 0) { if (err < 0) {
dev_err(card->dev, "Error creating device [card]!\n"); dev_err(card->dev, "Error creating device [card]!\n");
......
...@@ -464,6 +464,8 @@ static int hda_tegra_create(struct snd_card *card, ...@@ -464,6 +464,8 @@ static int hda_tegra_create(struct snd_card *card,
if (err < 0) if (err < 0)
return err; return err;
chip->bus.needs_damn_long_delay = 1;
err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
if (err < 0) { if (err < 0) {
dev_err(card->dev, "Error creating device\n"); dev_err(card->dev, "Error creating device\n");
...@@ -481,8 +483,7 @@ MODULE_DEVICE_TABLE(of, hda_tegra_match); ...@@ -481,8 +483,7 @@ MODULE_DEVICE_TABLE(of, hda_tegra_match);
static int hda_tegra_probe(struct platform_device *pdev) static int hda_tegra_probe(struct platform_device *pdev)
{ {
const unsigned int driver_flags = AZX_DCAPS_RIRB_DELAY | const unsigned int driver_flags = AZX_DCAPS_CORBRP_SELF_CLEAR;
AZX_DCAPS_CORBRP_SELF_CLEAR;
struct snd_card *card; struct snd_card *card;
struct azx *chip; struct azx *chip;
struct hda_tegra *hda; struct hda_tegra *hda;
......
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