ALSA: hda - Raise AZX_DCAPS_RIRB_DELAY handling into top drivers
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: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
ef85f299c7
commit
7d9a180895
|
@ -1054,11 +1054,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 @@
|
||||||
#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 */
|
||||||
|
|
|
@ -338,7 +338,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))
|
||||||
|
|
||||||
|
@ -1573,6 +1573,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,
|
||||||
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);
|
||||||
|
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue