vrc4172pwm.c revision 1.7 1 1.7 sato /* $Id: vrc4172pwm.c,v 1.7 2001/02/26 09:33:03 sato Exp $ */
2 1.1 sato
3 1.1 sato /*
4 1.1 sato * Copyright (c) 2000 SATO Kazumi. All rights reserved.
5 1.1 sato *
6 1.1 sato * Redistribution and use in source and binary forms, with or without
7 1.1 sato * modification, are permitted provided that the following conditions
8 1.1 sato * are met:
9 1.1 sato * 1. Redistributions of source code must retain the above copyright
10 1.1 sato * notice, this list of conditions and the following disclaimer.
11 1.1 sato * 2. Redistributions in binary form must reproduce the above copyright
12 1.1 sato * notice, this list of conditions and the following disclaimer in the
13 1.1 sato * documentation and/or other materials provided with the distribution.
14 1.1 sato *
15 1.1 sato * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16 1.1 sato * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 1.1 sato * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18 1.1 sato * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19 1.1 sato * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20 1.1 sato * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21 1.1 sato * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22 1.1 sato * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 1.1 sato * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24 1.1 sato * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25 1.1 sato * SUCH DAMAGE.
26 1.1 sato */
27 1.1 sato
28 1.1 sato #include <sys/param.h>
29 1.1 sato #include <sys/systm.h>
30 1.1 sato #include <sys/device.h>
31 1.1 sato #include <sys/reboot.h>
32 1.1 sato
33 1.1 sato #include <machine/bus.h>
34 1.1 sato #include <machine/config_hook.h>
35 1.1 sato #include <machine/platid.h>
36 1.3 sato #include <machine/platid_mask.h>
37 1.1 sato
38 1.3 sato #include <hpcmips/vr/vr.h>
39 1.3 sato #include <hpcmips/vr/vripvar.h>
40 1.1 sato #include <hpcmips/vr/vrc4172pwmvar.h>
41 1.1 sato #include <hpcmips/vr/vrc4172pwmreg.h>
42 1.1 sato
43 1.3 sato #include "locators.h"
44 1.1 sato
45 1.1 sato #ifdef VRC2PWMDEBUG
46 1.1 sato #ifndef VRC2PWMDEBUG_CONF
47 1.1 sato #define VRC2PWMDEBUG_CONF 0
48 1.1 sato #endif /* VRC2PWMDEBUG_CONF */
49 1.1 sato int vrc4172pwmdebug = VRC2PWMDEBUG_CONF;
50 1.1 sato #define DPRINTF(arg) if (vrc4172pwmdebug) printf arg;
51 1.1 sato #define VPRINTF(arg) if (bootverbose||vrc4172pwmdebug) printf arg;
52 1.3 sato #define VDUMPREG(arg) if (bootverbose||vrc4172pwmdebug) vrc4172pwm_dumpreg(arg);
53 1.1 sato #else /* VRC2PWMDEBUG */
54 1.1 sato #define DPRINTF(arg)
55 1.1 sato #define VPRINTF(arg) if (bootverbose) printf arg;
56 1.3 sato #define VDUMPREG(arg) if (bootverbose) vrc4172pwm_dumpreg(arg);
57 1.1 sato #endif /* VRC2PWMDEBUG */
58 1.1 sato
59 1.3 sato static int vrc4172pwmprobe __P((struct device *, struct cfdata *, void *));
60 1.1 sato static void vrc4172pwmattach __P((struct device *, struct device *, void *));
61 1.1 sato
62 1.1 sato static void vrc4172pwm_write __P((struct vrc4172pwm_softc *, int, unsigned short));
63 1.1 sato static unsigned short vrc4172pwm_read __P((struct vrc4172pwm_softc *, int));
64 1.1 sato
65 1.1 sato static int vrc4172pwm_event __P((void *, int, long, void *));
66 1.1 sato static int vrc4172pwm_pmevent __P((void *, int, long, void *));
67 1.1 sato
68 1.1 sato static void vrc4172pwm_dumpreg __P((struct vrc4172pwm_softc *));
69 1.3 sato static void vrc4172pwm_init_brightness __P((struct vrc4172pwm_softc *));
70 1.3 sato void vrc4172pwm_light __P((struct vrc4172pwm_softc *, int));
71 1.3 sato int vrc4172pwm_get_light __P((struct vrc4172pwm_softc *));
72 1.3 sato int vrc4172pwm_get_brightness __P((struct vrc4172pwm_softc *));
73 1.3 sato void vrc4172pwm_set_brightness __P((struct vrc4172pwm_softc *, int));
74 1.3 sato int vrc4172pwm_rawduty2brightness __P((struct vrc4172pwm_softc *));
75 1.3 sato int vrc4172pwm_brightness2rawduty __P((struct vrc4172pwm_softc *));
76 1.3 sato struct vrc4172pwm_param * vrc4172pwm_getparam __P((void));
77 1.3 sato void vrc4172pwm_dumpreg __P((struct vrc4172pwm_softc *));
78 1.1 sato
79 1.3 sato struct cfattach vrc4172pwm_ca = {
80 1.3 sato sizeof(struct vrc4172pwm_softc), vrc4172pwmprobe, vrc4172pwmattach
81 1.3 sato };
82 1.3 sato
83 1.3 sato /*
84 1.3 sato * platform related parameters
85 1.3 sato */
86 1.3 sato struct vrc4172pwm_param vrc4172pwm_mcr530_param = {
87 1.3 sato 8,
88 1.3 sato { 0x16, 0x1b, 0x20, 0x25, 0x2a, 0x30, 0x37, 0x3f }
89 1.3 sato };
90 1.1 sato
91 1.4 sato struct platid_data vrc4172pwm_platid_param_table[] = {
92 1.5 sato { &platid_mask_MACH_NEC_MCR_430,
93 1.5 sato &vrc4172pwm_mcr530_param},
94 1.5 sato { &platid_mask_MACH_NEC_MCR_530,
95 1.5 sato &vrc4172pwm_mcr530_param},
96 1.3 sato { &platid_mask_MACH_NEC_MCR_530A,
97 1.3 sato &vrc4172pwm_mcr530_param},
98 1.3 sato { &platid_mask_MACH_NEC_MCR_SIGMARION,
99 1.3 sato &vrc4172pwm_mcr530_param},
100 1.3 sato { NULL, NULL}
101 1.1 sato };
102 1.1 sato
103 1.1 sato struct vrc4172pwm_softc *this_pwm;
104 1.1 sato
105 1.1 sato static inline void
106 1.1 sato vrc4172pwm_write(sc, port, val)
107 1.1 sato struct vrc4172pwm_softc *sc;
108 1.1 sato int port;
109 1.1 sato unsigned short val;
110 1.1 sato {
111 1.1 sato bus_space_write_2(sc->sc_iot, sc->sc_ioh, port, val);
112 1.1 sato }
113 1.1 sato
114 1.1 sato static inline unsigned short
115 1.1 sato vrc4172pwm_read(sc, port)
116 1.1 sato struct vrc4172pwm_softc *sc;
117 1.1 sato int port;
118 1.1 sato {
119 1.1 sato return bus_space_read_2(sc->sc_iot, sc->sc_ioh, port);
120 1.1 sato }
121 1.1 sato
122 1.1 sato static int
123 1.3 sato vrc4172pwmprobe(parent, cf, aux)
124 1.1 sato struct device *parent;
125 1.1 sato struct cfdata *cf;
126 1.1 sato void *aux;
127 1.1 sato {
128 1.3 sato platid_mask_t mask;
129 1.3 sato struct vrip_attach_args *va = aux;
130 1.3 sato bus_space_handle_t ioh;
131 1.3 sato int data;
132 1.3 sato int ret = 0;
133 1.3 sato
134 1.3 sato if (va->va_addr == VRIPCF_ADDR_DEFAULT)
135 1.3 sato return 0;
136 1.3 sato
137 1.5 sato if (cf->cf_loc[VRIPCF_PLATFORM] == 0)
138 1.3 sato return 0;
139 1.5 sato if (cf->cf_loc[VRIPCF_PLATFORM] != -1) { /* if specify */
140 1.5 sato mask = PLATID_DEREF(cf->cf_loc[VRIPCF_PLATFORM]);
141 1.5 sato DPRINTF(("vrc4172pwmprobe: check platid\n"));
142 1.3 sato if (platid_match(&platid, &mask) == 0)
143 1.3 sato return 0;
144 1.3 sato }
145 1.3 sato if (bus_space_map(va->va_iot, va->va_addr, va->va_size, 0, &ioh)) {
146 1.3 sato return 0;
147 1.3 sato }
148 1.3 sato data = bus_space_read_2(va->va_iot, ioh, VRC2_PWM_LCDDUTYEN);
149 1.3 sato bus_space_write_2(va->va_iot, ioh, VRC2_PWM_LCDDUTYEN, 0xff);
150 1.3 sato if (bus_space_read_2(va->va_iot, ioh, VRC2_PWM_LCDDUTYEN)
151 1.3 sato == VRC2_PWM_LCDEN_MASK) {
152 1.5 sato DPRINTF(("vrc4172pwmprobe: VRC2_PWM_LCDDUTYEN found\n"));
153 1.3 sato ret = 1;
154 1.3 sato }
155 1.3 sato bus_space_write_2(va->va_iot, ioh, VRC2_PWM_LCDDUTYEN, data);
156 1.3 sato bus_space_unmap(va->va_iot, ioh, va->va_size);
157 1.3 sato
158 1.5 sato DPRINTF(("vrc4172pwmprobe: return %d\n", ret));
159 1.3 sato return ret;
160 1.1 sato }
161 1.1 sato
162 1.1 sato static void
163 1.1 sato vrc4172pwmattach(parent, self, aux)
164 1.1 sato struct device *parent;
165 1.1 sato struct device *self;
166 1.1 sato void *aux;
167 1.1 sato {
168 1.1 sato struct vrc4172pwm_softc *sc = (struct vrc4172pwm_softc *)self;
169 1.1 sato struct vrip_attach_args *va = aux;
170 1.1 sato
171 1.1 sato bus_space_tag_t iot = va->va_iot;
172 1.1 sato bus_space_handle_t ioh;
173 1.1 sato
174 1.1 sato if (bus_space_map(iot, va->va_addr, 1, 0, &ioh)) {
175 1.1 sato printf(": can't map bus space\n");
176 1.1 sato return;
177 1.1 sato }
178 1.1 sato
179 1.1 sato sc->sc_iot = iot;
180 1.1 sato sc->sc_ioh = ioh;
181 1.1 sato
182 1.1 sato printf("\n");
183 1.1 sato
184 1.1 sato VDUMPREG(sc);
185 1.1 sato /* basic setup */
186 1.1 sato sc->sc_pmhook = config_hook(CONFIG_HOOK_PMEVENT,
187 1.3 sato CONFIG_HOOK_PMEVENT_HARDPOWER,
188 1.1 sato CONFIG_HOOK_SHARE,
189 1.1 sato vrc4172pwm_pmevent, sc);
190 1.3 sato sc->sc_lcdhook = config_hook(CONFIG_HOOK_POWERCONTROL,
191 1.3 sato CONFIG_HOOK_POWERCONTROL_LCDLIGHT,
192 1.3 sato CONFIG_HOOK_SHARE,
193 1.3 sato vrc4172pwm_event, sc);
194 1.3 sato sc->sc_getlcdhook = config_hook(CONFIG_HOOK_GET,
195 1.3 sato CONFIG_HOOK_POWER_LCDLIGHT,
196 1.1 sato CONFIG_HOOK_SHARE,
197 1.1 sato vrc4172pwm_event, sc);
198 1.1 sato sc->sc_sethook = config_hook(CONFIG_HOOK_SET,
199 1.3 sato CONFIG_HOOK_BRIGHTNESS,
200 1.1 sato CONFIG_HOOK_SHARE,
201 1.1 sato vrc4172pwm_event, sc);
202 1.1 sato sc->sc_gethook = config_hook(CONFIG_HOOK_GET,
203 1.3 sato CONFIG_HOOK_BRIGHTNESS,
204 1.3 sato CONFIG_HOOK_SHARE,
205 1.3 sato vrc4172pwm_event, sc);
206 1.3 sato sc->sc_getmaxhook = config_hook(CONFIG_HOOK_GET,
207 1.3 sato CONFIG_HOOK_BRIGHTNESS_MAX,
208 1.1 sato CONFIG_HOOK_SHARE,
209 1.1 sato vrc4172pwm_event, sc);
210 1.1 sato
211 1.3 sato vrc4172pwm_init_brightness(sc);
212 1.1 sato this_pwm = sc;
213 1.1 sato }
214 1.1 sato
215 1.3 sato /*
216 1.3 sato * get platform related brightness paramerters
217 1.3 sato */
218 1.3 sato struct vrc4172pwm_param *
219 1.3 sato vrc4172pwm_getparam()
220 1.3 sato {
221 1.4 sato struct platid_data *p;
222 1.3 sato
223 1.4 sato if ((p = platid_search(&platid, vrc4172pwm_platid_param_table)))
224 1.4 sato return p->data;
225 1.3 sato return NULL;
226 1.3 sato }
227 1.3 sato
228 1.2 sato /*
229 1.2 sato *
230 1.2 sato * Initialize PWM brightness parameters
231 1.2 sato *
232 1.2 sato */
233 1.2 sato void
234 1.2 sato vrc4172pwm_init_brightness(sc)
235 1.3 sato struct vrc4172pwm_softc *sc;
236 1.2 sato {
237 1.3 sato sc->sc_param = vrc4172pwm_getparam();
238 1.2 sato sc->sc_raw_freq = vrc4172pwm_read(sc, VRC2_PWM_LCDFREQ);
239 1.2 sato sc->sc_raw_duty = vrc4172pwm_read(sc, VRC2_PWM_LCDDUTY);
240 1.3 sato sc->sc_brightness = vrc4172pwm_rawduty2brightness(sc);
241 1.5 sato DPRINTF(("vrc4172pwm_init_brightness: param=0x%x, freq=0x%x, duty=0x%x, blightness=%d\n", (int)sc->sc_param, sc->sc_raw_freq, sc->sc_raw_duty, sc->sc_brightness));
242 1.3 sato }
243 1.3 sato /*
244 1.3 sato * backlight on/off
245 1.3 sato */
246 1.3 sato void
247 1.3 sato vrc4172pwm_light(sc, on)
248 1.3 sato struct vrc4172pwm_softc *sc;
249 1.3 sato int on;
250 1.3 sato {
251 1.6 sato int brightness;
252 1.6 sato
253 1.5 sato DPRINTF(("vrc4172pwm_light: %s\n", on?"ON":"OFF"));
254 1.6 sato if (on) {
255 1.6 sato vrc4172pwm_set_brightness(sc, sc->sc_brightness);
256 1.3 sato vrc4172pwm_write(sc, VRC2_PWM_LCDDUTYEN, VRC2_PWM_LCD_EN);
257 1.6 sato } else {
258 1.6 sato brightness = sc->sc_brightness; /* save */
259 1.6 sato vrc4172pwm_set_brightness(sc, 0);
260 1.6 sato /* need this, break sc->sc_brightness */
261 1.6 sato sc->sc_brightness = brightness; /* resume */
262 1.3 sato vrc4172pwm_write(sc, VRC2_PWM_LCDDUTYEN, VRC2_PWM_LCD_DIS);
263 1.6 sato }
264 1.3 sato }
265 1.3 sato
266 1.3 sato /*
267 1.3 sato * get backlight on/off
268 1.3 sato */
269 1.3 sato inline int
270 1.3 sato vrc4172pwm_get_light(sc)
271 1.3 sato struct vrc4172pwm_softc *sc;
272 1.3 sato {
273 1.5 sato return vrc4172pwm_read(sc, VRC2_PWM_LCDDUTYEN);
274 1.3 sato }
275 1.3 sato
276 1.3 sato /*
277 1.3 sato * set brightness
278 1.3 sato */
279 1.3 sato void
280 1.3 sato vrc4172pwm_set_brightness(sc, val)
281 1.3 sato struct vrc4172pwm_softc *sc;
282 1.3 sato int val;
283 1.3 sato {
284 1.3 sato int raw;
285 1.3 sato
286 1.3 sato if (sc->sc_param == NULL)
287 1.3 sato return;
288 1.5 sato if (val < 0)
289 1.5 sato val = 0;
290 1.3 sato if (val > VRC2_PWM_MAX_BRIGHTNESS)
291 1.3 sato val = VRC2_PWM_MAX_BRIGHTNESS;
292 1.3 sato if (val > sc->sc_param->n_brightness)
293 1.3 sato val = sc->sc_param->n_brightness;
294 1.3 sato sc->sc_brightness = val;
295 1.3 sato raw = vrc4172pwm_brightness2rawduty(sc);
296 1.3 sato vrc4172pwm_write(sc, VRC2_PWM_LCDDUTY, raw);
297 1.5 sato DPRINTF(("vrc4172pwm_set_brightness: val=%d raw=0x%x\n", val, raw));
298 1.3 sato }
299 1.3 sato
300 1.3 sato /*
301 1.3 sato * get brightness
302 1.3 sato */
303 1.3 sato int
304 1.3 sato vrc4172pwm_get_brightness(sc)
305 1.3 sato struct vrc4172pwm_softc *sc;
306 1.3 sato {
307 1.3 sato if (sc->sc_param == NULL)
308 1.3 sato return VRC2_PWM_MAX_BRIGHTNESS;
309 1.3 sato return sc->sc_brightness;
310 1.3 sato }
311 1.3 sato
312 1.3 sato /*
313 1.3 sato * PWM duty to brightness
314 1.3 sato */
315 1.3 sato int
316 1.3 sato vrc4172pwm_rawduty2brightness(sc)
317 1.3 sato struct vrc4172pwm_softc *sc;
318 1.3 sato {
319 1.3 sato int i;
320 1.3 sato
321 1.3 sato if (sc->sc_param == NULL)
322 1.5 sato return VRC2_PWM_MAX_BRIGHTNESS;
323 1.3 sato for (i = 0; i < sc->sc_param->n_brightness; i++) {
324 1.3 sato if (sc->sc_raw_duty <= sc->sc_param->values[i])
325 1.3 sato break;
326 1.3 sato }
327 1.3 sato if (i >= sc->sc_param->n_brightness-1)
328 1.3 sato return sc->sc_param->n_brightness-1;
329 1.3 sato else
330 1.3 sato return i;
331 1.3 sato
332 1.3 sato }
333 1.3 sato
334 1.3 sato /*
335 1.3 sato * brightness to raw duty
336 1.3 sato */
337 1.3 sato int
338 1.3 sato vrc4172pwm_brightness2rawduty(sc)
339 1.3 sato struct vrc4172pwm_softc *sc;
340 1.3 sato {
341 1.3 sato if (sc->sc_param == NULL)
342 1.5 sato return VRC2_PWM_LCDDUTY_MASK;
343 1.3 sato return sc->sc_param->values[sc->sc_brightness];
344 1.2 sato }
345 1.1 sato
346 1.3 sato
347 1.1 sato /*
348 1.1 sato * PWM config hook events
349 1.1 sato *
350 1.1 sato */
351 1.1 sato int
352 1.1 sato vrc4172pwm_event(ctx, type, id, msg)
353 1.1 sato void *ctx;
354 1.1 sato int type;
355 1.1 sato long id;
356 1.1 sato void *msg;
357 1.1 sato {
358 1.1 sato struct vrc4172pwm_softc *sc = (struct vrc4172pwm_softc *)ctx;
359 1.1 sato int why =(int)msg;
360 1.1 sato
361 1.1 sato if (type == CONFIG_HOOK_POWERCONTROL
362 1.1 sato && id == CONFIG_HOOK_POWERCONTROL_LCDLIGHT) {
363 1.7 sato DPRINTF(("vrc4172pwm:POWERCONTROL_LCDLIGHT: %d\n", why));
364 1.2 sato vrc4172pwm_light(sc, why);
365 1.1 sato } else if (type == CONFIG_HOOK_GET
366 1.3 sato && id == CONFIG_HOOK_POWER_LCDLIGHT) {
367 1.3 sato *(int *)msg = vrc4172pwm_get_light(sc);
368 1.7 sato DPRINTF(("vrc4172pwm:GET LCDLIGHT: %d\n", *(int *)msg));
369 1.3 sato } else if (type == CONFIG_HOOK_GET
370 1.3 sato && id == CONFIG_HOOK_BRIGHTNESS) {
371 1.3 sato *(int *)msg = vrc4172pwm_get_brightness(sc);
372 1.7 sato DPRINTF(("vrc4172pwm:GET BRIGHTNESS: %d\n", *(int *)msg));
373 1.3 sato } else if (type == CONFIG_HOOK_GET
374 1.3 sato && id == CONFIG_HOOK_BRIGHTNESS_MAX) {
375 1.3 sato if (sc->sc_param == NULL)
376 1.3 sato *(int *)msg = VRC2_PWM_MAX_BRIGHTNESS;
377 1.3 sato else
378 1.3 sato *(int *)msg = sc->sc_param->n_brightness-1;
379 1.7 sato DPRINTF(("vrc4172pwm:GET MAX BRIGHTNESS: %d\n", *(int *)msg));
380 1.1 sato } else if (type == CONFIG_HOOK_SET
381 1.3 sato && id == CONFIG_HOOK_BRIGHTNESS) {
382 1.7 sato DPRINTF(("vrc4172pwm:SET BRIGHTNESS: %d\n", *(int *)msg));
383 1.3 sato vrc4172pwm_set_brightness(sc, *(int *)msg);
384 1.6 sato } else {
385 1.7 sato DPRINTF(("vrc4172pwm:unknown event: type %d id %ld\n", type, id));
386 1.1 sato return 1;
387 1.6 sato }
388 1.1 sato
389 1.1 sato return (0);
390 1.1 sato }
391 1.1 sato
392 1.1 sato
393 1.1 sato /*
394 1.1 sato * PWM config hook events
395 1.1 sato *
396 1.1 sato */
397 1.1 sato int
398 1.1 sato vrc4172pwm_pmevent(ctx, type, id, msg)
399 1.1 sato void *ctx;
400 1.1 sato int type;
401 1.1 sato long id;
402 1.1 sato void *msg;
403 1.1 sato {
404 1.1 sato struct vrc4172pwm_softc *sc = (struct vrc4172pwm_softc *)ctx;
405 1.1 sato int why =(int)msg;
406 1.1 sato
407 1.1 sato if (type != CONFIG_HOOK_PMEVENT)
408 1.1 sato return 1;
409 1.1 sato
410 1.1 sato switch (why) {
411 1.3 sato case PWR_STANDBY:
412 1.2 sato case PWR_SUSPEND:
413 1.2 sato vrc4172pwm_light(sc, 0);
414 1.2 sato break;
415 1.2 sato case PWR_RESUME:
416 1.2 sato vrc4172pwm_light(sc, 1);
417 1.2 sato break;
418 1.2 sato default:
419 1.2 sato return 1;
420 1.1 sato }
421 1.2 sato
422 1.1 sato return (0);
423 1.2 sato }
424 1.2 sato
425 1.2 sato /*
426 1.1 sato * dump pwm registers
427 1.1 sato */
428 1.1 sato void
429 1.1 sato vrc4172pwm_dumpreg(sc)
430 1.1 sato struct vrc4172pwm_softc *sc;
431 1.1 sato {
432 1.1 sato int en, freq, duty;
433 1.1 sato
434 1.1 sato en = vrc4172pwm_read(sc, VRC2_PWM_LCDDUTYEN);
435 1.1 sato freq = vrc4172pwm_read(sc, VRC2_PWM_LCDFREQ);
436 1.1 sato duty = vrc4172pwm_read(sc, VRC2_PWM_LCDDUTY);
437 1.1 sato
438 1.5 sato printf("vrc4172pwm: dumpreg: lightenable = %d, freq = 0x%x, duty = 0x%x\n",
439 1.1 sato en, freq, duty);
440 1.1 sato }
441 1.2 sato
442 1.1 sato /* end */
443