Commit ea8bcd52 authored by Christian Gromm's avatar Christian Gromm Committed by Greg Kroah-Hartman

staging: most: i2c: prevent zero delay polling

This patch avoids that a configured scan_rate of more than MSEC_PER_SEC
might result in a polling delay of zero.
Signed-off-by: default avatarChristian Gromm <christian.gromm@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cd2e7148
...@@ -49,6 +49,7 @@ struct hdm_i2c { ...@@ -49,6 +49,7 @@ struct hdm_i2c {
struct list_head list; struct list_head list;
struct mutex list_mutex; struct mutex list_mutex;
bool int_disabled; bool int_disabled;
unsigned int delay;
} rx; } rx;
char name[64]; char name[64];
}; };
...@@ -75,6 +76,7 @@ static int configure_channel(struct most_interface *most_iface, ...@@ -75,6 +76,7 @@ static int configure_channel(struct most_interface *most_iface,
{ {
int ret; int ret;
struct hdm_i2c *dev = to_hdm(most_iface); struct hdm_i2c *dev = to_hdm(most_iface);
unsigned int delay;
BUG_ON(ch_idx < 0 || ch_idx >= NUM_CHANNELS); BUG_ON(ch_idx < 0 || ch_idx >= NUM_CHANNELS);
BUG_ON(dev->is_open[ch_idx]); BUG_ON(dev->is_open[ch_idx]);
...@@ -105,6 +107,8 @@ static int configure_channel(struct most_interface *most_iface, ...@@ -105,6 +107,8 @@ static int configure_channel(struct most_interface *most_iface,
return ret; return ret;
} }
} else if (scan_rate) { } else if (scan_rate) {
delay = msecs_to_jiffies(MSEC_PER_SEC / scan_rate);
dev->rx.delay = delay ? delay : 1;
pr_info("polling rate is %d Hz\n", scan_rate); pr_info("polling rate is %d Hz\n", scan_rate);
} }
} }
...@@ -265,9 +269,7 @@ static void pending_rx_work(struct work_struct *work) ...@@ -265,9 +269,7 @@ static void pending_rx_work(struct work_struct *work)
if (dev->polling_mode) { if (dev->polling_mode) {
if (dev->is_open[CH_RX] && scan_rate) if (dev->is_open[CH_RX] && scan_rate)
schedule_delayed_work(&dev->rx.dwork, schedule_delayed_work(&dev->rx.dwork, dev->rx.delay);
msecs_to_jiffies(MSEC_PER_SEC
/ scan_rate));
} else { } else {
dev->rx.int_disabled = false; dev->rx.int_disabled = false;
enable_irq(dev->client->irq); enable_irq(dev->client->irq);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment