Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+5 −3
Original line number Original line Diff line number Diff line
@@ -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);