Commit cbe1932a authored by Ruibin Chang's avatar Ruibin Chang Committed by Benjamin Cabé
Browse files

drivers/sensor/ite/tach_ite_it8xxx2: don't clear both tach status at once

When two tach use simultaneously, I find that the both tach status will
be cleared at once, which causes one of tach not to get rpm speed.
So I change it to clear status only one tach at a time.

This issue is reported by Huaqin:
https://partnerissuetracker.corp.google.com/issues/404067663?pli=1

Signed-off-by: default avatarRuibin Chang <Ruibin.Chang@ite.com.tw>
parent 7752def6
Loading
Loading
Loading
Loading
+16 −6
Changes for drivers/sensor/ite/ite_tach_it8xxx2/tach_ite_it8xxx2.c: 16 added lines, 6 removed lines.
Original line number Diff line number Diff line
@@ -127,8 +127,14 @@ static int tach_it8xxx2_sample_fetch(const struct device *dev,
	if (tach_ch_is_valid(dev, tach_ch)) {
		/* If channel data of tachometer is valid, then save it */
		data->capture = ((*reg_fxtmrr) << 8) | (*reg_fxtlrr);
		/* Clear tachometer data valid status */
		*reg_tswctlr |= config->dvs_bit;

		if (config->dvs_bit == IT8XXX2_PWM_T0DVS) {
			/* Only W/C tach 0 data valid status */
			*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T1DVS);
		} else {
			/* Only W/C tach 1 data valid status */
			*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T0DVS);
		}
	} else {
		/* If channel data of tachometer isn't valid, then clear it */
		data->capture = 0;
@@ -200,13 +206,17 @@ static int tach_it8xxx2_init(const struct device *dev)
	if (tach_ch == IT8XXX2_TACH_CHANNEL_A) {
		/* Select IT8XXX2_TACH_CHANNEL_A output to tachometer */
		*reg_tswctlr &= ~(config->chsel_bit);
		/* Clear tachometer data valid status */
		*reg_tswctlr |= config->dvs_bit;
	} else {
		/* Select IT8XXX2_TACH_CHANNEL_B output to tachometer */
		*reg_tswctlr |= config->chsel_bit;
		/* Clear tachometer data valid status */
		*reg_tswctlr |= config->dvs_bit;
	}

	if (config->dvs_bit == IT8XXX2_PWM_T0DVS) {
		/* Only W/C tach 0 data valid status */
		*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T1DVS);
	} else {
		/* Only W/C tach 1 data valid status */
		*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T0DVS);
	}

	/* Tachometer sensor already start */