Skip to content

Commit cbe1932

Browse files
RuibinChangkartben
authored andcommitted
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: Ruibin Chang <Ruibin.Chang@ite.com.tw>
1 parent 7752def commit cbe1932

File tree

1 file changed

+16
-6
lines changed

1 file changed

+16
-6
lines changed

drivers/sensor/ite/ite_tach_it8xxx2/tach_ite_it8xxx2.c

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,14 @@ static int tach_it8xxx2_sample_fetch(const struct device *dev,
127127
if (tach_ch_is_valid(dev, tach_ch)) {
128128
/* If channel data of tachometer is valid, then save it */
129129
data->capture = ((*reg_fxtmrr) << 8) | (*reg_fxtlrr);
130-
/* Clear tachometer data valid status */
131-
*reg_tswctlr |= config->dvs_bit;
130+
131+
if (config->dvs_bit == IT8XXX2_PWM_T0DVS) {
132+
/* Only W/C tach 0 data valid status */
133+
*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T1DVS);
134+
} else {
135+
/* Only W/C tach 1 data valid status */
136+
*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T0DVS);
137+
}
132138
} else {
133139
/* If channel data of tachometer isn't valid, then clear it */
134140
data->capture = 0;
@@ -200,13 +206,17 @@ static int tach_it8xxx2_init(const struct device *dev)
200206
if (tach_ch == IT8XXX2_TACH_CHANNEL_A) {
201207
/* Select IT8XXX2_TACH_CHANNEL_A output to tachometer */
202208
*reg_tswctlr &= ~(config->chsel_bit);
203-
/* Clear tachometer data valid status */
204-
*reg_tswctlr |= config->dvs_bit;
205209
} else {
206210
/* Select IT8XXX2_TACH_CHANNEL_B output to tachometer */
207211
*reg_tswctlr |= config->chsel_bit;
208-
/* Clear tachometer data valid status */
209-
*reg_tswctlr |= config->dvs_bit;
212+
}
213+
214+
if (config->dvs_bit == IT8XXX2_PWM_T0DVS) {
215+
/* Only W/C tach 0 data valid status */
216+
*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T1DVS);
217+
} else {
218+
/* Only W/C tach 1 data valid status */
219+
*reg_tswctlr = (*reg_tswctlr & ~IT8XXX2_PWM_T0DVS);
210220
}
211221

212222
/* Tachometer sensor already start */

0 commit comments

Comments
 (0)