Skip to content

Commit c7d2320

Browse files
committed
drivers: clock: rcar: harmonize r8a7795 and r8a779f0 drivers
Based on edit done at r8a779f0 driver creation (f5634a1) following comments on #56043. Signed-off-by: Aymeric Aillet <[email protected]>
1 parent 28f99f9 commit c7d2320

File tree

1 file changed

+19
-30
lines changed

1 file changed

+19
-30
lines changed

drivers/clock_control/clock_control_r8a7795_cpg_mssr.c

Lines changed: 19 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,6 @@ static int r8a7795_cpg_core_clock_endisable(const struct device *dev, struct rca
118118
struct cpg_clk_info_table *clk_info;
119119
struct r8a7795_cpg_mssr_data *data = dev->data;
120120
k_spinlock_key_t key;
121-
int ret = 0;
122121

123122
clk_info = rcar_cpg_find_clk_info_by_module_id(dev, clk->domain, clk->module);
124123
if (!clk_info) {
@@ -127,6 +126,7 @@ static int r8a7795_cpg_core_clock_endisable(const struct device *dev, struct rca
127126

128127
if (enable) {
129128
if (clk->rate > 0) {
129+
int ret;
130130
uintptr_t rate = clk->rate;
131131

132132
ret = rcar_cpg_set_rate(dev, (clock_control_subsys_t)clk,
@@ -141,14 +141,14 @@ static int r8a7795_cpg_core_clock_endisable(const struct device *dev, struct rca
141141
r8a7795_cpg_enable_disable_core(dev, clk_info, enable);
142142
k_spin_unlock(&data->cmn.lock, key);
143143

144-
return ret;
144+
return 0;
145145
}
146146

147147
static int r8a7795_cpg_mssr_start_stop(const struct device *dev, clock_control_subsys_t sys,
148148
bool enable)
149149
{
150150
struct rcar_cpg_clk *clk = (struct rcar_cpg_clk *)sys;
151-
int ret = -EINVAL;
151+
int ret;
152152

153153
if (!dev || !sys) {
154154
return -EINVAL;
@@ -163,15 +163,15 @@ static int r8a7795_cpg_mssr_start_stop(const struct device *dev, clock_control_s
163163
k_spin_unlock(&data->cmn.lock, key);
164164
} else if (clk->domain == CPG_CORE) {
165165
ret = r8a7795_cpg_core_clock_endisable(dev, clk, enable);
166+
} else {
167+
ret = -EINVAL;
166168
}
167169

168170
return ret;
169171
}
170172

171173
static uint32_t r8a7795_get_div_helper(uint32_t reg_val, uint32_t module)
172174
{
173-
uint32_t divider = RCAR_CPG_NONE;
174-
175175
switch (module) {
176176
case R8A7795_CLK_SD0H:
177177
case R8A7795_CLK_SD1H:
@@ -180,35 +180,29 @@ static uint32_t r8a7795_get_div_helper(uint32_t reg_val, uint32_t module)
180180
reg_val >>= R8A7795_CLK_SDH_DIV_SHIFT;
181181
/* setting of value bigger than 4 is prohibited */
182182
if ((reg_val & R8A7795_CLK_SDH_DIV_MASK) < 5) {
183-
divider = 1 << (reg_val & R8A7795_CLK_SDH_DIV_MASK);
183+
return 1 << (reg_val & R8A7795_CLK_SDH_DIV_MASK);
184+
} else {
185+
return RCAR_CPG_NONE;
184186
}
185-
break;
186187
case R8A7795_CLK_SD0:
187188
case R8A7795_CLK_SD1:
188189
case R8A7795_CLK_SD2:
189190
case R8A7795_CLK_SD3:
190191
/* convert only two possible values 0,1 to 2,4 */
191-
divider = 1 << ((reg_val & R8A7795_CLK_SD_DIV_MASK) + 1);
192-
break;
192+
return 1 << ((reg_val & R8A7795_CLK_SD_DIV_MASK) + 1);
193193
case R8A7795_CLK_CANFD:
194194
/* according to documentation, divider value stored in reg is equal to: val + 1 */
195-
divider = (reg_val & R8A7795_CLK_CANFD_DIV_MASK) + 1;
196-
break;
195+
return (reg_val & R8A7795_CLK_CANFD_DIV_MASK) + 1;
197196
case R8A7795_CLK_S3D4:
198197
case R8A7795_CLK_S0D12:
199-
divider = 1;
200-
break;
198+
return 1;
201199
default:
202-
break;
200+
return RCAR_CPG_NONE;
203201
}
204-
205-
return divider;
206202
}
207203

208204
static int r8a7795_set_rate_helper(uint32_t module, uint32_t *divider, uint32_t *div_mask)
209205
{
210-
int ret = -ENOTSUP;
211-
212206
switch (module) {
213207
case R8A7795_CLK_SD0:
214208
case R8A7795_CLK_SD1:
@@ -219,40 +213,35 @@ static int r8a7795_set_rate_helper(uint32_t module, uint32_t *divider, uint32_t
219213
/* convert 2/4 to 0/1 */
220214
*divider >>= 2;
221215
*div_mask = R8A7795_CLK_SD_DIV_MASK << R8A7795_CLK_SD_DIV_SHIFT;
222-
ret = 0;
216+
return 0;
223217
} else {
224-
ret = -EINVAL;
218+
return -EINVAL;
225219
}
226-
break;
227220
case R8A7795_CLK_SD0H:
228221
case R8A7795_CLK_SD1H:
229222
case R8A7795_CLK_SD2H:
230223
case R8A7795_CLK_SD3H:
231224
/* divider should be power of two and max possible value 16 */
232225
if (!is_power_of_two(*divider) || *divider > 16) {
233-
ret = -EINVAL;
226+
return -EINVAL;
234227
break;
235228
}
236-
ret = 0;
237229
/* 1,2,4,8,16 have to be converted to 0,1,2,3,4 and then shifted */
238230
*divider = (find_lsb_set(*divider) - 1) << R8A7795_CLK_SDH_DIV_SHIFT;
239231
*div_mask = R8A7795_CLK_SDH_DIV_MASK << R8A7795_CLK_SDH_DIV_SHIFT;
240-
break;
232+
return 0;
241233
case R8A7795_CLK_CANFD:
242234
/* according to documentation, divider value stored in reg is equal to: val + 1 */
243235
*divider -= 1;
244236
if (*divider <= R8A7795_CLK_CANFD_DIV_MASK) {
245-
ret = 0;
246237
*div_mask = R8A7795_CLK_CANFD_DIV_MASK;
238+
return 0;
247239
} else {
248-
ret = -EINVAL;
240+
return -EINVAL;
249241
}
250-
break;
251242
default:
252-
break;
243+
return -ENOTSUP;
253244
}
254-
255-
return ret;
256245
}
257246

258247
static int r8a7795_cpg_mssr_start(const struct device *dev, clock_control_subsys_t sys)

0 commit comments

Comments
 (0)