/* bcm_rx_update_and_send - process a detected relevant receive content change */
static void bcm_rx_update_and_send(struct bcm_op *op, struct can_frame *lastdata, const struct can_frame *rxdata)
/* bcm_rx_update_and_send - process a detected relevant receive content change */
static void bcm_rx_update_and_send(struct bcm_op *op, struct can_frame *lastdata, const struct can_frame *rxdata)
{
	memcpy(lastdata, rxdata, CFSIZ);
	lastdata->can_dlc |= (RX_RECV|RX_THR);
	if (!op->kt_ival2.tv64) {
		bcm_rx_changed(op, lastdata);
		return;
	}
	if (hrtimer_active(&op->thrtimer))
		return;
	if (!op->kt_lastmsg.tv64)
		goto rx_changed_settime;
	if (ktime_us_delta(ktime_get(), op->kt_lastmsg) <
	    ktime_to_us(op->kt_ival2)) {
		hrtimer_start(&op->thrtimer,
			      ktime_add(op->kt_lastmsg, op->kt_ival2),
			      HRTIMER_MODE_ABS);
		return;
	}
rx_changed_settime:
	bcm_rx_changed(op, lastdata);
	op->kt_lastmsg = ktime_get();
}