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: Christian Gromm <christian.gromm@microchip.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cd2e7148e7
commit
ea8bcd5282
|
@ -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,
|
||||||
{
|
{
|
||||||
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,
|
||||||
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)
|
||||||
|
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue