summaryrefslogtreecommitdiff
path: root/chip/npcx/pwm_chip.h
diff options
context:
space:
mode:
authorMulin Chao <mlchao@nuvoton.com>2019-02-14 21:19:52 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-03-05 12:58:23 -0800
commit93d7bcea8121869520b0d02bf94f95eb261bee05 (patch)
tree0adf2218cc096497573adcd4db06a1bc09f193a0 /chip/npcx/pwm_chip.h
parent5210e2f5ed1e33b158bcdb15364fcae476bb8077 (diff)
downloadchrome-ec-93d7bcea8121869520b0d02bf94f95eb261bee05.tar.gz
npcx: pwm: Use DCRn greater than CTRn to present its duty cycle is zero.
In npcx pwm driver, it turns off pwm module directly when its duty cycle is set to zero. But we saw pwm signal isn't turned off by the following sequence: 1. pwm_set_raw_duty(ch, 0); 2. pwm_enable(ch, 1); Please notice setting zero in DCRn doesn't mean duty cycle is zero. (NPCX duty cycle: ( (DCRn+1) / (CTRn+1) ) x 100). Hence in step 2, we can observe a very low duty cycle once the driver enables pwm module. According to figure. 24 in npcx5's datasheet, setting DCRn greater than CTRn means that the result of 16-bits comparator is always false. It equals the duty cycle is zero. This CL adopts this method to present it and removes the dependency between pwm_enable()/ pwm_get_enabled() and pwm_set_raw_duty()/pwm_get_duty(). In order to make sure DCRn can be greater than CTRn, we also defined the PWN maximum duty cycle is (0xFFFF -1) since both DCR and CTR are 16-bits registers. BRANCH=none BUG=b:123552920 TEST=No build errors for npcx5/7 series. Test pwm console command on npcx5/7 evbs by the following sequence. 1. pwm_set_raw_duty(ch, 0); 2. pwm_enable(ch, 1); And no symptoms are observed. PWM_CONFIG_ACTIVE_LOW flag is tested also and no symptom occurred. Test fan control by faninfo & fanset console commands. Connect Sunon 4-pins PWM fan and evb by following steps: 1. Connect PWM0 to PWM pin of fan. 2. Connect TA1_TACH1 and 3.3 PU on Tacho pin of fan. 3. Connect 5V and GND pins of fan to power supply. No symptoms are observed. Change-Id: I92517ff0bf3e027ae191be00112cd71ec4b55a2b Signed-off-by: Mulin Chao <mlchao@nuvoton.com> Reviewed-on: https://chromium-review.googlesource.com/1475096 Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com> Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Diffstat (limited to 'chip/npcx/pwm_chip.h')
-rw-r--r--chip/npcx/pwm_chip.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/chip/npcx/pwm_chip.h b/chip/npcx/pwm_chip.h
index c73855916f..3a658f5d62 100644
--- a/chip/npcx/pwm_chip.h
+++ b/chip/npcx/pwm_chip.h
@@ -21,4 +21,7 @@ struct pwm_t {
extern const struct pwm_t pwm_channels[];
void pwm_config(enum pwm_channel ch);
+/* Npcx PWM maximum duty cycle value */
+#define NPCX_PWM_MAX_RAW_DUTY (UINT16_MAX - 1)
+
#endif /* __CROS_EC_PWM_CHIP_H */