blob: 0deec35472695404d1d84a515cd41687d9f9ea43 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*
2 * zx234290-regulator.c -- regulator for ZX234290 PMICs
3 *
4 * Copyright 2016 ZTE Inc.
5 *
6 * Author: yuxiang<yu.xiang5@zte.com.cn>
7 *
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
12 *
13 */
14#include<linux/mutex.h>
15#include <linux/errno.h>
16#include <linux/module.h>
17#include <linux/moduleparam.h>
18#include <linux/init.h>
19#include <linux/slab.h>
20#include <linux/gpio.h>
21#include <linux/i2c.h>
22#include <linux/mfd/core.h>
23#include <linux/mfd/zx234290.h>
24#include <linux/irq.h>
25#include <linux/interrupt.h>
26
27/* 0 for zx234296, 297 for zx234297 */
28 int pmu_chip_ver = 0;
29
30static int zx234290_regulator_write_register(unsigned char addr, unsigned char data, unsigned char mask)
31{
32 int ret = 0;
33 unsigned int content =0;
34
35 ret = zx234290_i2c_read_simple(addr, &content);
36 if (ret < 0)
37 {
38 return -EIO;
39 }
40 content &= ~mask;
41 content |= data & mask;
42 ret = zx234290_i2c_write_simple(addr, &content);
43 if (ret != 0)
44 {
45 return ret;
46 }
47
48 return ret;
49}
50
51int zx234290_regulator_write_register_PSM(unsigned char addr, unsigned char data, unsigned char mask)
52{
53 int ret = 0;
54 unsigned int content =0;
55// printk("reg = %x, origin data = %x, mask = %x\n", addr, data, mask);
56 ret = zx234290_i2c_read_simple_PSM(addr, &content);
57 if (ret < 0)
58 {
59 return -EIO;
60 }
61// printk("read content = %x\n", content);
62 content &= ~mask;
63 content |= data & mask;
64// printk("infact data = %x\n", content);
65 ret = zx234290_i2c_write_simple_PSM(addr, &content);
66 if (ret != 0)
67 {
68 return ret;
69 }
70
71 content = 0;
72 zx234290_i2c_read_simple_PSM(addr, &content);
73// printk("after write content = %x\n", content);
74
75 return ret;
76}
77
78static int zx234290_regulator_read_register(unsigned char reg, unsigned char *dest)
79{
80 int ret = 0;
81 unsigned int content =0;
82
83 ret = zx234290_i2c_read_simple(reg, &content);
84 if (!ret)
85 *dest = content;
86
87 return ret;
88}
89static int zx234290_regulator_read_register_PSM(unsigned char reg, unsigned char *dest)
90{
91 int ret = 0;
92 unsigned int content =0;
93
94 ret = zx234290_i2c_read_simple_PSM(reg, &content);
95 if (!ret)
96 *dest = content;
97
98 return ret;
99}
100
101int zx234290_get_chip_version(void)
102{
103 int ret;
104 unsigned char reg_addr=0, reg_val=0;
105
106 reg_addr = ZX234297_REG_ADDR_SINK_CONTROL;
107 ret = zx234290_regulator_read_register(reg_addr, &reg_val);
108 if (ret) {
109 return ret;
110 } else if (reg_val == 0xFF) {
111 pmu_chip_ver = 0;
112 return 296;
113 } else {
114 pr_info("recognize zx234297, [0x29] = %#X", reg_val);
115 pmu_chip_ver = 297;
116 return 297;
117 }
118}
119
120#if 1 /* buck1 */
121/*******************************************************************************
122 * Function:
123 * Description:
124 * Parameters:
125 * Input:
126 *
127 * Output:
128 *
129 * Returns:
130 *
131 *
132 * Others:
133 ********************************************************************************/
134int zx234290_set_buck1_onoff(T_ZDrvZx234290_LDO_ENABLE status)
135{
136 int ret = 0;
137 unsigned char reg_addr=0, reg_val=0, mask=0;
138
139 if(status > LDO_AVTICE_MAX)
140 {
141 return -EINVAL;
142 }
143
144 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
145
146 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK1_ON_LSH);
147 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_BUCK1_ON_LSH);
148
149 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
150 if (ret != 0)
151 {
152 return -EIO;
153 }
154
155 return 0;
156}
157
158T_ZDrvZx234290_LDO_ENABLE zx234290_get_buck1_onoff(void)
159{
160 unsigned char reg_addr=0, reg_val=0;
161 T_ZDrvZx234290_LDO_ENABLE status;
162
163 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
164 zx234290_regulator_read_register(reg_addr, &reg_val);
165
166 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_BUCK1_ON_LSH);
167
168 return status;
169}
170
171int zx234290_set_buck1_active_mode(T_ZDrvZx234290_BUCK_NRMMODE status)
172{
173 int ret = 0;
174 unsigned char reg_addr=0, reg_val=0, mask=0;
175
176 if(status > BUCK_NRMMODE_MAX)
177 {
178 return -EINVAL;
179 }
180
181 reg_addr = ZX234290_REG_ADDR_BUCK1_MODE;
182
183 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK1_NRMMODE_LSH);
184 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK1_NRMMODE_LSH);
185
186 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
187 if (ret != 0)
188 {
189 return -EIO;
190 }
191
192 return 0;
193}
194
195T_ZDrvZx234290_BUCK_NRMMODE zx234290_get_buck1_active_mode(void)
196{
197 unsigned char reg_addr=0, reg_val=0;
198 T_ZDrvZx234290_BUCK_NRMMODE status;
199
200 reg_addr = ZX234290_REG_ADDR_BUCK1_MODE;
201 zx234290_regulator_read_register(reg_addr, &reg_val);
202
203 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK1_NRMMODE_LSH);
204
205 return status;
206}
207
208int zx234290_set_buck1_voltage(T_ZDrvZx234290_VbuckA vol)
209{
210 int ret = 0;
211 unsigned char reg_addr=0, reg_val=0, mask=0;
212
213 if(vol > VBUCKA_MAX)
214 {
215 return -EINVAL;
216 }
217
218 reg_addr = ZX234290_REG_ADDR_BUCK1_VOL;
219
220 reg_val = ZX234290_BITFVAL(vol, ZX234290_BUCK01_VSEL_LSH);
221 mask = ZX234290_BITFMASK(ZX234290_BUCK01_VSEL_WID, ZX234290_BUCK01_VSEL_LSH);
222
223 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
224 if (ret != 0)
225 {
226 return -EIO;
227 }
228
229 return 0;
230}
231
232
233T_ZDrvZx234290_VbuckA zx234290_get_buck1_voltage(void)
234{
235 unsigned char reg_addr=0, reg_val=0;
236 T_ZDrvZx234290_VbuckA vol;
237
238 reg_addr = ZX234290_REG_ADDR_BUCK1_VOL;
239 zx234290_regulator_read_register(reg_addr, &reg_val);
240
241 vol = ZX234290_BITFEXT(reg_val, ZX234290_BUCK01_VSEL_WID, ZX234290_BUCK01_VSEL_LSH);
242
243 return vol;
244}
245
246int zx234290_set_buck1_sleep_mode(T_ZDrvZx234290_BUCK1_SLPMODE status)
247{
248 int ret = 0;
249 unsigned char reg_addr=0, reg_val=0, mask=0;
250
251 if(status > BUCK1_SLPMODE_MAX)
252 {
253 return -EINVAL;
254 }
255
256 reg_addr = ZX234290_REG_ADDR_BUCK1_MODE;
257
258 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK1_SLPMODE_LSH);
259 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK1_SLPMODE_LSH);
260 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
261
262 if (ret != 0)
263 {
264 return -EIO;
265 }
266
267 return 0;
268}
269
270T_ZDrvZx234290_BUCK1_SLPMODE zx234290_get_buck1_sleep_mode(void)
271{
272 unsigned char reg_addr=0, reg_val=0;
273 T_ZDrvZx234290_BUCK1_SLPMODE status = 0;
274
275 reg_addr = ZX234290_REG_ADDR_BUCK1_MODE;
276
277 zx234290_regulator_read_register(reg_addr, &reg_val);
278 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK1_SLPMODE_LSH);
279
280 return status;
281}
282
283int zx234290_set_buck1_sleep_voltage(T_ZDrvZx234290_VbuckA vol)
284{
285 int ret = 0;
286 unsigned char reg_addr=0, reg_val=0, mask=0;
287
288 if(vol > VBUCKA_MAX)
289 {
290 return -EINVAL;
291 }
292
293 reg_addr = ZX234290_REG_ADDR_BUCK1_SLPVOL;
294
295 reg_val = ZX234290_BITFVAL(vol, ZX234290_BUCK01_SLEEP_VSEL_LSH);
296 mask = ZX234290_BITFMASK(ZX234290_BUCK01_SLEEP_VSEL_WID, ZX234290_BUCK01_SLEEP_VSEL_LSH);
297
298 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
299 if (ret != 0)
300 {
301 return -EIO;
302 }
303
304 return 0;
305}
306
307#endif
308#if 1 /* buck2 add*/
309int zx234290_set_buck2_onoff(T_ZDrvZx234290_LDO_ENABLE status)
310{
311 int ret = 0;
312 unsigned char reg_addr=0, reg_val=0, mask=0;
313
314 if(status > LDO_AVTICE_MAX)
315 {
316 return -EINVAL;
317 }
318
319 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
320
321 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK2_ON_LSH);
322 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_BUCK2_ON_LSH);
323
324 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
325 if (ret != 0)
326 {
327 return -EIO;
328 }
329
330 return 0;
331}
332
333T_ZDrvZx234290_LDO_ENABLE zx234290_get_buck2_onoff(void)
334{
335 unsigned char reg_addr=0, reg_val=0;
336 T_ZDrvZx234290_LDO_ENABLE status;
337
338 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
339 zx234290_regulator_read_register(reg_addr, &reg_val);
340
341 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_BUCK2_ON_LSH);
342
343 return status;
344}
345
346int zx234290_set_buck2_active_mode(T_ZDrvZx234290_BUCK_NRMMODE status)
347{
348 int ret = 0;
349 unsigned char reg_addr=0, reg_val=0, mask=0;
350
351 if(status > BUCK_NRMMODE_MAX)
352 {
353 return -EINVAL;
354 }
355
356 reg_addr = ZX234290_REG_ADDR_BUCK23_MODE;
357
358 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK2_NRMMODE_LSH);
359 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK2_NRMMODE_LSH);
360
361 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
362 if (ret != 0)
363 {
364 return -EIO;
365 }
366
367 return 0;
368}
369
370T_ZDrvZx234290_BUCK_NRMMODE zx234290_get_buck2_active_mode(void)
371{
372 unsigned char reg_addr=0, reg_val=0;
373 T_ZDrvZx234290_BUCK_NRMMODE status;
374
375 reg_addr = ZX234290_REG_ADDR_BUCK23_MODE;
376 zx234290_regulator_read_register(reg_addr, &reg_val);
377
378 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK2_NRMMODE_LSH);
379
380 return status;
381}
382
383int zx234290_set_buck2_voltage(T_ZDrvZx234290_VbuckC vol)
384{
385 int ret = 0;
386 unsigned char reg_addr=0, reg_val=0, mask=0;
387
388 if(vol > VBUCKC_MAX)
389 {
390 return -EINVAL;
391 }
392 reg_addr = ZX234290_REG_ADDR_BUCK2_VOL;
393
394 reg_val = ZX234290_BITFVAL(vol, ZX234290_BUCK2_VSEL_LSH);
395
396 mask = ZX234290_BITFMASK(ZX234290_BUCK2_VSEL_WID, ZX234290_BUCK2_VSEL_LSH);
397
398 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
399 if (ret != 0)
400 {
401 return -EIO;
402 }
403
404 return 0;
405}
406
407T_ZDrvZx234290_VbuckC zx234290_get_buck2_voltage(void)
408{
409 unsigned char reg_addr=0, reg_val=0;
410 T_ZDrvZx234290_VbuckC vol;
411
412 reg_addr = ZX234290_REG_ADDR_BUCK2_VOL;
413 zx234290_regulator_read_register(reg_addr, &reg_val);
414
415 vol = ZX234290_BITFEXT(reg_val, ZX234290_BUCK2_VSEL_WID, ZX234290_BUCK2_VSEL_LSH);
416
417 return vol;
418}
419
420int zx234290_set_buck2_sleep_mode(T_ZDrvZx234290_BUCK234_SLPMODE status)
421{
422 int ret = 0;
423 unsigned char reg_addr=0, reg_val=0, mask=0;
424
425 if(status > BUCK234_SLPMODE_MAX)
426 {
427 return -EINVAL;
428 }
429
430 reg_addr = ZX234290_REG_ADDR_BUCK23_MODE;
431
432 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK2_SLPMODE_LSH);
433 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK2_SLPMODE_LSH);
434 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
435
436 if (ret != 0)
437 {
438 return -EIO;
439 }
440
441 return 0;
442}
443
444T_ZDrvZx234290_BUCK234_SLPMODE zx234290_get_buck2_sleep_mode(void)
445{
446 unsigned char reg_addr=0, reg_val=0;
447 T_ZDrvZx234290_BUCK234_SLPMODE status = 0;
448
449 reg_addr = ZX234290_REG_ADDR_BUCK23_MODE;
450
451 zx234290_regulator_read_register(reg_addr, &reg_val);
452 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK2_SLPMODE_LSH);
453
454 return status;
455}
456#endif
457#if 1 /* BUCK3/4µçѹ²»¿É¸Ä add*/
458int zx234290_set_buck3_onoff(T_ZDrvZx234290_LDO_ENABLE status)
459{
460 int ret = 0;
461 unsigned char reg_addr=0, reg_val=0, mask=0;
462
463 if(status > LDO_AVTICE_MAX)
464 {
465 return -EINVAL;
466 }
467
468 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
469
470 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK3_ON_LSH);
471 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_BUCK3_ON_LSH);
472
473 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
474 if (ret != 0)
475 {
476 return -EIO;
477 }
478 return 0;
479}
480
481int zx234290_set_buck3_active_mode(T_ZDrvZx234290_BUCK_NRMMODE status)
482{
483 int ret = 0;
484 unsigned char reg_addr=0, reg_val=0, mask=0;
485
486 if(status > BUCK_NRMMODE_MAX)
487 {
488 return -EINVAL;
489 }
490
491 reg_addr = ZX234290_REG_ADDR_BUCK23_MODE;
492
493 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK3_NRMMODE_LSH);
494 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK3_NRMMODE_LSH);
495
496 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
497 if (ret != 0)
498 {
499 return -EIO;
500 }
501
502 return 0;
503}
504
505
506int zx234290_set_buck3_sleep_mode(T_ZDrvZx234290_BUCK234_SLPMODE status)
507{
508 int ret = 0;
509 unsigned char reg_addr=0, reg_val=0, mask=0;
510
511 if(status > BUCK234_SLPMODE_MAX)
512 {
513 return -EINVAL;
514 }
515
516 reg_addr = ZX234290_REG_ADDR_BUCK23_MODE;
517
518 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK3_SLPMODE_LSH);
519 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK3_SLPMODE_LSH);
520 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
521
522 if (ret != 0)
523 {
524 return -EIO;
525 }
526
527 return 0;
528}
529
530#endif
531#if 1 /* buck4 add*/
532int zx234290_set_buck4_onoff(T_ZDrvZx234290_LDO_ENABLE status)
533{
534 int ret = 0;
535 unsigned char reg_addr=0, reg_val=0, mask=0;
536
537 if(status > LDO_AVTICE_MAX)
538 {
539 return -EINVAL;
540 }
541
542 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
543
544 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK4_ON_LSH);
545 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_BUCK4_ON_LSH);
546
547 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
548 if (ret != 0)
549 {
550 return -EIO;
551 }
552
553 return 0;
554}
555
556
557int zx234290_set_buck4_active_mode(T_ZDrvZx234290_BUCK_NRMMODE status)
558{
559 int ret = 0;
560 unsigned char reg_addr=0, reg_val=0, mask=0;
561
562 if(status > BUCK_NRMMODE_MAX)
563 {
564 return -EINVAL;
565 }
566
567 reg_addr = ZX234290_REG_ADDR_BUCK4_MODE;
568
569 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK4_NRMMODE_LSH);
570 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK4_NRMMODE_LSH);
571
572 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
573 if (ret != 0)
574 {
575 return -EIO;
576 }
577
578 return 0;
579}
580
581
582int zx234290_set_buck4_sleep_mode(T_ZDrvZx234290_BUCK234_SLPMODE status)
583{
584 int ret = 0;
585 unsigned char reg_addr=0, reg_val=0, mask=0;
586
587 if(status > BUCK234_SLPMODE_MAX)
588 {
589 return -EINVAL;
590 }
591
592 reg_addr = ZX234290_REG_ADDR_BUCK4_MODE;
593
594 reg_val = ZX234290_BITFVAL(status, ZX234290_BUCK4_SLPMODE_LSH);
595 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_BUCK4_SLPMODE_LSH);
596 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
597
598 if (ret != 0)
599 {
600 return -EIO;
601 }
602 return 0;
603}
604
605#endif
606
607
608#if 1
609int zx234290_set_ldo1_onoff(T_ZDrvZx234290_LDO_ENABLE status)
610{
611 int ret = 0;
612 unsigned char reg_addr=0, reg_val=0, mask=0;
613
614 if(status > LDO_AVTICE_MAX)
615 {
616 return -EINVAL;
617 }
618
619 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
620
621 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO1_ON_LSH);
622 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO1_ON_LSH);
623
624 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
625 if (ret != 0)
626 {
627 return -EIO;
628 }
629
630 return 0;
631}
632
633int zx234290_set_ldo1_onoff_PSM(T_ZDrvZx234290_LDO_ENABLE status)
634{
635 int ret = 0;
636 unsigned char reg_addr=0, reg_val=0, mask=0;
637
638 if(status > LDO_AVTICE_MAX)
639 {
640 return -EINVAL;
641 }
642
643 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
644
645 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO1_ON_LSH);
646 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO1_ON_LSH);
647
648 ret = zx234290_regulator_write_register_PSM(reg_addr, reg_val, mask);
649 if (ret != 0)
650 {
651 return -EIO;
652 }
653
654 return 0;
655}
656
657
658T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo1_onoff(void)
659{
660 unsigned char reg_addr=0, reg_val=0;
661 T_ZDrvZx234290_LDO_ENABLE status;
662
663 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
664 zx234290_regulator_read_register(reg_addr, &reg_val);
665
666 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO1_ON_LSH);
667
668 return status;
669}
670
671/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ LDO1/9/10 - LDOA */
672int zx234290_set_ldo1_voltage(T_ZDrvZx234290_VldoA vol)
673{
674 int ret = 0;
675 unsigned char reg_addr=0, reg_val=0, mask=0;
676
677 if(vol > VLDOA_MAX)
678 {
679 return -EINVAL;
680 }
681
682 reg_addr = ZX234290_REG_ADDR_LDO12_VOL;
683
684 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO1_VSEL_LSH);
685 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO1_VSEL_LSH);
686
687 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
688 if (ret != 0)
689 {
690 return -EIO;
691 }
692
693 return 0;
694}
695
696T_ZDrvZx234290_VldoA zx234290_get_ldo1_voltage(void)
697{
698 unsigned char reg_addr=0, reg_val=0;
699 T_ZDrvZx234290_VldoA vol;
700
701 reg_addr = ZX234290_REG_ADDR_LDO12_VOL;
702 zx234290_regulator_read_register(reg_addr, &reg_val);
703
704 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO1_VSEL_LSH);
705
706 return vol;
707}
708
709int zx234290_set_ldo1_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
710{
711 int ret = 0;
712 unsigned char reg_addr=0, reg_val=0, mask=0;
713
714 if(status > LDOA_SLPMODE_MAX)
715 {
716 return -EINVAL;
717 }
718
719 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
720
721 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO1_SLPMODE_LSH);
722 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO1_SLPMODE_LSH);
723 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
724
725 if (ret != 0)
726 {
727 return -EIO;
728 }
729
730 return 0;
731}
732
733
734T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo1_sleep_mode(void)
735{
736 unsigned char reg_addr=0, reg_val=0;
737 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
738
739 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
740
741 zx234290_regulator_read_register(reg_addr, &reg_val);
742 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO1_SLPMODE_LSH);
743
744 return status;
745}
746#endif
747
748#if 1 /* LDO2 */
749
750int zx234290_set_ldo2_onoff(T_ZDrvZx234290_LDO_ENABLE status)
751{
752 int ret = 0;
753 unsigned char reg_addr=0, reg_val=0, mask=0;
754
755 if(status > LDO_AVTICE_MAX)
756 {
757 return -EINVAL;
758 }
759
760 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
761
762 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO2_ON_LSH);
763 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO2_ON_LSH);
764
765 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
766 if (ret != 0)
767 {
768 return -EIO;
769 }
770
771 return 0;
772}
773
774T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo2_onoff(void)
775{
776 unsigned char reg_addr=0, reg_val=0;
777 T_ZDrvZx234290_LDO_ENABLE status;
778
779 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
780 zx234290_regulator_read_register(reg_addr, &reg_val);
781
782 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO2_ON_LSH); /* */
783
784 return status;
785}
786
787/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ LDO2/3/ - LDOC */
788int zx234290_set_ldo2_voltage(T_ZDrvZx234290_VldoC vol)
789{
790 int ret = 0;
791 unsigned char reg_addr=0, reg_val=0, mask=0;
792
793 reg_addr = ZX234290_REG_ADDR_LDO12_VOL;
794
795 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO2_VSEL_LSH);
796 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO2_VSEL_LSH);
797
798 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
799 if (ret != 0)
800 {
801 return -EIO;
802 }
803
804 return 0;
805
806}
807
808T_ZDrvZx234290_VldoC zx234290_get_ldo2_voltage(void)
809{
810 unsigned char reg_addr=0, reg_val=0;
811 T_ZDrvZx234290_VldoC vol;
812
813 reg_addr = ZX234290_REG_ADDR_LDO12_VOL;
814 zx234290_regulator_read_register(reg_addr, &reg_val);
815
816 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO2_VSEL_LSH);
817
818 return vol;
819}
820
821int zx234290_set_ldo2_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
822{
823 int ret = 0;
824 unsigned char reg_addr=0, reg_val=0, mask=0;
825
826 if(status > LDOA_SLPMODE_MAX)
827 {
828 return -EINVAL;
829 }
830
831 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
832
833 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO2_SLPMODE_LSH);
834 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO2_SLPMODE_LSH);
835 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
836
837 if (ret != 0)
838 {
839 return -EIO;
840 }
841
842 return 0;
843}
844
845T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo2_sleep_mode(void)
846{
847 unsigned char reg_addr=0, reg_val=0;
848 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
849
850 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
851
852 zx234290_regulator_read_register(reg_addr, &reg_val);
853 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO2_SLPMODE_LSH);
854
855 return status;
856}
857#endif
858#if 1 /* LDO3 add*/
859
860int zx234290_set_ldo3_onoff(T_ZDrvZx234290_LDO_ENABLE status)
861{
862 int ret = 0;
863 unsigned char reg_addr=0, reg_val=0, mask=0;
864
865 if(status > LDO_AVTICE_MAX)
866 {
867 return -EINVAL;
868 }
869
870 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
871
872 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO3_ON_LSH);
873 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO3_ON_LSH);
874
875 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
876 if (ret != 0)
877 {
878 return -EIO;
879 }
880 return 0;
881}
882
883T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo3_onoff(void)
884{
885 unsigned char reg_addr=0, reg_val=0;
886 T_ZDrvZx234290_LDO_ENABLE status;
887
888 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
889 zx234290_regulator_read_register( reg_addr, &reg_val);
890
891 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO3_ON_LSH); /* */
892
893 return status;
894}
895
896/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ LDO2/3/ - LDOC */
897int zx234290_set_ldo3_voltage(T_ZDrvZx234290_VldoC vol)
898{
899 int ret = 0;
900 unsigned char reg_addr=0, reg_val=0, mask=0;
901
902 reg_addr = ZX234290_REG_ADDR_LDO34_VOL;
903
904 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO3_VSEL_LSH);
905 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO3_VSEL_LSH);
906
907 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
908 if (ret != 0)
909 {
910 return -EIO;
911 }
912 return 0;
913}
914
915T_ZDrvZx234290_VldoC zx234290_get_ldo3_voltage(void)
916{
917 unsigned char reg_addr=0, reg_val=0;
918 T_ZDrvZx234290_VldoC vol;
919
920 reg_addr = ZX234290_REG_ADDR_LDO34_VOL;
921 zx234290_regulator_read_register( reg_addr, &reg_val);
922
923 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO3_VSEL_LSH);
924
925 return vol;
926}
927
928int zx234290_set_ldo3_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
929{
930 int ret = 0;
931 unsigned char reg_addr=0, reg_val=0, mask=0;
932
933 if(status > LDOA_SLPMODE_MAX)
934 {
935 return -EINVAL;
936 }
937
938 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
939
940 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO3_SLPMODE_LSH);
941 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO3_SLPMODE_LSH);
942 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
943
944 if (ret != 0)
945 {
946 return -EIO;
947 }
948 return 0;
949}
950
951T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo3_sleep_mode(void)
952{
953 unsigned char reg_addr=0, reg_val=0;
954 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
955
956 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
957
958 zx234290_regulator_read_register( reg_addr, &reg_val);
959 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO3_SLPMODE_LSH);
960
961 return status;
962}
963#endif
964#if 1 /* LDO4 add*/
965
966int zx234290_set_ldo4_onoff(T_ZDrvZx234290_LDO_ENABLE status)
967{
968 int ret = 0;
969 unsigned char reg_addr=0, reg_val=0, mask=0;
970
971 if(status > LDO_AVTICE_MAX)
972 {
973 return -EINVAL;
974 }
975
976 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
977
978 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO4_ON_LSH);
979 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO4_ON_LSH);
980
981 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
982 if (ret != 0)
983 {
984 return -EIO;
985 }
986
987 return 0;
988}
989
990T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo4_onoff(void)
991{
992 unsigned char reg_addr=0, reg_val=0;
993 T_ZDrvZx234290_LDO_ENABLE status;
994
995 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
996 zx234290_regulator_read_register( reg_addr, &reg_val);
997
998 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO4_ON_LSH); /* */
999
1000 return status;
1001}
1002
1003/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ LDO4/6/7/8/ - LDOD */
1004int zx234290_set_ldo4_voltage(T_ZDrvZx234290_VldoD vol)
1005{
1006 int ret = 0;
1007 unsigned char reg_addr=0, reg_val=0, mask=0;
1008
1009 reg_addr = ZX234290_REG_ADDR_LDO34_VOL;
1010
1011 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO4_VSEL_LSH);
1012 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO4_VSEL_LSH);
1013
1014 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1015 if (ret != 0)
1016 {
1017 return -EIO;
1018 }
1019 return 0;
1020}
1021
1022T_ZDrvZx234290_VldoD zx234290_get_ldo4_voltage(void)
1023{
1024 unsigned char reg_addr=0, reg_val=0;
1025 T_ZDrvZx234290_VldoD vol;
1026
1027 reg_addr = ZX234290_REG_ADDR_LDO34_VOL;
1028 zx234290_regulator_read_register( reg_addr, &reg_val);
1029
1030 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO4_VSEL_LSH);
1031
1032 return vol;
1033}
1034
1035int zx234290_set_ldo4_sleep_mode(T_ZDrvZx234290_LDOB_SLPMODE status)
1036{
1037 int ret = 0;
1038 unsigned char reg_addr=0, reg_val=0, mask=0;
1039
1040 if(status > LDOB_SLPMODE_MAX)
1041 {
1042 return -EINVAL;
1043 }
1044
1045 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
1046
1047 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO4_SLPMODE_LSH);
1048 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO4_SLPMODE_LSH);
1049 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1050
1051 if (ret != 0)
1052 {
1053 return -EIO;
1054 }
1055 return 0;
1056}
1057
1058T_ZDrvZx234290_LDOB_SLPMODE zx234290_get_ldo4_sleep_mode(void)
1059{
1060 unsigned char reg_addr=0, reg_val=0;
1061 T_ZDrvZx234290_LDOB_SLPMODE status = 0;
1062
1063 reg_addr = ZX234290_REG_ADDR_LDO1234_MODE;
1064
1065 zx234290_regulator_read_register( reg_addr, &reg_val);
1066 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO4_SLPMODE_LSH);
1067
1068 return status;
1069}
1070
1071#endif
1072
1073
1074
1075#if 1
1076
1077int zx234290_set_ldo5_onoff(T_ZDrvZx234290_LDO_ENABLE status)
1078{
1079 int ret = 0;
1080 unsigned char reg_addr=0, reg_val=0, mask=0;
1081
1082 if(status > LDO_AVTICE_MAX)
1083 {
1084 return -EINVAL;
1085 }
1086
1087 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1088
1089 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO5_ON_LSH);
1090 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO5_ON_LSH);
1091
1092 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1093 if (ret != 0)
1094 {
1095 return -EIO;
1096 }
1097
1098 return 0;
1099}
1100
1101int zx234290_set_ldo5_onoff_PSM(T_ZDrvZx234290_LDO_ENABLE status)
1102{
1103 int ret = 0;
1104 unsigned char reg_addr=0, reg_val=0, mask=0;
1105
1106 if(status > LDO_AVTICE_MAX)
1107 {
1108 return -EINVAL;
1109 }
1110
1111 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1112
1113 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO5_ON_LSH);
1114 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO5_ON_LSH);
1115
1116 ret = zx234290_regulator_write_register_PSM(reg_addr, reg_val, mask);
1117 if (ret != 0)
1118 {
1119 return -EIO;
1120 }
1121
1122 return 0;
1123}
1124
1125T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo5_onoff(void)
1126{
1127 unsigned char reg_addr=0, reg_val=0;
1128 T_ZDrvZx234290_LDO_ENABLE status;
1129
1130 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1131 zx234290_regulator_read_register(reg_addr, &reg_val);
1132
1133 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO5_ON_LSH);
1134
1135 return status;
1136}
1137
1138/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ LDO5 */
1139int zx234290_set_ldo5_voltage(T_ZDrvZx234290_VldoB vol)
1140{
1141 int ret = 0;
1142 unsigned char reg_addr=0, reg_val=0, mask=0;
1143
1144 if(vol > VLDOB_MAX)
1145 {
1146 return -EINVAL;
1147 }
1148
1149 reg_addr = ZX234290_REG_ADDR_LDO56_VOL;
1150
1151 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO5_VSEL_LSH);
1152 mask = ZX234290_BITFMASK(ZX234290_LDO5_VSEL_WID, ZX234290_LDO5_VSEL_LSH);
1153
1154 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1155 if (ret != 0)
1156 {
1157 return -EIO;
1158 }
1159
1160 return 0;
1161}
1162
1163T_ZDrvZx234290_VldoB zx234290_get_ldo5_voltage(void)
1164{
1165 unsigned char reg_addr=0, reg_val=0;
1166 T_ZDrvZx234290_VldoB vol;
1167
1168 reg_addr = ZX234290_REG_ADDR_LDO56_VOL;
1169 zx234290_regulator_read_register(reg_addr, &reg_val);
1170
1171 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO5_VSEL_WID, ZX234290_LDO5_VSEL_LSH);
1172
1173 return vol;
1174}
1175
1176
1177int zx234290_set_ldo5_sleep_mode(T_ZDrvZx234290_LDOB_SLPMODE status)
1178{
1179 int ret = 0;
1180 unsigned char reg_addr=0, reg_val=0, mask=0;
1181
1182 if(status > LDOB_SLPMODE_MAX)
1183 {
1184 return -EINVAL;
1185 }
1186
1187 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1188
1189 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO5_SLPMODE_LSH);
1190 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO5_SLPMODE_LSH);
1191 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1192
1193 if (ret != 0)
1194 {
1195 return -EIO;
1196 }
1197
1198 return 0;
1199}
1200
1201
1202
1203T_ZDrvZx234290_LDOB_SLPMODE zx234290_get_ldo5_sleep_mode(void)
1204{
1205 unsigned char reg_addr=0, reg_val=0;
1206 T_ZDrvZx234290_LDOB_SLPMODE status = 0;
1207
1208 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1209
1210 zx234290_regulator_read_register(reg_addr, &reg_val);
1211 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO1_SLPMODE_LSH);
1212
1213 return status;
1214}
1215#endif
1216
1217
1218#if 1 /* LDO6 */
1219
1220int zx234290_set_ldo6_onoff(T_ZDrvZx234290_LDO_ENABLE status)
1221{
1222 int ret = 0;
1223 unsigned char reg_addr=0, reg_val=0, mask=0;
1224
1225 if(status > LDO_AVTICE_MAX)
1226 {
1227 return -EINVAL;
1228 }
1229
1230 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1231
1232 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO6_ON_LSH);
1233 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO6_ON_LSH);
1234
1235 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1236 if (ret != 0)
1237 {
1238 return -EIO;
1239 }
1240
1241 return 0;
1242}
1243
1244
1245T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo6_onoff(void)
1246{
1247 unsigned char reg_addr=0, reg_val=0;
1248 T_ZDrvZx234290_LDO_ENABLE status;
1249
1250 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1251 zx234290_regulator_read_register(reg_addr, &reg_val);
1252
1253 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO6_ON_LSH);
1254
1255 return status;
1256}
1257
1258int zx234290_set_ldo6_voltage(T_ZDrvZx234290_VldoD vol)
1259{
1260 int ret = 0;
1261 unsigned char reg_addr=0, reg_val=0, mask=0;
1262
1263 if(vol > VLDOD_MAX)
1264 {
1265 return -EINVAL;
1266 }
1267
1268 reg_addr = ZX234290_REG_ADDR_LDO56_VOL;
1269
1270 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO6_VSEL_LSH);
1271 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO6_VSEL_LSH);
1272
1273 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1274 if (ret != 0)
1275 {
1276 return -EIO;
1277 }
1278
1279 return 0;
1280}
1281
1282T_ZDrvZx234290_VldoD zx234290_get_ldo6_voltage(void)
1283{
1284 unsigned char reg_addr=0, reg_val=0;
1285 T_ZDrvZx234290_VldoD vol;
1286
1287 reg_addr = ZX234290_REG_ADDR_LDO56_VOL;
1288 zx234290_regulator_read_register(reg_addr, &reg_val);
1289
1290 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO6_VSEL_LSH);
1291
1292 return vol;
1293}
1294
1295int zx234290_set_ldo6_sleep_mode(T_ZDrvZx234290_LDOB_SLPMODE status)
1296{
1297 int ret = 0;
1298 unsigned char reg_addr=0, reg_val=0, mask=0;
1299
1300 if(status > LDOB_SLPMODE_MAX)
1301 {
1302 return -EINVAL;
1303 }
1304
1305 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1306
1307 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO6_SLPMODE_LSH);
1308 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO6_SLPMODE_LSH);
1309 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1310
1311 if (ret != 0)
1312 {
1313 return -EIO;
1314 }
1315
1316 return 0;
1317}
1318
1319T_ZDrvZx234290_LDOB_SLPMODE zx234290_get_ldo6_sleep_mode(void)
1320{
1321 unsigned char reg_addr=0, reg_val=0;
1322 T_ZDrvZx234290_LDOB_SLPMODE status = 0;
1323
1324 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1325
1326 zx234290_regulator_read_register(reg_addr, &reg_val);
1327 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO6_SLPMODE_LSH);
1328
1329 return status;
1330}
1331#endif
1332#if 1 /* LDO7 add*/
1333
1334int zx234290_set_ldo7_onoff(T_ZDrvZx234290_LDO_ENABLE status)
1335{
1336 int ret = 0;
1337 unsigned char reg_addr=0, reg_val=0, mask=0;
1338
1339 if(status > LDO_AVTICE_MAX)
1340 {
1341 return -EINVAL;
1342 }
1343
1344 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1345
1346 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO7_ON_LSH);
1347 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO7_ON_LSH);
1348
1349 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1350 if (ret != 0)
1351 {
1352 return -EIO;
1353 }
1354 return 0;
1355}
1356
1357T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo7_onoff(void)
1358{
1359 unsigned char reg_addr=0, reg_val=0;
1360 T_ZDrvZx234290_LDO_ENABLE status;
1361
1362 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1363 zx234290_regulator_read_register( reg_addr, &reg_val);
1364
1365 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO7_ON_LSH); /* */
1366
1367 return status;
1368}
1369
1370/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬µçѹ·¶Î§*/
1371int zx234290_set_ldo7_voltage(T_ZDrvZx234290_VldoD vol)
1372{
1373 int ret = 0;
1374 unsigned char reg_addr=0, reg_val=0, mask=0;
1375
1376 if(vol > VLDOD_MAX)
1377 {
1378 return -EINVAL;
1379 }
1380 reg_addr = ZX234290_REG_ADDR_LDO78_VOL;
1381
1382 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO7_VSEL_LSH);
1383 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO7_VSEL_LSH);
1384
1385 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1386 if (ret != 0)
1387 {
1388 return -EIO;
1389 }
1390 return 0;
1391}
1392
1393T_ZDrvZx234290_VldoD zx234290_get_ldo7_voltage(void)
1394{
1395 unsigned char reg_addr=0, reg_val=0;
1396 T_ZDrvZx234290_VldoD vol;
1397
1398 reg_addr = ZX234290_REG_ADDR_LDO78_VOL;
1399 zx234290_regulator_read_register( reg_addr, &reg_val);
1400
1401 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO7_VSEL_LSH);
1402
1403 return vol;
1404}
1405
1406int zx234290_set_ldo7_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
1407{
1408 int ret = 0;
1409 unsigned char reg_addr=0, reg_val=0, mask=0;
1410
1411 if(status > LDOA_SLPMODE_MAX)
1412 {
1413 return -EINVAL;
1414 }
1415
1416 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1417
1418 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO7_SLPMODE_LSH);
1419 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO7_SLPMODE_LSH);
1420 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1421
1422 if (ret != 0)
1423 {
1424 return -EIO;
1425 }
1426 return 0;
1427}
1428
1429T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo7_sleep_mode(void)
1430{
1431 unsigned char reg_addr=0, reg_val=0;
1432 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
1433
1434 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1435
1436 zx234290_regulator_read_register( reg_addr, &reg_val);
1437 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO7_SLPMODE_LSH);
1438
1439 return status;
1440}
1441#endif
1442
1443
1444#if 1 /* LDO8 */
1445/*******************************************************************************
1446 * Function:
1447 * Description:
1448 * Parameters:
1449 * Input:
1450 *
1451 * Output:
1452 *
1453 * Returns:
1454 *
1455 *
1456 * Others:
1457 ********************************************************************************/
1458
1459int zx234290_set_ldo8_onoff(T_ZDrvZx234290_LDO_ENABLE status)
1460{
1461 int ret = 0;
1462 unsigned char reg_addr=0, reg_val=0, mask=0;
1463
1464 if(status > LDO_AVTICE_MAX)
1465 {
1466 return -EINVAL;
1467 }
1468
1469 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1470
1471 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO8_ON_LSH);
1472 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO8_ON_LSH);
1473
1474 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1475 if (ret != 0)
1476 {
1477 return -EIO;
1478 }
1479
1480 return 0;
1481}
1482
1483T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo8_onoff(void)
1484{
1485 unsigned char reg_addr=0, reg_val=0;
1486 T_ZDrvZx234290_LDO_ENABLE status;
1487
1488 reg_addr = ZX234290_REG_ADDR_LDO_EN1;
1489 zx234290_regulator_read_register(reg_addr, &reg_val);
1490
1491 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO8_ON_LSH); /* */
1492
1493 return status;
1494}
1495
1496int zx234290_set_ldo8_voltage(T_ZDrvZx234290_VldoD vol)
1497{
1498 int ret = 0;
1499 unsigned char reg_addr=0, reg_val=0, mask=0;
1500
1501 if(vol > VLDOD_MAX)
1502 {
1503 return -EINVAL;
1504 }
1505
1506 reg_addr = ZX234290_REG_ADDR_LDO78_VOL;
1507
1508 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO8_VSEL_LSH);
1509 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO8_VSEL_LSH);
1510
1511 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1512 if (ret != 0)
1513 {
1514 return -EIO;
1515 }
1516
1517 return 0;
1518}
1519
1520T_ZDrvZx234290_VldoD zx234290_get_ldo8_voltage(void)
1521{
1522 unsigned char reg_addr=0, reg_val=0;
1523 T_ZDrvZx234290_VldoD vol;
1524
1525 reg_addr = ZX234290_REG_ADDR_LDO78_VOL;
1526 zx234290_regulator_read_register(reg_addr, &reg_val);
1527
1528 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO8_VSEL_LSH);
1529
1530 return vol;
1531}
1532
1533int zx234290_set_ldo8_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
1534{
1535 int ret = 0;
1536 unsigned char reg_addr=0, reg_val=0, mask=0;
1537
1538 if(status > LDOA_SLPMODE_MAX)
1539 {
1540 return -EINVAL;
1541 }
1542
1543 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1544
1545 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO8_SLPMODE_LSH);
1546 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO8_SLPMODE_LSH);
1547 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1548
1549 if (ret != 0)
1550 {
1551 return -EIO;
1552 }
1553
1554 return 0;
1555}
1556
1557
1558T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo8_sleep_mode(void)
1559{
1560 unsigned char reg_addr=0, reg_val=0;
1561 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
1562
1563 reg_addr = ZX234290_REG_ADDR_LDO5678_MODE;
1564
1565 zx234290_regulator_read_register(reg_addr, &reg_val);
1566 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO8_SLPMODE_LSH);
1567
1568 return status;
1569}
1570#endif
1571#if 1 /* LDO9 add*/
1572
1573int zx234290_set_ldo9_onoff(T_ZDrvZx234290_LDO_ENABLE status)
1574{
1575 int ret = 0;
1576 unsigned char reg_addr=0, reg_val=0, mask=0; /* 4 ¸ö²ÎÊý */
1577
1578 if(status >= LDO_AVTICE_MAX)
1579 {
1580 return -EINVAL;
1581 }
1582
1583 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
1584
1585 if (pmu_chip_ver == 297) {
1586 reg_val = ZX234290_BITFVAL(status, ZX234297_LDO9_ON_LSH);
1587 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234297_LDO9_ON_LSH);
1588 } else {
1589 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO9_ON_LSH);
1590 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO9_ON_LSH);
1591 }
1592
1593 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1594 if (ret != 0)
1595 {
1596 return -EIO;
1597 }
1598 return 0;
1599}
1600
1601T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo9_onoff(void)
1602{
1603 unsigned char reg_addr=0, reg_val=0;
1604 T_ZDrvZx234290_LDO_ENABLE status;
1605
1606 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
1607 zx234290_regulator_read_register( reg_addr, &reg_val);
1608
1609 if (pmu_chip_ver == 297) {
1610 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234297_LDO9_ON_LSH);
1611 } else {
1612 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO9_ON_LSH);
1613 }
1614
1615 return status;
1616}
1617
1618/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ LDO1/9/10 - LDOA */
1619int zx234290_set_ldo9_voltage(T_ZDrvZx234290_VldoA vol)
1620{
1621 int ret = 0;
1622 unsigned char reg_addr=0, reg_val=0, mask=0;
1623
1624 reg_addr = ZX234290_REG_ADDR_LDO9_VOL;
1625
1626 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO9_VSEL_LSH);
1627 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO9_VSEL_LSH);
1628
1629 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1630 if (ret != 0)
1631 {
1632 return -EIO;
1633 }
1634 return 0;
1635}
1636
1637T_ZDrvZx234290_VldoA zx234290_get_ldo9_voltage(void)
1638{
1639 unsigned char reg_addr=0, reg_val=0;
1640 T_ZDrvZx234290_VldoA vol;
1641
1642 reg_addr = ZX234290_REG_ADDR_LDO9_VOL;
1643 zx234290_regulator_read_register( reg_addr, &reg_val);
1644
1645 vol = ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO9_VSEL_LSH);
1646
1647 return vol;
1648}
1649
1650int zx234290_set_ldo9_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
1651{
1652 int ret = 0;
1653 unsigned char reg_addr=0, reg_val=0, mask=0;
1654
1655 if(status >= LDOA_SLPMODE_MAX)
1656 {
1657 return -EINVAL;
1658 }
1659
1660 reg_addr = ZX234290_REG_ADDR_LDO910_MODE;
1661
1662 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO9_SLPMODE_LSH);
1663 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO9_SLPMODE_LSH);
1664 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1665
1666 if (ret != 0)
1667 {
1668 return -EIO;
1669 }
1670 return 0;
1671}
1672
1673T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo9_sleep_mode(void)
1674{
1675 unsigned char reg_addr=0, reg_val=0;
1676 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
1677
1678 reg_addr = ZX234290_REG_ADDR_LDO910_MODE;
1679
1680 zx234290_regulator_read_register( reg_addr, &reg_val);
1681 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO9_SLPMODE_LSH);
1682
1683 return status;
1684}
1685#endif
1686#if 1 /* LDO10 add*/
1687int zx234290_set_ldo10_onoff(T_ZDrvZx234290_LDO_ENABLE status)
1688{
1689 int ret = 0;
1690 unsigned char reg_addr=0, reg_val=0, mask=0;
1691
1692 if(status >= LDO_AVTICE_MAX)
1693 {
1694 return -EINVAL;
1695 }
1696
1697 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
1698 if (pmu_chip_ver == 297) {
1699 reg_val = ZX234290_BITFVAL(status, ZX234297_LDO10_ON_LSH);
1700 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234297_LDO10_ON_LSH);
1701 } else {
1702 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO10_ON_LSH);
1703 mask = ZX234290_BITFMASK(ZX234290_LDOS_ON_WID, ZX234290_LDO10_ON_LSH);
1704 }
1705
1706 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1707 if (ret != 0)
1708 {
1709 return -EIO;
1710 }
1711
1712 return 0;
1713}
1714
1715T_ZDrvZx234290_LDO_ENABLE zx234290_get_ldo10_onoff(void)
1716{
1717 unsigned char reg_addr=0, reg_val=0;
1718 T_ZDrvZx234290_LDO_ENABLE status;
1719
1720 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
1721 zx234290_regulator_read_register( reg_addr, &reg_val);
1722
1723 if (pmu_chip_ver == 297) {
1724 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234297_LDO10_ON_LSH);
1725 } else {
1726 status = ZX234290_BITFEXT(reg_val, ZX234290_LDOS_ON_WID, ZX234290_LDO10_ON_LSH);
1727 }
1728
1729 return status;
1730}
1731
1732static int zx234290_set_ldo10_voltage(unsigned char vol)
1733{
1734 int ret = 0;
1735 unsigned char reg_addr=0, reg_val=0, mask=0;
1736
1737 reg_addr = ZX234290_REG_ADDR_LDO10_RTCLDO_VOL;
1738
1739 reg_val = ZX234290_BITFVAL(vol, ZX234290_LDO10_VSEL_LSH);
1740 mask = ZX234290_BITFMASK(ZX234290_LDO_VSEL_WID, ZX234290_LDO10_VSEL_LSH);
1741
1742 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1743 if (ret != 0)
1744 {
1745 return -EIO;
1746 }
1747 return 0;
1748
1749}
1750
1751/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ zx234296 LDO1/9/10 - LDOA */
1752int zx234290_set_ldo10_voltageA(T_ZDrvZx234290_VldoA vol)
1753{
1754 if (vol >= VLDOA_MAX)
1755 {
1756 return -EINVAL;
1757 }
1758
1759 return zx234290_set_ldo10_voltage((unsigned char)vol);
1760}
1761
1762/* ×¢Òâ²ÎÊýµÄÀàÐÍ£¬ zx234297 LDO10 - LDOF */
1763int zx234297_set_ldo10_voltageF(T_ZDrvZx234297_VldoF vol)
1764{
1765 if (vol >= VLDOF_MAX)
1766 {
1767 return -EINVAL;
1768 }
1769
1770 return zx234290_set_ldo10_voltage((unsigned char)vol);
1771}
1772
1773static unsigned char zx234290_get_ldo10_voltage(void)
1774{
1775 unsigned char reg_addr=0, reg_val=0;
1776
1777 reg_addr = ZX234290_REG_ADDR_LDO10_RTCLDO_VOL;
1778 zx234290_regulator_read_register( reg_addr, &reg_val);
1779
1780 return ZX234290_BITFEXT(reg_val, ZX234290_LDO_VSEL_WID, ZX234290_LDO10_VSEL_LSH);
1781}
1782
1783T_ZDrvZx234290_VldoA zx234290_get_ldo10_voltageA(void)
1784{
1785 unsigned char vol;
1786
1787 vol = zx234290_get_ldo10_voltage();
1788
1789 return (T_ZDrvZx234290_VldoA)vol;
1790}
1791
1792T_ZDrvZx234297_VldoF zx234290_get_ldo10_voltageF(void)
1793{
1794 unsigned char vol;
1795
1796 vol = zx234290_get_ldo10_voltage();
1797
1798 return (T_ZDrvZx234297_VldoF)vol;
1799}
1800
1801int zx234290_set_ldo10_sleep_mode(T_ZDrvZx234290_LDOA_SLPMODE status)
1802{
1803 int ret = 0;
1804 unsigned char reg_addr=0, reg_val=0, mask=0;
1805
1806 if(status >= LDOA_SLPMODE_MAX)
1807 {
1808 return -EINVAL;
1809 }
1810
1811 reg_addr = ZX234290_REG_ADDR_LDO910_MODE;
1812
1813 reg_val = ZX234290_BITFVAL(status, ZX234290_LDO10_SLPMODE_LSH);
1814 mask = ZX234290_BITFMASK(ZX234290_REGULATOR_MODE_WID, ZX234290_LDO10_SLPMODE_LSH);
1815 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1816
1817 if (ret != 0)
1818 {
1819 return -EIO;
1820 }
1821 return 0;
1822}
1823
1824T_ZDrvZx234290_LDOA_SLPMODE zx234290_get_ldo10_sleep_mode(void)
1825{
1826 unsigned char reg_addr=0, reg_val=0;
1827 T_ZDrvZx234290_LDOA_SLPMODE status = 0;
1828
1829 reg_addr = ZX234290_REG_ADDR_LDO910_MODE;
1830
1831 zx234290_regulator_read_register( reg_addr, &reg_val);
1832 status = ZX234290_BITFEXT(reg_val, ZX234290_REGULATOR_MODE_WID, ZX234290_LDO10_SLPMODE_LSH);
1833
1834 return status;
1835}
1836#endif
1837
1838#if 1 /* LDO COIN add*/
1839int zx234290_setVortc(T_ZDrvZx234290_VldoE vol)
1840{
1841 int ret = 0;
1842 unsigned char reg_addr=0, reg_val=0, mask=0;
1843
1844 reg_addr = ZX234290_REG_ADDR_LDO10_RTCLDO_VOL;
1845
1846 reg_val = ZX234290_BITFVAL(vol, ZX234290_VORTC_VSEL_LSH);
1847 mask = ZX234290_BITFMASK(ZX234290_VORTC_VSEL_WID, ZX234290_VORTC_VSEL_LSH);
1848
1849 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1850 if (ret != 0)
1851 {
1852 return -EIO;
1853 }
1854 return 0;
1855
1856}
1857
1858T_ZDrvZx234290_VldoE zx234290_getVortc(void)
1859{
1860 unsigned char reg_addr=0, reg_val=0;
1861 T_ZDrvZx234290_VldoE vol;
1862
1863 reg_addr = ZX234290_REG_ADDR_LDO10_RTCLDO_VOL;
1864 zx234290_regulator_read_register( reg_addr, &reg_val);
1865
1866 vol = ZX234290_BITFEXT(reg_val, ZX234290_VORTC_VSEL_WID, ZX234290_VORTC_VSEL_LSH);
1867
1868 return vol;
1869}
1870#endif
1871
1872#if 1 /* Sink Control */
1873int zx234297_set_sink(T_ZDrvZx234297_SINK sink_num, int is_on, T_ZDrvZx234297_SINK_CURRENT sink_current)
1874{
1875 int ret = 0;
1876 unsigned char lsh_on, lsh_current;
1877 unsigned char reg_addr=0, reg_val=0, mask=0;
1878
1879 if (sink_num == ZX234297_SINK1) {
1880 lsh_on = ZX234297_SINK1_ON_LSH;
1881 lsh_current = ZX234297_SINK1_CURRENT_LSH;
1882 } else if (sink_num == ZX234297_SINK2) {
1883 lsh_on = ZX234297_SINK2_ON_LSH;
1884 lsh_current = ZX234297_SINK2_CURRENT_LSH;
1885 } else
1886 return -EINVAL;
1887
1888 if (is_on) {
1889 if (sink_current >= SINK_CURRENT_MAX)
1890 sink_current = SINK_CURRENT_120MA;
1891
1892 reg_addr = ZX234297_REG_ADDR_SINK_CONTROL;
1893 reg_val = ZX234290_BITFVAL(sink_current, lsh_current);
1894 mask = ZX234290_BITFMASK(ZX234297_SINK_CURRENT_WID, lsh_current);
1895 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1896 if (ret != 0)
1897 {
1898 return -EIO;
1899 }
1900 }
1901
1902 is_on = !!is_on;
1903 reg_addr = ZX234290_REG_ADDR_LDO_EN2;
1904 reg_val = ZX234290_BITFVAL(is_on, lsh_on);
1905 mask = ZX234290_BITFMASK(ZX234297_SINK_ON_WID, lsh_on);
1906 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1907 if (ret != 0)
1908 {
1909 return -EIO;
1910 }
1911
1912 return 0;
1913}
1914
1915int zx234297_set_sink_slpmode(T_ZDrvZx234297_SINK sink_num, T_ZDrvZx234297_SINK_SLPMODE mode)
1916{
1917 int ret = 0;
1918 unsigned char lsh;
1919 unsigned char reg_addr=0, reg_val=0, mask=0;
1920
1921 if (mode >= SLPMODE_MAX) {
1922 return -EINVAL;
1923 }
1924 if (sink_num == ZX234297_SINK1) {
1925 lsh = ZX234297_SINK1_SLP_MODE_LSH;
1926 } else if (sink_num == ZX234297_SINK2) {
1927 lsh = ZX234297_SINK2_SLP_MODE_LSH;
1928 } else
1929 return -EINVAL;
1930
1931 reg_addr = ZX234290_REG_ADDR_LDO910_MODE;
1932 reg_val = ZX234290_BITFVAL(mode, lsh);
1933 mask = ZX234290_BITFMASK(ZX234297_SINK_ON_WID, lsh);
1934 ret = zx234290_regulator_write_register( reg_addr, reg_val, mask);
1935 if (ret != 0)
1936 {
1937 return -EIO;
1938 }
1939
1940 return 0;
1941}
1942#endif
1943
1944#if 1
1945/*******************************************************************************
1946* Function:
1947* Description: 0, do forced shutdown when TLLP time up ;
1948 1, do re-start up procedure when TLLP time up. (default is 0)
1949* Parameters:
1950* Input:
1951*
1952* Output:
1953*
1954* Returns:
1955*
1956*
1957* Others:
1958********************************************************************************/
1959int zx234290_SetTllpToDo(T_ZDrvZx234290_LLP_TODO enable)
1960{
1961 int ret = 0;
1962 unsigned char reg_addr=0, reg_val=0, mask=0;
1963
1964 if(enable > LLP_TODO_MAX)
1965 {
1966 return -EINVAL;
1967 }
1968
1969 reg_addr = ZX234290_REG_ADDR_PWRKEY_CONTROL1;
1970
1971 reg_val = ZX234290_BITFVAL(enable, 3);
1972 mask = ZX234290_BITFMASK(1, 3);
1973
1974 //ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask);
1975 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
1976 if (ret != 0)
1977 {
1978 return -EIO;
1979 }
1980
1981 return 0;
1982}
1983#ifdef CONFIG_PMU_GM
1984int zx234296h_support_parameter(void)
1985{
1986 int ret = 0;
1987 unsigned char reg_addr=0, reg_val=0, mask=0;
1988
1989#if 1//set gm debug bulk1&4
1990 reg_addr = 0x70;
1991 reg_val = 0xA1;
1992 ret = zx234290_i2c_write_simple(reg_addr,&reg_val);
1993 if (ret != 0)
1994 {
1995 return -EIO;
1996 }
1997
1998 reg_addr = 0x8E;
1999 reg_val = 0xD4;
2000 ret = zx234290_i2c_write_simple(reg_addr,&reg_val);
2001 if (ret != 0)
2002 {
2003 return -EIO;
2004 }
2005 printk("gm set reg[0x8E]=0xd4,reg[0x70]=0xA1 ok!\n");
2006
2007#endif
2008
2009 return 0;
2010}
2011#endif
2012/*******************************************************************************
2013* Function:
2014* Description: Long Long Pressed Enable : 0 is disable, 1 is enable long long pressed interrupt.(default is 0)
2015* Parameters:
2016* Input:
2017*
2018* Output:
2019*
2020* Returns:
2021*
2022*
2023* Others:
2024********************************************************************************/
2025int zx234290_SetLlpEnable(T_ZDrvZx234290_LLP_ENABLE enable)
2026{
2027 int ret = 0;
2028 unsigned char reg_addr=0, reg_val=0, mask=0;
2029
2030 if(enable > LLP_ENABLE_MAX)
2031 {
2032 return -EINVAL;
2033 }
2034
2035 reg_addr = ZX234290_REG_ADDR_PWRKEY_CONTROL1;
2036
2037 reg_val = ZX234290_BITFVAL(enable, 2);
2038 mask = ZX234290_BITFMASK(1, 2);
2039
2040 //ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask);
2041 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
2042 if (ret != 0)
2043 {
2044 return -EIO;
2045 }
2046
2047 return 0;
2048}
2049
2050/*******************************************************************************
2051* Function:
2052* Description: Long Pressed Time, 00, 01, 10, 11: 1sec, 2sec, 3sec, 4sec (default is 2 sec)
2053* Parameters:
2054* Input:
2055*
2056* Output:
2057*
2058* Returns:
2059*
2060*
2061* Others:
2062********************************************************************************/
2063int zx234290_SetLpTime(T_ZDrvZx234290_LP_TIME time)
2064{
2065 int ret = 0;
2066 unsigned char reg_addr=0, reg_val=0, mask=0;
2067
2068 if(time > LP_TIME_MAX)
2069 {
2070 return -EINVAL;
2071 }
2072
2073 reg_addr = ZX234290_REG_ADDR_PWRKEY_CONTROL1;
2074
2075 reg_val = ZX234290_BITFVAL(time, 0);
2076 mask = ZX234290_BITFMASK(2, 0);
2077
2078 //ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask);
2079 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
2080 if (ret != 0)
2081 {
2082 return -EIO;
2083 }
2084
2085 return 0;
2086}
2087
2088/*******************************************************************************
2089* Function:
2090* Description: RESTART_DLY[1:0]=00, 01, 10, 11: 0.25sec, 0.5sec, 1sec, 2sec (default is 1 sec)
2091* Parameters:
2092* Input:
2093*
2094* Output:
2095*
2096* Returns:
2097*
2098*
2099* Others:
2100********************************************************************************/
2101int zx234290_SetRestartDly(T_ZDrvZx234290_TIME_IT time)
2102{
2103 int ret = 0;
2104 unsigned char reg_addr=0, reg_val=0, mask=0;
2105
2106 if(time > LLP_DLY_MAX)
2107 {
2108 return -EINVAL;
2109 }
2110
2111 reg_addr = ZX234290_REG_ADDR_PWRKEY_CONTROL2;
2112
2113 reg_val = ZX234290_BITFVAL(time, 0);
2114 mask = ZX234290_BITFMASK(2, 0);
2115
2116 //ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask);
2117 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
2118 if (ret != 0)
2119 {
2120 return -EIO;
2121 }
2122
2123 return 0;
2124}
2125
2126
2127/*******************************************************************************
2128* Function:
2129* Description: TIME_LP[1:0]=00, 01, 10, 11: 6sec, 7sec, 8sec, 10sec
2130* Parameters:
2131* Input:
2132*
2133* Output:
2134*
2135* Returns:
2136*
2137*
2138* Others:
2139********************************************************************************/
2140int zx234290_SetLlpTime(T_ZDrvZx234290_LLP_TIME time)
2141{
2142 int ret = 0;
2143 unsigned char reg_addr=0, reg_val=0, mask=0;
2144
2145 if(time > LLP_TIME_MAX)
2146 {
2147 return -EINVAL;
2148 }
2149
2150 reg_addr = ZX234290_REG_ADDR_PWRKEY_CONTROL2;
2151
2152 reg_val = ZX234290_BITFVAL(time, 2);
2153 mask = ZX234290_BITFMASK(2, 2);
2154
2155 //ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask);
2156 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
2157 if (ret != 0)
2158 {
2159 return -EIO;
2160 }
2161
2162 return 0;
2163}
2164
2165/*******************************************************************************
2166* Function:
2167* Description:EN_VO_DISCH 0: Disable LDO output discharge resistance. The output becomes high impedance.
2168 EN_VO_DISCH 1: Enable LDO output discharge resistance.
2169* Parameters:
2170* Input:
2171*
2172* Output:
2173*
2174* Returns:
2175*
2176*
2177* Others:
2178********************************************************************************/
2179int zx234290_SetDischarger(T_ZDrvZx234290_LdoDischarger ldo, T_ZDrvZx234290_DISCHARGER_ENABLE enable)
2180{
2181 int ret = 0;
2182 unsigned char reg_addr=0, reg_val=0, mask=0;
2183
2184 if( ldo < 8 )
2185 {
2186 reg_addr = ZX234290_REG_ADDR_EN_DISCH1;
2187 }
2188 else
2189 {
2190 ldo -= 8;//
2191 reg_addr = ZX234290_REG_ADDR_EN_DISCH2;
2192 }
2193
2194 reg_val = ZX234290_BITFVAL(enable, ldo);
2195 mask = ZX234290_BITFMASK(1, ldo);
2196 //ret = zDrvPmic_SetRegister(slv_addr, reg_addr, reg_val, mask);
2197 ret = zx234290_regulator_write_register(reg_addr, reg_val, mask);
2198 if (ret != 0)
2199 {
2200 return -EIO;
2201 }
2202
2203 return 0;
2204}
2205
2206int zDrvZx234290_LdoRstErr(void)
2207{
2208 int ret = 0;
2209 unsigned char reg_val=0,mask=0;
2210
2211 reg_val = ZX234290_BITFVAL(1, ZX234290_LDO_RSTERR_LSH);
2212 mask = ZX234290_BITFMASK(ZX234290_LDO_RSTERR_WID, ZX234290_LDO_RSTERR_LSH);
2213 ret = zx234290_regulator_write_register(ZX234290_REG_ADDR_BUCK_FAULT_STATUS, reg_val, mask);
2214 if (ret != 0)
2215 {
2216 return -EIO;
2217 }
2218
2219 return 0;
2220}
2221
2222/*******************************************************************************
2223* Function: Zx234290_SetUserReg_PSM
2224* Description:
2225* Parameters:
2226* Input:
2227*
2228* Output:
2229*
2230* Returns:
2231*
2232*
2233* Others:
2234********************************************************************************/
2235int Zx234290_SetUserReg_PSM(unsigned char data)
2236{
2237 int ret = 0;
2238 unsigned char reg_addr=0, reg_val=0, mask=0;
2239
2240 reg_addr = ZX234290_REG_ADDR_USER_RESERVED;
2241 mask = 0xff;
2242 reg_val = data;
2243 ret = zx234290_regulator_write_register_PSM(reg_addr, reg_val, mask);
2244 if (ret != 0)
2245 {
2246 return -EIO;
2247 }
2248
2249 return 0;
2250}
2251int zx234290_setSoftOn(bool SoftOn)
2252{
2253 int ret = 0;
2254 unsigned char reg_addr=0;
2255 unsigned char reg_val = 0;
2256 unsigned char mask = 0;
2257
2258 reg_addr = ZX234290_REG_ADDR_SYS_CTRL;
2259
2260 mask = 0x01 << 7;
2261 if(SoftOn)
2262 {
2263 reg_val = 0x01 << 7;
2264 }
2265
2266 ret = zx234290_regulator_write_register_PSM(reg_addr, reg_val, mask);
2267
2268 return ret;
2269}
2270
2271int zx234290_setSoftOn_PSM(bool SoftOn)
2272{
2273 int ret = 0;
2274 unsigned char reg_addr=0;
2275 unsigned char reg_val = 0;
2276 unsigned char mask = 0;
2277
2278 reg_addr = ZX234290_REG_ADDR_SYS_CTRL;
2279
2280 mask = 0x01 << 7;
2281 if(SoftOn)
2282 {
2283 reg_val = 0x01 << 7;
2284 }
2285
2286 ret = zx234290_regulator_write_register_PSM(reg_addr, reg_val, mask);
2287
2288 return ret;
2289}
2290int zx234290_getPoweronStatus(void)
2291{
2292 int ret = 0;
2293 unsigned char status = 0;
2294 unsigned char reg_addr=0;
2295
2296 reg_addr = ZX234290_REG_ADDR_STSA;
2297
2298 ret = zx234290_regulator_read_register(reg_addr, &status);
2299 if (ret != 0)
2300 {
2301 return -1;
2302 }
2303
2304 return (status & (1<<5));
2305}
2306int zx234290_getPoweronStatus_PSM(void)
2307{
2308 int ret = 0;
2309 unsigned char status = 0;
2310 unsigned char reg_addr=0;
2311
2312 reg_addr = ZX234290_REG_ADDR_STSA;
2313
2314 ret = zx234290_regulator_read_register_PSM(reg_addr, &status);
2315
2316 if (ret != 0)
2317 {
2318 return -1;
2319 }
2320
2321 return (status & (1<<5));
2322}
2323
2324#endif
2325
2326#ifdef ZX234290_PWR_FAUL_PROCESS
2327
2328static BLOCKING_NOTIFIER_HEAD(zx234290_ldo_fail_notifier_list);
2329
2330int zx234290_register_client(struct notifier_block *nb)
2331{
2332 return blocking_notifier_chain_register(&zx234290_ldo_fail_notifier_list, nb);
2333}
2334EXPORT_SYMBOL(zx234290_register_client);
2335
2336int zx234290_unregister_client(struct notifier_block *nb)
2337{
2338 return blocking_notifier_chain_unregister(&zx234290_ldo_fail_notifier_list, nb);
2339}
2340EXPORT_SYMBOL(zx234290_unregister_client);
2341
2342int zx234290_notifier_call_chain(unsigned long val, void *v)
2343{
2344// printk(KERN_INFO "zx234290_notifier_call_chain,val=%ld\n", val);
2345 return blocking_notifier_call_chain(&zx234290_ldo_fail_notifier_list, val, v);
2346}
2347EXPORT_SYMBOL_GPL(zx234290_notifier_call_chain);
2348
2349
2350static irqreturn_t zx234290_buck_faul_irq(int irq, void *id)
2351{
2352 u8 buck_sts=0, buck_mask=0;
2353 //u8 val=0;
2354 zx234290_regulator_read_register(ZX234290_REG_ADDR_BUCK_FAULT_STATUS, &buck_sts);
2355 zx234290_regulator_read_register(ZX234290_REG_ADDR_BUCK_INT_MASK, &buck_mask);
2356 zDrvZx234290_LdoRstErr();
2357
2358 buck_sts &= ~buck_mask;
2359 if(buck_sts & 0x4 ){
2360 printk(KERN_ERR "zx234290_buck_faul_irq!! ldo8 error~, buckFail_irq=0x%x\n", buck_sts);
2361 //val =0x01; //clear faul flag;
2362
2363 zx234290_set_ldo8_onoff(LDO_ENABLE_OFF);
2364 zx234290_set_ldo8_onoff(LDO_ENABLE_ON);
2365
2366 //zx234290_regulator_write_register(ZX234290_REG_ADDR_BUCK_FAULT_STATUS, 0x1, 0x1);
2367
2368 zx234290_notifier_call_chain(ZX234290_INT_BUCK_FAUL,NULL);
2369 WARN_ON(1);
2370 }
2371 else if(buck_sts & 0x8 )//ldo6
2372 {
2373 printk(KERN_ERR "zx234290_buck_faul_irq!! ldo6 error~, buckFail_irq=0x%x, clear irq\n", buck_sts);
2374 //zx234290_regulator_write_register(ZX234290_REG_ADDR_BUCK_FAULT_STATUS, 0x1, 0x1);
2375 WARN_ON(1);
2376 }
2377 else if(buck_sts & 0x80 )//BUCK4
2378 {
2379 printk(KERN_ERR "zx234290_buck_faul_irq!! BUCK4 error~, buckFail_irq=0x%x, clear irq\n", buck_sts);
2380 //zx234290_regulator_write_register(ZX234290_REG_ADDR_BUCK_FAULT_STATUS, 0x1, 0x1);
2381 WARN_ON(1);
2382 }
2383 else
2384 {
2385 printk(KERN_ERR "zx234290_buck_faul_irq!! buckFail_irq=0x%x,BUG()!!\n", buck_sts);
2386 BUG();
2387 }
2388 return 0;
2389}
2390
2391static irqreturn_t zx234290_ldo_faul_irq(int irq, void *id)
2392{
2393 u8 ldo_sts=0, ldo_mask=0;
2394 zx234290_regulator_read_register( ZX234290_REG_ADDR_LDO_FAULT_STATUS, &ldo_sts);
2395 zx234290_regulator_read_register( ZX234290_REG_ADDR_LDO_INT_MASK, &ldo_mask);
2396 zDrvZx234290_LdoRstErr();
2397
2398 ldo_sts &= ~ldo_mask;
2399 if(ldo_sts){
2400 printk(KERN_ERR "zx234290_ldo_faul_irq!! LDOFail_irq=0x%x,BUG()!!\n", ldo_sts);
2401 BUG();
2402 }
2403 return 0;
2404}
2405
2406int zx234290_regulator_error_irq_request(struct zx234290 *zx234290)
2407{
2408 int ret = -1;
2409 //zx234290_rtc.zx234290->irq_base = PMIC_INT_START;
2410 //printk(KERN_INFO"zx234290_PMU_regulator_init, BUCKFail_irq=%d,LDOFail_irq=%d\n", zx234290->irq_base + ZX234290_INT_BUCK_FAUL,zx234290->irq_base + ZX234290_INT_LDO_FAUL);
2411 ret = request_threaded_irq(zx234290->irq_base + ZX234290_INT_BUCK_FAUL, NULL, zx234290_buck_faul_irq, 0, "zx234290-regulator buck faul", zx234290);
2412 if (ret) {
2413 printk(KERN_ERR "buck faul IRQ%d error %d\n", zx234290->irq_base + ZX234290_INT_BUCK_FAUL, ret);
2414 goto err_buck_irq;
2415 }
2416 ret = request_threaded_irq(zx234290->irq_base + ZX234290_INT_LDO_FAUL, NULL, zx234290_ldo_faul_irq, 0, "zx234290-regulator ldo faul", zx234290);
2417 if (ret) {
2418 printk(KERN_ERR"ldo faul IRQ%d error %d\n", zx234290->irq_base + ZX234290_INT_LDO_FAUL, ret);
2419 goto err_ldo_irq;
2420 }
2421
2422 return 0;
2423
2424 err_ldo_irq:
2425 free_irq(zx234290->irq_base + ZX234290_INT_LDO_FAUL, zx234290);
2426 err_buck_irq:
2427 free_irq(zx234290->irq_base + ZX234290_INT_BUCK_FAUL, zx234290);
2428 return ret;
2429}
2430#endif
2431