From cd2e7148e77d45cad32b8cb18bc55bfa66491181 Mon Sep 17 00:00:00 2001 From: Christian Gromm Date: Tue, 8 May 2018 11:44:57 +0200 Subject: [PATCH] staging: most: i2c: avoid polling in case of misconfig This patch prevents the driver from falling back to polling mode in case of IRQ misconfiguration. Signed-off-by: Christian Gromm Signed-off-by: Greg Kroah-Hartman --- drivers/staging/most/i2c/i2c.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/staging/most/i2c/i2c.c b/drivers/staging/most/i2c/i2c.c index a993e8e..e03cb6c 100644 --- a/drivers/staging/most/i2c/i2c.c +++ b/drivers/staging/most/i2c/i2c.c @@ -90,22 +90,24 @@ static int configure_channel(struct most_interface *most_iface, } if (channel_config->direction == MOST_CH_RX) { - dev->polling_mode = polling_req || dev->client->irq <= 0; + dev->polling_mode = polling_req; if (!dev->polling_mode) { - pr_info("Requesting IRQ: %d\n", dev->client->irq); + if (dev->client->irq <= 0) { + pr_err("bad irq: %d\n", dev->client->irq); + return -ENOENT; + } dev->rx.int_disabled = false; ret = request_irq(dev->client->irq, most_irq_handler, 0, dev->client->name, dev); if (ret) { - pr_info("IRQ request failed: %d, falling back to polling\n", - ret); - dev->polling_mode = true; + pr_err("request_irq(%d) failed: %d\n", + dev->client->irq, ret); + return ret; } + } else if (scan_rate) { + pr_info("polling rate is %d Hz\n", scan_rate); } } - if ((channel_config->direction == MOST_CH_RX) && (dev->polling_mode)) { - pr_info("Using polling at rate: %d times/sec\n", scan_rate); - } dev->is_open[ch_idx] = true; return 0; -- 2.7.4