[alsa-devel] [PATCH] ASoC: Add GPIO support for jack	reporting	interface
    Lopez Cruz, Misael 
    x0052729 at ti.com
       
    Tue Mar  3 19:39:17 CET 2009
    
    
  
> > Add GPIO support to jack reporting framework in ASoC using gpiolib calls.
> > The gpio support exports two new functions: snd_soc_jack_add_gpios and 
> > snd_soc_jack_free_gpios.
> I prefer GPIO stuff built in conditionally.
> The jack layer is used also for non-ASoC codes, and GPIO 
> isn't always present.
Is it ok if I enclose all gpio functionality with #ifdef CONFIG_GPIOLIB?
 
> > +/* irq handler for gpio pin */
> > +static irqreturn_t gpio_handler(int irq, void *data) {
> > +	struct snd_soc_jack_gpio *gpio = data;
> > +
> > +	return IRQ_RETVAL(schedule_work(&gpio->work));
> Is this really correct?
Changed to:
static irqreturn_t gpio_handler(int irq, void *data)
{
	struct snd_soc_jack_gpio *gpio = data;
	schedule_work(&gpio->work);
	return IRQ_HANDLED;
}
> > +int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
> > +			struct snd_soc_jack_gpio *gpios)
> This error path doesn't look good.  It seems leaking / 
> keeping some resources.
Changed to:
int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
                        struct snd_soc_jack_gpio *gpios)
{
	int i, ret;
	for (i = 0; i < count; i++) {
		if (!gpio_is_valid(gpios[i].gpio)) {
			printk(KERN_ERR "Invalid gpio %d\n",
					gpios[i].gpio);
			return -EINVAL;
		}
		if (!gpios[i].name) {
			printk(KERN_ERR "No name for gpio %d\n",
					gpios[i].gpio);
			return -EINVAL;
		}
		ret = gpio_request(gpios[i].gpio, gpios[i].name);
		if (ret)
			return ret;
		ret = gpio_direction_input(gpios[i].gpio);
		if (ret) {
			gpio_free(gpios[i].gpio);
			return ret;
		}
		ret = request_irq(gpio_to_irq(gpios[i].gpio),
				gpio_handler,
				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
				jack->card->dev->driver->name,
				&gpios[i]);
		if (ret) {
			gpio_free(gpios[i].gpio);
			return ret;
		}
		INIT_WORK(&gpios[i].work, gpio_work);
		gpios[i].jack = jack;
	}
	return 0;
}
    
    
More information about the Alsa-devel
mailing list