From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753948AbZBWHr2 (ORCPT ); Mon, 23 Feb 2009 02:47:28 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752845AbZBWHrT (ORCPT ); Mon, 23 Feb 2009 02:47:19 -0500 Received: from cantor2.suse.de ([195.135.220.15]:36487 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752780AbZBWHrS (ORCPT ); Mon, 23 Feb 2009 02:47:18 -0500 Date: Mon, 23 Feb 2009 08:47:14 +0100 Message-ID: From: Takashi Iwai To: Andres Salomon Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org, Jeremy Katz , cjb@laptop.org, jayakumar.alsa@gmail.com, Jordan Crouse , linux-geode@lists.infradead.org, perex@perex.cz Subject: Re: [PATCH 2/2] ALSA: cs5535audio: free OLPC quirks from reliance on MGEODE_LX cpu optimization In-Reply-To: <20090220221215.2d04d0c5@ephemeral> References: <20090220221215.2d04d0c5@ephemeral> User-Agent: Wanderlust/2.12.0 (Your Wildest Dreams) SEMI/1.14.6 (Maruoka) FLIM/1.14.7 (=?ISO-8859-4?Q?Sanj=F2?=) APEL/10.6 Emacs/22.3 (x86_64-suse-linux-gnu) MULE/5.0 (SAKAKI) 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 Fri, 20 Feb 2009 22:12:15 -0500, Andres Salomon wrote: > > > Previously, OLPC support for the mic extensions was only enabled in the > ALSA driver if CONFIG_OLPC and CONFIG_MGEODE_LX were both set. This was > because the old geode GPIO code was written in a manner that assumed > CONFIG_MGEODE_LX. With the new cs553x-gpio driver, this is no longer the > case; as such, we can drop the requirement on CONFIG_MGEODE_LX and instead > include a requirement on GPIOLIB. > > We use the generic GPIO API rather than the cs553x-specific API. > > Signed-off-by: Andres Salomon I like this patch series. Just let me know if any piece should be go through the sound tree. thanks, Takashi > --- > arch/x86/include/asm/olpc.h | 2 +- > sound/pci/cs5535audio/Makefile | 2 +- > sound/pci/cs5535audio/cs5535audio.c | 1 + > sound/pci/cs5535audio/cs5535audio.h | 4 +++- > sound/pci/cs5535audio/cs5535audio_olpc.c | 26 +++++++++++++++++++------- > 5 files changed, 25 insertions(+), 10 deletions(-) > > diff --git a/arch/x86/include/asm/olpc.h b/arch/x86/include/asm/olpc.h > index 834a302..3a57385 100644 > --- a/arch/x86/include/asm/olpc.h > +++ b/arch/x86/include/asm/olpc.h > @@ -120,7 +120,7 @@ extern int olpc_ec_mask_unset(uint8_t bits); > > /* GPIO assignments */ > > -#define OLPC_GPIO_MIC_AC geode_gpio(1) > +#define OLPC_GPIO_MIC_AC 1 > #define OLPC_GPIO_DCON_IRQ geode_gpio(7) > #define OLPC_GPIO_THRM_ALRM geode_gpio(10) > #define OLPC_GPIO_SMB_CLK geode_gpio(14) > diff --git a/sound/pci/cs5535audio/Makefile b/sound/pci/cs5535audio/Makefile > index fda7a94..9b5c689 100644 > --- a/sound/pci/cs5535audio/Makefile > +++ b/sound/pci/cs5535audio/Makefile > @@ -4,7 +4,7 @@ > > snd-cs5535audio-y := cs5535audio.o cs5535audio_pcm.o > snd-cs5535audio-$(CONFIG_PM) += cs5535audio_pm.o > -ifdef CONFIG_MGEODE_LX > +ifdef CONFIG_GENERIC_GPIO > snd-cs5535audio-$(CONFIG_OLPC) += cs5535audio_olpc.o > endif > > diff --git a/sound/pci/cs5535audio/cs5535audio.c b/sound/pci/cs5535audio/cs5535audio.c > index 826e6de..f199bc2 100644 > --- a/sound/pci/cs5535audio/cs5535audio.c > +++ b/sound/pci/cs5535audio/cs5535audio.c > @@ -389,6 +389,7 @@ probefail_out: > > static void __devexit snd_cs5535audio_remove(struct pci_dev *pci) > { > + olpc_quirks_cleanup(); > snd_card_free(pci_get_drvdata(pci)); > pci_set_drvdata(pci, NULL); > } > diff --git a/sound/pci/cs5535audio/cs5535audio.h b/sound/pci/cs5535audio/cs5535audio.h > index 7a298ac..51966d7 100644 > --- a/sound/pci/cs5535audio/cs5535audio.h > +++ b/sound/pci/cs5535audio/cs5535audio.h > @@ -99,10 +99,11 @@ int snd_cs5535audio_suspend(struct pci_dev *pci, pm_message_t state); > int snd_cs5535audio_resume(struct pci_dev *pci); > #endif > > -#if defined(CONFIG_OLPC) && defined(CONFIG_MGEODE_LX) > +#ifdef CONFIG_OLPC > void __devinit olpc_prequirks(struct snd_card *card, > struct snd_ac97_template *ac97); > int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97); > +void __devexit olpc_quirks_cleanup(void); > void olpc_analog_input(struct snd_ac97 *ac97, int on); > void olpc_mic_bias(struct snd_ac97 *ac97, int on); > > @@ -128,6 +129,7 @@ static inline int olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97) > { > return 0; > } > +static inline void olpc_quirks_cleanup(void) { } > static inline void olpc_analog_input(struct snd_ac97 *ac97, int on) { } > static inline void olpc_mic_bias(struct snd_ac97 *ac97, int on) { } > static inline void olpc_capture_open(struct snd_ac97 *ac97) { } > diff --git a/sound/pci/cs5535audio/cs5535audio_olpc.c b/sound/pci/cs5535audio/cs5535audio_olpc.c > index 5c68143..50da49b 100644 > --- a/sound/pci/cs5535audio/cs5535audio_olpc.c > +++ b/sound/pci/cs5535audio/cs5535audio_olpc.c > @@ -13,10 +13,13 @@ > #include > #include > #include > +#include > > #include > #include "cs5535audio.h" > > +#define DRV_NAME "cs5535audio-olpc" > + > /* > * OLPC has an additional feature on top of the regular AD1888 codec features. > * It has an Analog Input mode that is switched into (after disabling the > @@ -38,10 +41,7 @@ void olpc_analog_input(struct snd_ac97 *ac97, int on) > } > > /* set Analog Input through GPIO */ > - if (on) > - geode_gpio_set(OLPC_GPIO_MIC_AC, GPIO_OUTPUT_VAL); > - else > - geode_gpio_clear(OLPC_GPIO_MIC_AC, GPIO_OUTPUT_VAL); > + gpio_set_value(OLPC_GPIO_MIC_AC, on); > } > > /* > @@ -73,8 +73,7 @@ static int olpc_dc_info(struct snd_kcontrol *kctl, > > static int olpc_dc_get(struct snd_kcontrol *kctl, struct snd_ctl_elem_value *v) > { > - v->value.integer.value[0] = geode_gpio_isset(OLPC_GPIO_MIC_AC, > - GPIO_OUTPUT_VAL); > + v->value.integer.value[0] = gpio_get_value(OLPC_GPIO_MIC_AC); > return 0; > } > > @@ -153,6 +152,12 @@ int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97) > if (!machine_is_olpc()) > return 0; > > + if (gpio_request(OLPC_GPIO_MIC_AC, DRV_NAME)) { > + printk(KERN_ERR DRV_NAME ": unable to allocate MIC GPIO\n"); > + return -EIO; > + } > + gpio_direction_output(OLPC_GPIO_MIC_AC, 0); > + > /* drop the original AD1888 HPF control */ > memset(&elem, 0, sizeof(elem)); > elem.iface = SNDRV_CTL_ELEM_IFACE_MIXER; > @@ -169,11 +174,18 @@ int __devinit olpc_quirks(struct snd_card *card, struct snd_ac97 *ac97) > for (i = 0; i < ARRAY_SIZE(olpc_cs5535audio_ctls); i++) { > err = snd_ctl_add(card, snd_ctl_new1(&olpc_cs5535audio_ctls[i], > ac97->private_data)); > - if (err < 0) > + if (err < 0) { > + gpio_free(OLPC_GPIO_MIC_AC); > return err; > + } > } > > /* turn off the mic by default */ > olpc_mic_bias(ac97, 0); > return 0; > } > + > +void __devexit olpc_quirks_cleanup(void) > +{ > + gpio_free(OLPC_GPIO_MIC_AC); > +} > -- > 1.5.6.5 >