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. 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