|
1 | 1 | // SPDX-License-Identifier: GPL-2.0-only
|
2 | 2 | /*
|
3 |
| - * Copyright (c) 2015, 2017-2018, The Linux Foundation. All rights reserved. |
| 3 | + * Copyright (c) 2015, 2017-2018, 2022, The Linux Foundation. All rights reserved. |
4 | 4 | */
|
5 | 5 |
|
6 | 6 | #include <linux/bitops.h>
|
|
35 | 35 | #define CFG_GDSCR_OFFSET 0x4
|
36 | 36 |
|
37 | 37 | /* Wait 2^n CXO cycles between all states. Here, n=2 (4 cycles). */
|
38 |
| -#define EN_REST_WAIT_VAL (0x2 << 20) |
39 |
| -#define EN_FEW_WAIT_VAL (0x8 << 16) |
40 |
| -#define CLK_DIS_WAIT_VAL (0x2 << 12) |
| 38 | +#define EN_REST_WAIT_VAL 0x2 |
| 39 | +#define EN_FEW_WAIT_VAL 0x8 |
| 40 | +#define CLK_DIS_WAIT_VAL 0x2 |
| 41 | + |
| 42 | +/* Transition delay shifts */ |
| 43 | +#define EN_REST_WAIT_SHIFT 20 |
| 44 | +#define EN_FEW_WAIT_SHIFT 16 |
| 45 | +#define CLK_DIS_WAIT_SHIFT 12 |
41 | 46 |
|
42 | 47 | #define RETAIN_MEM BIT(14)
|
43 | 48 | #define RETAIN_PERIPH BIT(13)
|
@@ -380,7 +385,18 @@ static int gdsc_init(struct gdsc *sc)
|
380 | 385 | */
|
381 | 386 | mask = HW_CONTROL_MASK | SW_OVERRIDE_MASK |
|
382 | 387 | EN_REST_WAIT_MASK | EN_FEW_WAIT_MASK | CLK_DIS_WAIT_MASK;
|
383 |
| - val = EN_REST_WAIT_VAL | EN_FEW_WAIT_VAL | CLK_DIS_WAIT_VAL; |
| 388 | + |
| 389 | + if (!sc->en_rest_wait_val) |
| 390 | + sc->en_rest_wait_val = EN_REST_WAIT_VAL; |
| 391 | + if (!sc->en_few_wait_val) |
| 392 | + sc->en_few_wait_val = EN_FEW_WAIT_VAL; |
| 393 | + if (!sc->clk_dis_wait_val) |
| 394 | + sc->clk_dis_wait_val = CLK_DIS_WAIT_VAL; |
| 395 | + |
| 396 | + val = sc->en_rest_wait_val << EN_REST_WAIT_SHIFT | |
| 397 | + sc->en_few_wait_val << EN_FEW_WAIT_SHIFT | |
| 398 | + sc->clk_dis_wait_val << CLK_DIS_WAIT_SHIFT; |
| 399 | + |
384 | 400 | ret = regmap_update_bits(sc->regmap, sc->gdscr, mask, val);
|
385 | 401 | if (ret)
|
386 | 402 | return ret;
|
|
0 commit comments