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

Commit e5eda7fa authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab
Browse files

[media] winbond-cir: fix idle mode



The receiver is never disabled by idle mode since rxstate never gets set
to RXSTATE_ACTIVE, so we keep on getting interrupts after the first IR
activity ends. Note that ir_raw_event_reset() already calls
ir_raw_event_handle().

Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 293d31ed
Loading
Loading
Loading
Loading
+5 −10
Original line number Diff line number Diff line
@@ -207,7 +207,6 @@ struct wbcir_data {
	/* RX state */
	enum wbcir_rxstate rxstate;
	struct led_trigger *rxtrigger;
	struct ir_raw_event rxev;

	/* TX state */
	enum wbcir_txstate txstate;
@@ -339,10 +338,13 @@ wbcir_idle_rx(struct rc_dev *dev, bool idle)
		led_trigger_event(data->rxtrigger, LED_FULL);
	}

	if (idle && data->rxstate != WBCIR_RXSTATE_INACTIVE)
	if (idle && data->rxstate != WBCIR_RXSTATE_INACTIVE) {
		data->rxstate = WBCIR_RXSTATE_INACTIVE;
		led_trigger_event(data->rxtrigger, LED_OFF);
		/* Tell hardware to go idle by setting RXINACTIVE */
		outb(WBCIR_RX_DISABLE, data->sbase + WBCIR_REG_SP3_ASCR);
	}
}

static void
wbcir_irq_rx(struct wbcir_data *data, struct pnp_dev *device)
@@ -360,12 +362,6 @@ wbcir_irq_rx(struct wbcir_data *data, struct pnp_dev *device)
		ir_raw_event_store_with_filter(data->dev, &rawir);
	}

	/* Check if we should go idle */
	if (data->dev->idle) {
		led_trigger_event(data->rxtrigger, LED_OFF);
		data->rxstate = WBCIR_RXSTATE_INACTIVE;
	}

	ir_raw_event_handle(data->dev);
}

@@ -915,9 +911,8 @@ wbcir_init_hw(struct wbcir_data *data)

	/* Clear RX state */
	data->rxstate = WBCIR_RXSTATE_INACTIVE;
	data->rxev.duration = 0;
	ir_raw_event_reset(data->dev);
	ir_raw_event_handle(data->dev);
	ir_raw_event_set_idle(data->dev, true);

	/* Clear TX state */
	if (data->txstate == WBCIR_TXSTATE_ACTIVE) {