Lines Matching +full:cs +full:- +full:3
1 // SPDX-License-Identifier: GPL-2.0-only
8 * Author: Boris Brezillon <boris.brezillon@free-electrons.com>
11 #include <linux/mfd/syscon/atmel-smc.h>
15 * atmel_smc_cs_conf_init - initialize a SMC CS conf
16 * @conf: the SMC CS conf to initialize
27 * atmel_smc_cs_encode_ncycles - encode a number of MCK clk cycles in the
40 * If the @ncycles value is too big to be encoded, -ERANGE is returned and
49 unsigned int lsbmask = GENMASK(msbpos - 1, 0); in atmel_smc_cs_encode_ncycles()
50 unsigned int msbmask = GENMASK(msbwidth - 1, 0); in atmel_smc_cs_encode_ncycles()
65 * We still return -ERANGE in case the caller cares. in atmel_smc_cs_encode_ncycles()
70 ret = -ERANGE; in atmel_smc_cs_encode_ncycles()
79 * atmel_smc_cs_conf_set_timing - set the SMC CS conf Txx parameter to a
81 * @conf: SMC CS conf descriptor
88 * @conf->timings field at @shift position.
90 * Returns -EINVAL if shift is invalid, -ERANGE if ncycles does not fit in
104 return -EINVAL; in atmel_smc_cs_conf_set_timing()
110 * ncycles = (Txx[3] * 64) + Txx[2:0] in atmel_smc_cs_conf_set_timing()
112 ret = atmel_smc_cs_encode_ncycles(ncycles, 3, 1, 64, &val); in atmel_smc_cs_conf_set_timing()
113 conf->timings &= ~GENMASK(shift + 3, shift); in atmel_smc_cs_conf_set_timing()
114 conf->timings |= val << shift; in atmel_smc_cs_conf_set_timing()
121 * atmel_smc_cs_conf_set_setup - set the SMC CS conf xx_SETUP parameter to a
123 * @conf: SMC CS conf descriptor
130 * @conf->setup field at @shift position.
132 * Returns -EINVAL if @shift is invalid, -ERANGE if @ncycles does not fit in
143 return -EINVAL; in atmel_smc_cs_conf_set_setup()
152 conf->setup &= ~GENMASK(shift + 7, shift); in atmel_smc_cs_conf_set_setup()
153 conf->setup |= val << shift; in atmel_smc_cs_conf_set_setup()
160 * atmel_smc_cs_conf_set_pulse - set the SMC CS conf xx_PULSE parameter to a
162 * @conf: SMC CS conf descriptor
169 * @conf->setup field at @shift position.
171 * Returns -EINVAL if @shift is invalid, -ERANGE if @ncycles does not fit in
182 return -EINVAL; in atmel_smc_cs_conf_set_pulse()
191 conf->pulse &= ~GENMASK(shift + 7, shift); in atmel_smc_cs_conf_set_pulse()
192 conf->pulse |= val << shift; in atmel_smc_cs_conf_set_pulse()
199 * atmel_smc_cs_conf_set_cycle - set the SMC CS conf xx_CYCLE parameter to a
201 * @conf: SMC CS conf descriptor
208 * @conf->setup field at @shift position.
210 * Returns -EINVAL if @shift is invalid, -ERANGE if @ncycles does not fit in
220 return -EINVAL; in atmel_smc_cs_conf_set_cycle()
229 conf->cycle &= ~GENMASK(shift + 15, shift); in atmel_smc_cs_conf_set_cycle()
230 conf->cycle |= val << shift; in atmel_smc_cs_conf_set_cycle()
237 * atmel_smc_cs_conf_apply - apply an SMC CS conf
239 * @cs: the CS id
240 * @conf: the SMC CS conf to apply
242 * Applies an SMC CS configuration.
245 void atmel_smc_cs_conf_apply(struct regmap *regmap, int cs, in atmel_smc_cs_conf_apply() argument
248 regmap_write(regmap, ATMEL_SMC_SETUP(cs), conf->setup); in atmel_smc_cs_conf_apply()
249 regmap_write(regmap, ATMEL_SMC_PULSE(cs), conf->pulse); in atmel_smc_cs_conf_apply()
250 regmap_write(regmap, ATMEL_SMC_CYCLE(cs), conf->cycle); in atmel_smc_cs_conf_apply()
251 regmap_write(regmap, ATMEL_SMC_MODE(cs), conf->mode); in atmel_smc_cs_conf_apply()
256 * atmel_hsmc_cs_conf_apply - apply an SMC CS conf
259 * @cs: the CS id
260 * @conf: the SMC CS conf to apply
262 * Applies an SMC CS configuration.
263 * Only valid on post-sama5 SoCs.
267 int cs, const struct atmel_smc_cs_conf *conf) in atmel_hsmc_cs_conf_apply() argument
269 regmap_write(regmap, ATMEL_HSMC_SETUP(layout, cs), conf->setup); in atmel_hsmc_cs_conf_apply()
270 regmap_write(regmap, ATMEL_HSMC_PULSE(layout, cs), conf->pulse); in atmel_hsmc_cs_conf_apply()
271 regmap_write(regmap, ATMEL_HSMC_CYCLE(layout, cs), conf->cycle); in atmel_hsmc_cs_conf_apply()
272 regmap_write(regmap, ATMEL_HSMC_TIMINGS(layout, cs), conf->timings); in atmel_hsmc_cs_conf_apply()
273 regmap_write(regmap, ATMEL_HSMC_MODE(layout, cs), conf->mode); in atmel_hsmc_cs_conf_apply()
278 * atmel_smc_cs_conf_get - retrieve the current SMC CS conf
280 * @cs: the CS id
281 * @conf: the SMC CS conf object to store the current conf
283 * Retrieve the SMC CS configuration.
286 void atmel_smc_cs_conf_get(struct regmap *regmap, int cs, in atmel_smc_cs_conf_get() argument
289 regmap_read(regmap, ATMEL_SMC_SETUP(cs), &conf->setup); in atmel_smc_cs_conf_get()
290 regmap_read(regmap, ATMEL_SMC_PULSE(cs), &conf->pulse); in atmel_smc_cs_conf_get()
291 regmap_read(regmap, ATMEL_SMC_CYCLE(cs), &conf->cycle); in atmel_smc_cs_conf_get()
292 regmap_read(regmap, ATMEL_SMC_MODE(cs), &conf->mode); in atmel_smc_cs_conf_get()
297 * atmel_hsmc_cs_conf_get - retrieve the current SMC CS conf
300 * @cs: the CS id
301 * @conf: the SMC CS conf object to store the current conf
303 * Retrieve the SMC CS configuration.
304 * Only valid on post-sama5 SoCs.
308 int cs, struct atmel_smc_cs_conf *conf) in atmel_hsmc_cs_conf_get() argument
310 regmap_read(regmap, ATMEL_HSMC_SETUP(layout, cs), &conf->setup); in atmel_hsmc_cs_conf_get()
311 regmap_read(regmap, ATMEL_HSMC_PULSE(layout, cs), &conf->pulse); in atmel_hsmc_cs_conf_get()
312 regmap_read(regmap, ATMEL_HSMC_CYCLE(layout, cs), &conf->cycle); in atmel_hsmc_cs_conf_get()
313 regmap_read(regmap, ATMEL_HSMC_TIMINGS(layout, cs), &conf->timings); in atmel_hsmc_cs_conf_get()
314 regmap_read(regmap, ATMEL_HSMC_MODE(layout, cs), &conf->mode); in atmel_hsmc_cs_conf_get()
327 { .compatible = "atmel,at91sam9260-smc", .data = NULL },
328 { .compatible = "atmel,sama5d3-smc", .data = &sama5d3_reg_layout },
329 { .compatible = "atmel,sama5d2-smc", .data = &sama5d2_reg_layout },
334 * atmel_hsmc_get_reg_layout - retrieve the layout of HSMC registers
340 * in HSMC case, otherwise ERR_PTR(-EINVAL).
349 return match ? match->data : ERR_PTR(-EINVAL); in atmel_hsmc_get_reg_layout()