diff options
Diffstat (limited to 'arch/arm/mach-tegra/nvrm/io/ap15/ap15rm_pwm.c')
-rwxr-xr-x[-rw-r--r--] | arch/arm/mach-tegra/nvrm/io/ap15/ap15rm_pwm.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/arch/arm/mach-tegra/nvrm/io/ap15/ap15rm_pwm.c b/arch/arm/mach-tegra/nvrm/io/ap15/ap15rm_pwm.c index d948fa6f2b18..6cc4e4007c07 100644..100755 --- a/arch/arm/mach-tegra/nvrm/io/ap15/ap15rm_pwm.c +++ b/arch/arm/mach-tegra/nvrm/io/ap15/ap15rm_pwm.c @@ -361,7 +361,7 @@ NvError NvRmPwmConfig( NvError status = NvSuccess; NvU32 RegValue = 0, ResultFreqKHz = 0; NvU8 PwmMode = 0; - NvU32 ClockFreqKHz = 0, DCycle = 0, DataOn = 0, DataOff = 0; + NvU32 ClockFreqKHz = 0, DCycle = 0; NvU32 PmcCtrlReg = 0, PmcDpdPadsReg = 0, PmcBlinkTimerReg = 0; NvU32 RequestPeriod = 0, ResultPeriod = 0; NvU32 DataOnRegVal = 0, DataOffRegVal = 0; @@ -500,25 +500,22 @@ NvError NvRmPwmConfig( } else { - RequestPeriod = RequestedFreqHzOrPeriod; + ResultPeriod = RequestedFreqHzOrPeriod; + if (ResultPeriod > MAX_SUPPORTED_PERIOD) + ResultPeriod = MAX_SUPPORTED_PERIOD; + RequestPeriod = ResultPeriod * DATA_FACTOR; + DCycle = DutyCycle>>16; - DataOn = (RequestPeriod * DCycle)/100; - if (DataOn > MAX_SUPPORTED_PERIOD) - { - ResultPeriod = (MAX_SUPPORTED_PERIOD * 100)/DCycle; - DataOn = MAX_SUPPORTED_PERIOD; - } - else - { - ResultPeriod = RequestPeriod; - } - DataOff = ResultPeriod - DataOn; - DataOnRegVal = DataOn * DATA_ON_FACTOR; - if (DataOnRegVal >= MAX_DATA_ON) + if(DCycle > 100) + DCycle = 100; + + DataOnRegVal = (RequestPeriod * DCycle)/100; + if(DataOnRegVal > MAX_DATA_ON) DataOnRegVal = MAX_DATA_ON; - DataOffRegVal = DataOff * DATA_ON_FACTOR; - if (DataOffRegVal >= MAX_DATA_ON) - DataOffRegVal = MAX_DATA_ON; + + DataOffRegVal = RequestPeriod - DataOnRegVal; + if(DataOffRegVal > MAX_DATA_OFF) + DataOffRegVal = MAX_DATA_OFF; PmcCtrlReg = PMC_REGR(hPwm->VirtualAddress[OutputId-1], APBDEV_PMC_CNTRL_0); |