From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754825Ab2GQI5W (ORCPT ); Tue, 17 Jul 2012 04:57:22 -0400 Received: from cantor2.suse.de ([195.135.220.15]:55219 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752437Ab2GQI5R (ORCPT ); Tue, 17 Jul 2012 04:57:17 -0400 Date: Tue, 17 Jul 2012 10:57:15 +0200 Message-ID: From: Takashi Iwai To: Ondrej Zary Cc: alsa-devel@alsa-project.org, Kernel development list Subject: Re: [alsa-devel] [PATCH] snd-opti9xx: Implement suspend/resume In-Reply-To: <201207170916.44277.linux@rainbow-software.org> References: <201207170916.44277.linux@rainbow-software.org> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI/1.14.6 (Maruoka) FLIM/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL/10.8 Emacs/24.1 (x86_64-suse-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org At Tue, 17 Jul 2012 09:16:44 +0200, Ondrej Zary wrote: > > Implement suspend/resume support for Opti 92x and 93x chips. > Tested with Opti 929A+AD1848 and Opti 931. > > Signed-off-by: Ondrej Zary Applied now. Thanks. Takashi > > --- a/sound/isa/opti9xx/opti92x-ad1848.c > +++ b/sound/isa/opti9xx/opti92x-ad1848.c > @@ -136,8 +136,8 @@ struct snd_opti9xx { > #ifdef OPTi93X > unsigned long mc_indir_index; > struct resource *res_mc_indir; > - struct snd_wss *codec; > #endif /* OPTi93X */ > + struct snd_wss *codec; > unsigned long pwd_reg; > > spinlock_t lock; > @@ -870,9 +870,7 @@ static int __devinit snd_opti9xx_probe(struct snd_card *card) > &codec); > if (error < 0) > return error; > -#ifdef OPTi93X > chip->codec = codec; > -#endif > error = snd_wss_pcm(codec, 0, &pcm); > if (error < 0) > return error; > @@ -1053,11 +1051,55 @@ static int __devexit snd_opti9xx_isa_remove(struct device *devptr, > return 0; > } > > +#ifdef CONFIG_PM > +static int snd_opti9xx_suspend(struct snd_card *card) > +{ > + struct snd_opti9xx *chip = card->private_data; > + > + snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); > + chip->codec->suspend(chip->codec); > + return 0; > +} > + > +static int snd_opti9xx_resume(struct snd_card *card) > +{ > + struct snd_opti9xx *chip = card->private_data; > + int error, xdma2; > +#if defined(CS4231) || defined(OPTi93X) > + xdma2 = dma2; > +#else > + xdma2 = -1; > +#endif > + > + error = snd_opti9xx_configure(chip, port, irq, dma1, xdma2, > + mpu_port, mpu_irq); > + if (error) > + return error; > + chip->codec->resume(chip->codec); > + snd_power_change_state(card, SNDRV_CTL_POWER_D0); > + return 0; > +} > + > +static int snd_opti9xx_isa_suspend(struct device *dev, unsigned int n, > + pm_message_t state) > +{ > + return snd_opti9xx_suspend(dev_get_drvdata(dev)); > +} > + > +static int snd_opti9xx_isa_resume(struct device *dev, unsigned int n) > +{ > + return snd_opti9xx_resume(dev_get_drvdata(dev)); > +} > +#endif > + > static struct isa_driver snd_opti9xx_driver = { > .match = snd_opti9xx_isa_match, > .probe = snd_opti9xx_isa_probe, > .remove = __devexit_p(snd_opti9xx_isa_remove), > - /* FIXME: suspend/resume */ > +#ifdef CONFIG_PM > + .suspend = snd_opti9xx_isa_suspend, > + .resume = snd_opti9xx_isa_resume, > +#endif > .driver = { > .name = DEV_NAME > }, > @@ -1123,12 +1165,29 @@ static void __devexit snd_opti9xx_pnp_remove(struct pnp_card_link * pcard) > snd_opti9xx_pnp_is_probed = 0; > } > > +#ifdef CONFIG_PM > +static int snd_opti9xx_pnp_suspend(struct pnp_card_link *pcard, > + pm_message_t state) > +{ > + return snd_opti9xx_suspend(pnp_get_card_drvdata(pcard)); > +} > + > +static int snd_opti9xx_pnp_resume(struct pnp_card_link *pcard) > +{ > + return snd_opti9xx_resume(pnp_get_card_drvdata(pcard)); > +} > +#endif > + > static struct pnp_card_driver opti9xx_pnpc_driver = { > .flags = PNP_DRIVER_RES_DISABLE, > .name = "opti9xx", > .id_table = snd_opti9xx_pnpids, > .probe = snd_opti9xx_pnp_probe, > .remove = __devexit_p(snd_opti9xx_pnp_remove), > +#ifdef CONFIG_PM > + .suspend = snd_opti9xx_pnp_suspend, > + .resume = snd_opti9xx_pnp_resume, > +#endif > }; > #endif > > > -- > Ondrej Zary > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel >