static int hda_tegra_init_chip(struct azx *chip, struct platform_device *pdev) { struct hda_tegra *hda = container_of(chip, struct hda_tegra, chip); struct device *dev = hda->dev; struct resource *res; int err; hda->hda_clk = devm_clk_get(dev, "hda"); if (IS_ERR(hda->hda_clk)) return PTR_ERR(hda->hda_clk); hda->hda2codec_2x_clk = devm_clk_get(dev, "hda2codec_2x"); if (IS_ERR(hda->hda2codec_2x_clk)) return PTR_ERR(hda->hda2codec_2x_clk); hda->hda2hdmi_clk = devm_clk_get(dev, "hda2hdmi"); if (IS_ERR(hda->hda2hdmi_clk)) return PTR_ERR(hda->hda2hdmi_clk); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); hda->regs = devm_ioremap_resource(dev, res); if (IS_ERR(chip->remap_addr)) return PTR_ERR(chip->remap_addr); chip->remap_addr = hda->regs + HDA_BAR0; chip->addr = res->start + HDA_BAR0; err = hda_tegra_enable_clocks(hda); if (err) return err; hda_tegra_init(hda); return 0; }
static int hda_tegra_resume(struct device *dev) { struct snd_card *card = dev_get_drvdata(dev); struct azx *chip = card->private_data; struct hda_tegra *hda = container_of(chip, struct hda_tegra, chip); hda_tegra_enable_clocks(hda); hda_tegra_init(hda); azx_init_chip(chip, 1); snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; }
static int __maybe_unused hda_tegra_runtime_resume(struct device *dev) { struct snd_card *card = dev_get_drvdata(dev); struct azx *chip = card->private_data; struct hda_tegra *hda = container_of(chip, struct hda_tegra, chip); int rc; rc = hda_tegra_enable_clocks(hda); if (rc != 0) return rc; if (chip && chip->running) { hda_tegra_init(hda); azx_init_chip(chip, 1); } return 0; }
static int hda_tegra_resume(struct device *dev) { struct snd_card *card = dev_get_drvdata(dev); struct azx *chip = card->private_data; struct hda_tegra *hda = container_of(chip, struct hda_tegra, chip); int status; hda_tegra_enable_clocks(hda); /* Read STATESTS before controller reset */ status = azx_readw(chip, STATESTS); hda_tegra_init(hda); azx_init_chip(chip, 1); snd_hda_resume(chip->bus); snd_power_change_state(card, SNDRV_CTL_POWER_D0); return 0; }