26
26
#define FAN53555_VSEL0 0x00
27
27
#define FAN53555_VSEL1 0x01
28
28
29
+ #define RK8602_VSEL0 0x06
30
+ #define RK8602_VSEL1 0x07
31
+
29
32
#define TCS4525_VSEL0 0x11
30
33
#define TCS4525_VSEL1 0x10
31
34
#define TCS4525_TIME 0x13
55
58
56
59
#define FAN53555_NVOLTAGES 64 /* Numbers of voltages */
57
60
#define FAN53526_NVOLTAGES 128
61
+ #define RK8602_NVOLTAGES 160
58
62
59
63
#define TCS_VSEL0_MODE BIT(7)
60
64
#define TCS_VSEL1_MODE BIT(6)
64
68
enum fan53555_vendor {
65
69
FAN53526_VENDOR_FAIRCHILD = 0 ,
66
70
FAN53555_VENDOR_FAIRCHILD ,
71
+ FAN53555_VENDOR_ROCKCHIP , /* RK8600, RK8601 */
72
+ RK8602_VENDOR_ROCKCHIP , /* RK8602, RK8603 */
67
73
FAN53555_VENDOR_SILERGY ,
68
74
FAN53526_VENDOR_TCS ,
69
75
};
@@ -87,6 +93,14 @@ enum {
87
93
FAN53555_CHIP_ID_08 = 8 ,
88
94
};
89
95
96
+ enum {
97
+ RK8600_CHIP_ID_08 = 8 , /* RK8600, RK8601 */
98
+ };
99
+
100
+ enum {
101
+ RK8602_CHIP_ID_10 = 10 , /* RK8602, RK8603 */
102
+ };
103
+
90
104
enum {
91
105
TCS4525_CHIP_ID_12 = 12 ,
92
106
};
@@ -117,6 +131,8 @@ struct fan53555_device_info {
117
131
/* Voltage setting register */
118
132
unsigned int vol_reg ;
119
133
unsigned int sleep_reg ;
134
+ unsigned int en_reg ;
135
+ unsigned int sleep_en_reg ;
120
136
/* Voltage range and step(linear) */
121
137
unsigned int vsel_min ;
122
138
unsigned int vsel_step ;
@@ -159,15 +175,15 @@ static int fan53555_set_suspend_enable(struct regulator_dev *rdev)
159
175
{
160
176
struct fan53555_device_info * di = rdev_get_drvdata (rdev );
161
177
162
- return regmap_update_bits (rdev -> regmap , di -> sleep_reg ,
178
+ return regmap_update_bits (rdev -> regmap , di -> sleep_en_reg ,
163
179
VSEL_BUCK_EN , VSEL_BUCK_EN );
164
180
}
165
181
166
182
static int fan53555_set_suspend_disable (struct regulator_dev * rdev )
167
183
{
168
184
struct fan53555_device_info * di = rdev_get_drvdata (rdev );
169
185
170
- return regmap_update_bits (rdev -> regmap , di -> sleep_reg ,
186
+ return regmap_update_bits (rdev -> regmap , di -> sleep_en_reg ,
171
187
VSEL_BUCK_EN , 0 );
172
188
}
173
189
@@ -317,6 +333,50 @@ static int fan53555_voltages_setup_fairchild(struct fan53555_device_info *di)
317
333
return 0 ;
318
334
}
319
335
336
+ static int fan53555_voltages_setup_rockchip (struct fan53555_device_info * di )
337
+ {
338
+ /* Init voltage range and step */
339
+ switch (di -> chip_id ) {
340
+ case RK8600_CHIP_ID_08 :
341
+ di -> vsel_min = 712500 ;
342
+ di -> vsel_step = 12500 ;
343
+ break ;
344
+ default :
345
+ dev_err (di -> dev ,
346
+ "Chip ID %d not supported!\n" , di -> chip_id );
347
+ return - EINVAL ;
348
+ }
349
+ di -> slew_reg = FAN53555_CONTROL ;
350
+ di -> slew_mask = CTL_SLEW_MASK ;
351
+ di -> ramp_delay_table = slew_rates ;
352
+ di -> n_ramp_values = ARRAY_SIZE (slew_rates );
353
+ di -> vsel_count = FAN53555_NVOLTAGES ;
354
+
355
+ return 0 ;
356
+ }
357
+
358
+ static int rk8602_voltages_setup_rockchip (struct fan53555_device_info * di )
359
+ {
360
+ /* Init voltage range and step */
361
+ switch (di -> chip_id ) {
362
+ case RK8602_CHIP_ID_10 :
363
+ di -> vsel_min = 500000 ;
364
+ di -> vsel_step = 6250 ;
365
+ break ;
366
+ default :
367
+ dev_err (di -> dev ,
368
+ "Chip ID %d not supported!\n" , di -> chip_id );
369
+ return - EINVAL ;
370
+ }
371
+ di -> slew_reg = FAN53555_CONTROL ;
372
+ di -> slew_mask = CTL_SLEW_MASK ;
373
+ di -> ramp_delay_table = slew_rates ;
374
+ di -> n_ramp_values = ARRAY_SIZE (slew_rates );
375
+ di -> vsel_count = RK8602_NVOLTAGES ;
376
+
377
+ return 0 ;
378
+ }
379
+
320
380
static int fan53555_voltages_setup_silergy (struct fan53555_device_info * di )
321
381
{
322
382
/* Init voltage range and step */
@@ -377,6 +437,7 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
377
437
switch (di -> vendor ) {
378
438
case FAN53526_VENDOR_FAIRCHILD :
379
439
case FAN53555_VENDOR_FAIRCHILD :
440
+ case FAN53555_VENDOR_ROCKCHIP :
380
441
case FAN53555_VENDOR_SILERGY :
381
442
switch (pdata -> sleep_vsel_id ) {
382
443
case FAN53555_VSEL_ID_0 :
@@ -391,6 +452,27 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
391
452
dev_err (di -> dev , "Invalid VSEL ID!\n" );
392
453
return - EINVAL ;
393
454
}
455
+ di -> sleep_en_reg = di -> sleep_reg ;
456
+ di -> en_reg = di -> vol_reg ;
457
+ break ;
458
+ case RK8602_VENDOR_ROCKCHIP :
459
+ switch (pdata -> sleep_vsel_id ) {
460
+ case FAN53555_VSEL_ID_0 :
461
+ di -> sleep_reg = RK8602_VSEL0 ;
462
+ di -> vol_reg = RK8602_VSEL1 ;
463
+ di -> sleep_en_reg = FAN53555_VSEL0 ;
464
+ di -> en_reg = FAN53555_VSEL1 ;
465
+ break ;
466
+ case FAN53555_VSEL_ID_1 :
467
+ di -> sleep_reg = RK8602_VSEL1 ;
468
+ di -> vol_reg = RK8602_VSEL0 ;
469
+ di -> sleep_en_reg = FAN53555_VSEL1 ;
470
+ di -> en_reg = FAN53555_VSEL0 ;
471
+ break ;
472
+ default :
473
+ dev_err (di -> dev , "Invalid VSEL ID!\n" );
474
+ return - EINVAL ;
475
+ }
394
476
break ;
395
477
case FAN53526_VENDOR_TCS :
396
478
switch (pdata -> sleep_vsel_id ) {
@@ -406,6 +488,8 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
406
488
dev_err (di -> dev , "Invalid VSEL ID!\n" );
407
489
return - EINVAL ;
408
490
}
491
+ di -> sleep_en_reg = di -> sleep_reg ;
492
+ di -> en_reg = di -> vol_reg ;
409
493
break ;
410
494
default :
411
495
dev_err (di -> dev , "vendor %d not supported!\n" , di -> vendor );
@@ -427,10 +511,23 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
427
511
}
428
512
break ;
429
513
case FAN53555_VENDOR_FAIRCHILD :
514
+ case FAN53555_VENDOR_ROCKCHIP :
430
515
case FAN53555_VENDOR_SILERGY :
431
516
di -> mode_reg = di -> vol_reg ;
432
517
di -> mode_mask = VSEL_MODE ;
433
518
break ;
519
+ case RK8602_VENDOR_ROCKCHIP :
520
+ di -> mode_mask = VSEL_MODE ;
521
+
522
+ switch (pdata -> sleep_vsel_id ) {
523
+ case FAN53555_VSEL_ID_0 :
524
+ di -> mode_reg = FAN53555_VSEL1 ;
525
+ break ;
526
+ case FAN53555_VSEL_ID_1 :
527
+ di -> mode_reg = FAN53555_VSEL0 ;
528
+ break ;
529
+ }
530
+ break ;
434
531
case FAN53526_VENDOR_TCS :
435
532
di -> mode_reg = TCS4525_COMMAND ;
436
533
@@ -456,6 +553,12 @@ static int fan53555_device_setup(struct fan53555_device_info *di,
456
553
case FAN53555_VENDOR_FAIRCHILD :
457
554
ret = fan53555_voltages_setup_fairchild (di );
458
555
break ;
556
+ case FAN53555_VENDOR_ROCKCHIP :
557
+ ret = fan53555_voltages_setup_rockchip (di );
558
+ break ;
559
+ case RK8602_VENDOR_ROCKCHIP :
560
+ ret = rk8602_voltages_setup_rockchip (di );
561
+ break ;
459
562
case FAN53555_VENDOR_SILERGY :
460
563
ret = fan53555_voltages_setup_silergy (di );
461
564
break ;
@@ -481,7 +584,7 @@ static int fan53555_regulator_register(struct fan53555_device_info *di,
481
584
rdesc -> ops = & fan53555_regulator_ops ;
482
585
rdesc -> type = REGULATOR_VOLTAGE ;
483
586
rdesc -> n_voltages = di -> vsel_count ;
484
- rdesc -> enable_reg = di -> vol_reg ;
587
+ rdesc -> enable_reg = di -> en_reg ;
485
588
rdesc -> enable_mask = VSEL_BUCK_EN ;
486
589
rdesc -> min_uV = di -> vsel_min ;
487
590
rdesc -> uV_step = di -> vsel_step ;
@@ -531,6 +634,12 @@ static const struct of_device_id __maybe_unused fan53555_dt_ids[] = {
531
634
}, {
532
635
.compatible = "fcs,fan53555" ,
533
636
.data = (void * )FAN53555_VENDOR_FAIRCHILD
637
+ }, {
638
+ .compatible = "rockchip,rk8600" ,
639
+ .data = (void * )FAN53555_VENDOR_ROCKCHIP
640
+ }, {
641
+ .compatible = "rockchip,rk8602" ,
642
+ .data = (void * )RK8602_VENDOR_ROCKCHIP
534
643
}, {
535
644
.compatible = "silergy,syr827" ,
536
645
.data = (void * )FAN53555_VENDOR_SILERGY ,
@@ -637,6 +746,12 @@ static const struct i2c_device_id fan53555_id[] = {
637
746
}, {
638
747
.name = "fan53555" ,
639
748
.driver_data = FAN53555_VENDOR_FAIRCHILD
749
+ }, {
750
+ .name = "rk8600" ,
751
+ .driver_data = FAN53555_VENDOR_ROCKCHIP
752
+ }, {
753
+ .name = "rk8602" ,
754
+ .driver_data = RK8602_VENDOR_ROCKCHIP
640
755
}, {
641
756
.name = "syr827" ,
642
757
.driver_data = FAN53555_VENDOR_SILERGY
0 commit comments