* Felipe Balbi <felipe.balbi@xxxxxxxxx> [080813 20:37]: > If we can't reach the driver, we stop trying to probe > it. Useful when building kernel for n800 and n810. > > n800 doesn't have lm8323, so that driver shouldn't probe > there. Pushing today. Tony > Signed-off-by: Felipe Balbi <felipe.balbi@xxxxxxxxx> > --- > drivers/input/keyboard/lm8323.c | 42 +++++++++++++++++++++++++++++--------- > 1 files changed, 32 insertions(+), 10 deletions(-) > > diff --git a/drivers/input/keyboard/lm8323.c b/drivers/input/keyboard/lm8323.c > index 72bb587..3d10a0f 100644 > --- a/drivers/input/keyboard/lm8323.c > +++ b/drivers/input/keyboard/lm8323.c > @@ -348,10 +348,10 @@ static void lm8323_process_error(struct lm8323_chip *lm) > } > } > > -static void lm8323_reset(struct lm8323_chip *lm) > +static int lm8323_reset(struct lm8323_chip *lm) > { > /* The docs say we must pass 0xAA as the data byte. */ > - lm8323_write(lm, 2, LM8323_CMD_RESET, 0xAA); > + return lm8323_write(lm, 2, LM8323_CMD_RESET, 0xAA); > } > > static int lm8323_configure(struct lm8323_chip *lm) > @@ -360,6 +360,7 @@ static int lm8323_configure(struct lm8323_chip *lm) > int clock = (CLK_SLOWCLKEN | CLK_RCPWM_EXTERNAL); > int debounce = lm->debounce_time >> 2; > int active = lm->active_time >> 2; > + int ret; > > /* > * Active time must be greater than the debounce time: if it's > @@ -368,13 +369,25 @@ static int lm8323_configure(struct lm8323_chip *lm) > if (debounce >= active) > active = debounce + 3; > > - lm8323_write(lm, 2, LM8323_CMD_WRITE_CFG, 0); > - lm8323_write(lm, 2, LM8323_CMD_WRITE_CLOCK, clock); > - lm8323_write(lm, 2, LM8323_CMD_SET_KEY_SIZE, keysize); > + ret = lm8323_write(lm, 2, LM8323_CMD_WRITE_CFG, 0); > + if (ret) > + goto err; > + ret = lm8323_write(lm, 2, LM8323_CMD_WRITE_CLOCK, clock); > + if (ret) > + goto err; > + ret = lm8323_write(lm, 2, LM8323_CMD_SET_KEY_SIZE, keysize); > + if (ret) > + goto err; > lm8323_set_active_time(lm, lm->active_time); > - lm8323_write(lm, 2, LM8323_CMD_SET_DEBOUNCE, debounce); > - lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_STATE, 0xff, 0xff); > - lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_SEL, 0, 0); > + ret = lm8323_write(lm, 2, LM8323_CMD_SET_DEBOUNCE, debounce); > + if (ret) > + goto err; > + ret = lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_STATE, 0xff, 0xff); > + if (ret) > + goto err; > + ret = lm8323_write(lm, 3, LM8323_CMD_WRITE_PORT_SEL, 0, 0); > + if (ret) > + goto err; > > /* > * Not much we can do about errors at this point, so just hope > @@ -382,6 +395,11 @@ static int lm8323_configure(struct lm8323_chip *lm) > */ > > return 0; > + > +err: > + dev_err(&lm->client->dev, "failed to configure lm8323\n"); > + > + return ret; > } > > /* > @@ -721,7 +739,9 @@ static int lm8323_probe(struct i2c_client *client, > else if (lm->active_time == -1) /* Disable sleep. */ > lm->active_time = 0; > > - lm8323_reset(lm); > + err = lm8323_reset(lm); > + if (err) > + goto fail2; > > /* Nothing's set up to service the IRQ yet, so just spin for max. > * 100ms until we can configure. */ > @@ -738,7 +758,9 @@ static int lm8323_probe(struct i2c_client *client, > > msleep(1); > } > - lm8323_configure(lm); > + err = lm8323_configure(lm); > + if (err) > + goto fail2; > > /* If a true probe check the device */ > if (lm8323_read_id(lm, data) != 0) { > -- > 1.6.0.rc1.71.gfba5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html