- 积分
- 64
贡献393
飞刀139 FD
注册时间2024-7-8
在线时间19 小时

|
发表于 2025-1-20 08:51:53
|
显示全部楼层
经过核实,T507 PWM频率计算有些问题,您参考这个修改内容进行一下修改即可
From 12f0152db36d8a620d513f48c49e4460ca931f12 Mon Sep 17 00:00:00 2001
From: houjianlin <houjianlin0802@163.com>
Date: Wed, 8 Jan 2025 15:56:26 +0800
Subject: [PATCH] fixed pwm
---
linux-4.9/drivers/pwm/pwm-sunxi-new.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
mode change 100644 => 100755 linux-4.9/drivers/pwm/pwm-sunxi-new.c
diff --git a/linux-4.9/drivers/pwm/pwm-sunxi-new.c b/linux-4.9/drivers/pwm/pwm-sunxi-new.c
old mode 100644
new mode 100755
index e9ad016b5..600cd4e2d
--- a/linux-4.9/drivers/pwm/pwm-sunxi-new.c
+++ b/linux-4.9/drivers/pwm/pwm-sunxi-new.c
@@ -305,6 +305,7 @@ static int sunxi_pwm_config_single(struct pwm_chip *chip, struct pwm_device *pwm
unsigned int temp;
unsigned long long c = 0;
unsigned long entire_cycles = 256, active_cycles = 192;
+ unsigned long entire_cycles_tmp = 0;
struct sunxi_pwm_chip *pc = to_sunxi_pwm_chip(chip);
unsigned int reg_offset, reg_shift, reg_width;
unsigned int reg_bypass_shift;
@@ -385,11 +386,13 @@ static int sunxi_pwm_config_single(struct pwm_chip *chip, struct pwm_device *pwm
do_div(c, 1000000000);
entire_cycles = (unsigned long)c;
+ entire_cycles_tmp = entire_cycles;
+
for (pre_scal_id = 0; pre_scal_id < 9; pre_scal_id++) {
if (entire_cycles <= 65536)
break;
for (prescale = 0; prescale < PRESCALE_MAX+1; prescale++) {
- entire_cycles = (entire_cycles/pre_scal[pre_scal_id][1])/(prescale + 1);
+ entire_cycles = (entire_cycles_tmp/pre_scal[pre_scal_id][1])/(prescale + 1);
if (entire_cycles <= 65536) {
div_m = pre_scal[pre_scal_id][0];
break;
--
2.17.1
|
|