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?