On Tue, Mar 13, 2012 at 12:44:08PM -0700, Rhyland Klein wrote: > This change adds the logic to support using the jack detect mechanism built > in to the codec to detect both when a jack was inserted and what type of > jack is present. This looks mostly good, a few things below. > @@ -51,6 +52,9 @@ struct max98095_priv { > u8 lin_state; > unsigned int mic1pre; > unsigned int mic2pre; > + int irq; You can just get the irq from the I2C device. > + if (max98095->headphone_jack == max98095->mic_jack) > + snd_soc_jack_report(max98095->headphone_jack, > + hp_report | mic_report, > + SND_JACK_HEADSET); > + else { Braces on both sides of the if for clarity. > +static irqreturn_t max98095_jack_handler(int irq, void *data) > +{ > + struct snd_soc_codec *codec = data; > + int ret; > + > + ret = max98095_report_jack(codec); > + > + return ret ? IRQ_NONE : IRQ_HANDLED; There is no point in having a separate function here, this function has no contents. Just inline it. Please also avoid the use of the ternery operator. > + /* configure jack detection: slew is calculated as 4 * (delay + 1) > + * The default is 24 (0x18) to get 100ms delay. > + */ > + ret = snd_soc_write(codec, M98095_08E_JACK_DC_SLEW, > + M98095_DEFAULT_SLEW_DELAY); > + if (ret < 0) { > + dev_err(codec->dev, "Failed to cfg auto detect %d\n", ret); > + return ret; > + } Platform data? > + enable_irq(max98095->irq); You shouldn't be fiddling around with enable_irq() and disable_irq(). Why are you doing this?