| .. | .. |
|---|
| 1 | | -// SPDX-License-Identifier: GPL-2.0 |
|---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 */ |
|---|
| 2 | 2 | // |
|---|
| 3 | 3 | // Spreadtrum pll clock driver |
|---|
| 4 | 4 | // |
|---|
| .. | .. |
|---|
| 61 | 61 | struct sprd_clk_common common; |
|---|
| 62 | 62 | }; |
|---|
| 63 | 63 | |
|---|
| 64 | +#define SPRD_PLL_HW_INIT_FN(_struct, _name, _parent, _reg, \ |
|---|
| 65 | + _regs_num, _itable, _factors, \ |
|---|
| 66 | + _udelay, _k1, _k2, _fflag, \ |
|---|
| 67 | + _fvco, _fn) \ |
|---|
| 68 | + struct sprd_pll _struct = { \ |
|---|
| 69 | + .regs_num = _regs_num, \ |
|---|
| 70 | + .itable = _itable, \ |
|---|
| 71 | + .factors = _factors, \ |
|---|
| 72 | + .udelay = _udelay, \ |
|---|
| 73 | + .k1 = _k1, \ |
|---|
| 74 | + .k2 = _k2, \ |
|---|
| 75 | + .fflag = _fflag, \ |
|---|
| 76 | + .fvco = _fvco, \ |
|---|
| 77 | + .common = { \ |
|---|
| 78 | + .regmap = NULL, \ |
|---|
| 79 | + .reg = _reg, \ |
|---|
| 80 | + .hw.init = _fn(_name, _parent, \ |
|---|
| 81 | + &sprd_pll_ops, 0),\ |
|---|
| 82 | + }, \ |
|---|
| 83 | + } |
|---|
| 84 | + |
|---|
| 64 | 85 | #define SPRD_PLL_WITH_ITABLE_K_FVCO(_struct, _name, _parent, _reg, \ |
|---|
| 65 | 86 | _regs_num, _itable, _factors, \ |
|---|
| 66 | 87 | _udelay, _k1, _k2, _fflag, _fvco) \ |
|---|
| 67 | | - struct sprd_pll _struct = { \ |
|---|
| 68 | | - .regs_num = _regs_num, \ |
|---|
| 69 | | - .itable = _itable, \ |
|---|
| 70 | | - .factors = _factors, \ |
|---|
| 71 | | - .udelay = _udelay, \ |
|---|
| 72 | | - .k1 = _k1, \ |
|---|
| 73 | | - .k2 = _k2, \ |
|---|
| 74 | | - .fflag = _fflag, \ |
|---|
| 75 | | - .fvco = _fvco, \ |
|---|
| 76 | | - .common = { \ |
|---|
| 77 | | - .regmap = NULL, \ |
|---|
| 78 | | - .reg = _reg, \ |
|---|
| 79 | | - .hw.init = CLK_HW_INIT(_name, \ |
|---|
| 80 | | - _parent, \ |
|---|
| 81 | | - &sprd_pll_ops, \ |
|---|
| 82 | | - 0), \ |
|---|
| 83 | | - }, \ |
|---|
| 84 | | - } |
|---|
| 88 | + SPRD_PLL_HW_INIT_FN(_struct, _name, _parent, _reg, _regs_num, \ |
|---|
| 89 | + _itable, _factors, _udelay, _k1, _k2, \ |
|---|
| 90 | + _fflag, _fvco, CLK_HW_INIT) |
|---|
| 85 | 91 | |
|---|
| 86 | 92 | #define SPRD_PLL_WITH_ITABLE_K(_struct, _name, _parent, _reg, \ |
|---|
| 87 | 93 | _regs_num, _itable, _factors, \ |
|---|
| .. | .. |
|---|
| 96 | 102 | _regs_num, _itable, _factors, \ |
|---|
| 97 | 103 | _udelay, 1000, 1000, 0, 0) |
|---|
| 98 | 104 | |
|---|
| 105 | +#define SPRD_PLL_FW_NAME(_struct, _name, _parent, _reg, _regs_num, \ |
|---|
| 106 | + _itable, _factors, _udelay, _k1, _k2, \ |
|---|
| 107 | + _fflag, _fvco) \ |
|---|
| 108 | + SPRD_PLL_HW_INIT_FN(_struct, _name, _parent, _reg, _regs_num, \ |
|---|
| 109 | + _itable, _factors, _udelay, _k1, _k2, \ |
|---|
| 110 | + _fflag, _fvco, CLK_HW_INIT_FW_NAME) |
|---|
| 111 | + |
|---|
| 112 | +#define SPRD_PLL_HW(_struct, _name, _parent, _reg, _regs_num, _itable, \ |
|---|
| 113 | + _factors, _udelay, _k1, _k2, _fflag, _fvco) \ |
|---|
| 114 | + SPRD_PLL_HW_INIT_FN(_struct, _name, _parent, _reg, _regs_num, \ |
|---|
| 115 | + _itable, _factors, _udelay, _k1, _k2, \ |
|---|
| 116 | + _fflag, _fvco, CLK_HW_INIT_HW) |
|---|
| 117 | + |
|---|
| 99 | 118 | static inline struct sprd_pll *hw_to_sprd_pll(struct clk_hw *hw) |
|---|
| 100 | 119 | { |
|---|
| 101 | 120 | struct sprd_clk_common *common = hw_to_sprd_clk_common(hw); |
|---|