| /* |
| * Copyright (C) 2018 Synaptics Incorporated. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * INFORMATION CONTAINED IN THIS DOCUMENT IS PROVIDED "AS-IS," AND |
| * SYNAPTICS EXPRESSLY DISCLAIMS ALL EXPRESS AND IMPLIED WARRANTIES, |
| * INCLUDING ANY IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE, AND ANY WARRANTIES OF NON-INFRINGEMENT OF ANY |
| * INTELLECTUAL PROPERTY RIGHTS. IN NO EVENT SHALL SYNAPTICS BE LIABLE |
| * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, PUNITIVE, OR |
| * CONSEQUENTIAL DAMAGES ARISING OUT OF OR IN CONNECTION WITH THE USE |
| * OF THE INFORMATION CONTAINED IN THIS DOCUMENT, HOWEVER CAUSED AND |
| * BASED ON ANY THEORY OF LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
| * NEGLIGENCE OR OTHER TORTIOUS ACTION, AND EVEN IF SYNAPTICS WAS |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. IF A TRIBUNAL OF |
| * COMPETENT JURISDICTION DOES NOT PERMIT THE DISCLAIMER OF DIRECT |
| * DAMAGES OR ANY OTHER DAMAGES, SYNAPTICS' TOTAL CUMULATIVE LIABILITY |
| * TO ANY PARTY SHALL NOT EXCEED ONE HUNDRED U.S. DOLLARS. |
| */ |
| |
| #include <memmap.h> |
| #include <global.h> |
| #include "io.h" |
| #include "pwm_driver.h" |
| #include "galois_speed.h" |
| |
| #define PWM_CHANNEL 2 |
| |
| struct duty_volt { |
| int duty; |
| int volt; |
| }; |
| |
| static struct duty_volt dv_table[] = |
| { |
| {25, 1025}, |
| {50, 1000}, |
| {63, 975}, |
| {80, 950}, |
| {-1, -1}, |
| }; |
| |
| |
| int pwm(int volt) |
| { |
| int pwm_freq; |
| struct duty_volt *p; |
| PWM_SETTINGS pwm_setting ; |
| |
| pwm_setting.En = 1; |
| pwm_setting.PreScale = 1 ; |
| pwm_setting.Polarity = 0 ; |
| p = dv_table; |
| while(p->duty != -1) { |
| if(p->volt == volt) |
| break; |
| p++; |
| } |
| if(p->duty == -1) |
| return -1; |
| pwm_freq = GaloisGetFrequency(SOC_FREQ_CFG); |
| pwm_setting.Duty = pwm_freq*p->duty/100; |
| pwm_setting.Tcnt= pwm_freq; |
| |
| pwm_write_settings(PWM_CHANNEL, &pwm_setting) ; |
| pwm_on_off(PWM_CHANNEL, &pwm_setting, 1) ; |
| |
| return 0; |
| } |