1 #ifndef __EHRPWM_H__
2 #define __EHRPWM_H__
4 #include <linux/pwm/pwm.h>
6 #define NCHAN 2
8 struct ehrpwm_pwm;
10 typedef int (*p_fcallback) (struct ehrpwm_pwm *, void *data);
12 struct et_int {
13 void *data;
14 p_fcallback pcallback;
15 };
17 struct tz_int {
18 void *data;
19 p_fcallback pcallback;
20 };
22 struct ehrpwm_context {
23 u32 tbctl;
24 u32 tbprd;
25 u32 hrcfg;
26 u32 aqctla;
27 u32 aqctlb;
28 u32 cmpa;
29 u32 cmpb;
30 u32 tzctl;
31 u32 tzflg;
32 u32 tzclr;
33 u32 tzfrc;
34 };
36 struct ehrpwm_pwm {
37 struct pwm_device pwm[NCHAN];
38 struct pwm_device_ops ops;
39 spinlock_t lock;
40 struct clk *clk;
41 void __iomem *mmio_base;
42 unsigned short prescale_val;
43 int irq[2];
44 struct et_int st_etint;
45 struct tz_int st_tzint;
46 u8 version;
47 void __iomem *config_mem_base;
48 struct device *dev;
49 struct ehrpwm_context ctx;
50 };
52 enum tz_event {
53 TZ_ONE_SHOT_EVENT = 0,
54 TZ_CYCLE_BY_CYCLE,
55 TZ_OSHT_CBC,
56 TZ_DIS_EVT,
57 };
59 enum config_mask {
60 CONFIG_NS,
61 CONFIG_TICKS,
62 };
64 enum db_edge_delay {
65 RISING_EDGE_DELAY,
66 FALLING_EDGE_DELAY,
67 };
69 struct aq_config_params {
70 unsigned char ch;
71 unsigned char ctreqzro;
72 unsigned char ctreqprd;
73 unsigned char ctreqcmpaup;
74 unsigned char ctreqcmpadown;
75 unsigned char ctreqcmpbup;
76 unsigned char ctreqcmpbdown;
77 };
79 int ehrpwm_tb_set_prescalar_val(struct pwm_device *p, unsigned char
80 clkdiv, unsigned char hspclkdiv);
82 int ehrpwm_tb_config_sync(struct pwm_device *p, unsigned char phsen,
83 unsigned char syncosel);
85 int ehrpwm_tb_set_counter_mode(struct pwm_device *p, unsigned char
86 ctrmode, unsigned char phsdir);
88 int ehrpwm_tb_force_sync(struct pwm_device *p);
90 int ehrpwm_tb_set_periodload(struct pwm_device *p, unsigned char
91 loadmode);
93 int ehrpwm_tb_read_status(struct pwm_device *p, unsigned short *val);
95 int ehrpwm_tb_read_counter(struct pwm_device *p, unsigned short *val);
97 int ehrpwm_tb_set_period(struct pwm_device *p, unsigned short val);
99 int ehrpwm_tb_set_phase(struct pwm_device *p, unsigned short val);
101 int ehrpwm_cmp_set_cmp_ctl(struct pwm_device *p, unsigned char
102 shdwamode, unsigned char shdwbmode, unsigned char loadamode,
103 unsigned char loadbmode);
105 int ehrpwm_cmp_set_cmp_val(struct pwm_device *p, unsigned char reg,
106 unsigned short val);
108 int ehrpwm_aq_set_act_ctrl(struct pwm_device *p,
109 struct aq_config_params *cfg);
111 int ehrpwm_aq_set_one_shot_act(struct pwm_device *p, unsigned char ch,
112 unsigned char act);
114 int ehrpwm_aq_ot_frc(struct pwm_device *p, unsigned char ch);
116 int ehrpwm_aq_set_csfrc_load_mode(struct pwm_device *p, unsigned char
117 loadmode);
119 int ehrpwm_aq_continuous_frc(struct pwm_device *p, unsigned char ch,
120 unsigned char act);
122 int ehrpwm_db_get_max_delay(struct pwm_device *p,
123 enum config_mask cfgmask, unsigned long *delay_val);
125 int ehrpwm_db_get_delay(struct pwm_device *p, unsigned char edge,
126 enum config_mask cfgmask, unsigned long *delay_val);
128 int ehrpwm_db_set_delay(struct pwm_device *p, unsigned char edge,
129 enum config_mask cfgmask, unsigned long delay);
131 int ehrpwm_db_set_mode(struct pwm_device *p, unsigned char inmode,
132 unsigned char polsel, unsigned char outmode);
134 int ehrpwm_pc_configure(struct pwm_device *p, unsigned char chpduty,
135 unsigned char chpfreq, unsigned char oshtwidth);
137 int ehrpwm_pc_en_dis(struct pwm_device *p, unsigned char chpen);
139 int ehrpwm_tz_sel_event(struct pwm_device *p, unsigned char input,
140 enum tz_event evt);
142 int ehrpwm_tz_set_action(struct pwm_device *p, unsigned char ch,
143 unsigned char act);
145 int ehrpwm_tz_set_int_en_dis(struct pwm_device *p, enum tz_event event,
146 unsigned char int_en_dis);
148 int ehrpwm_tz_force_evt(struct pwm_device *p, enum tz_event event);
150 int ehrpwm_tz_read_status(struct pwm_device *p, unsigned short *status);
152 int ehrpwm_tz_clr_evt_status(struct pwm_device *p);
154 int ehrpwm_tz_clr_int_status(struct pwm_device *p);
156 int ehrpwm_et_set_sel_evt(struct pwm_device *p, unsigned char evt,
157 unsigned char prd);
159 int ehrpwm_et_int_en_dis(struct pwm_device *p, unsigned char en_dis);
161 int ehrpwm_et_read_evt_cnt(struct pwm_device *p, unsigned long *evtcnt);
163 int pwm_et_read_int_status(struct pwm_device *p,
164 unsigned long *status);
166 int ehrpwm_et_frc_int(struct pwm_device *p);
168 int ehrpwm_et_clr_int(struct pwm_device *p);
170 int ehrpwm_hr_set_phase(struct pwm_device *p, unsigned char val);
172 int ehrpwm_hr_set_cmpval(struct pwm_device *p, unsigned char val);
174 int ehrpwm_hr_config(struct pwm_device *p, unsigned char loadmode,
175 unsigned char ctlmode, unsigned char edgemode);
177 int ehrpwm_et_cb_register(struct pwm_device *p, void *data,
178 p_fcallback cb);
180 int ehrpwm_tz_cb_register(struct pwm_device *p, void *data,
181 p_fcallback cb);
183 int ehrpwm_pwm_suspend(struct pwm_device *p, enum
184 config_mask config_mask,
185 unsigned long val);
187 #define ENABLE 1
188 #define DISABLE 0
190 #endif