18 #include <linux/module.h>
25 #include <linux/slab.h>
30 #define IMX_PMX_DUMP(info, p, m, c, n) \
33 printk(KERN_DEBUG "Format: Pin Mux Config\n"); \
34 for (i = 0; i < n; i++) { \
36 printk(KERN_DEBUG "%s %d 0x%lx\n", \
43 #define IMX_NO_PAD_CTL 0x80000000
44 #define IMX_PAD_SION 0x40000000
59 unsigned pin,
bool is_mux,
unsigned mux)
66 if (pin_reg->
pid != pin)
75 dev_err(info->
dev,
"Pin(%s): unable to find pin reg map\n",
76 info->
pins[pin].name);
83 static const inline struct imx_pin_group *imx_pinctrl_find_group_by_name(
90 for (i = 0; i < info->
ngroups; i++) {
100 static int imx_get_groups_count(
struct pinctrl_dev *pctldev)
108 static const char *imx_get_group_name(
struct pinctrl_dev *pctldev,
114 return info->
groups[selector].name;
118 const unsigned **
pins,
127 *pins = info->
groups[selector].pins;
128 *npins = info->
groups[selector].npins;
139 static int imx_dt_node_to_map(
struct pinctrl_dev *pctldev,
155 grp = imx_pinctrl_find_group_by_name(info, np->
name);
157 dev_err(info->
dev,
"unable to find group for node %s\n",
162 for (i = 0; i < grp->
npins; i++) {
187 for (i = j = 0; i < grp->
npins; i++) {
198 dev_dbg(pctldev->
dev,
"maps: function %s group %s num %d\n",
199 (*map)->data.mux.function, (*map)->data.mux.group, map_num);
204 static void imx_dt_free_map(
struct pinctrl_dev *pctldev,
210 static struct pinctrl_ops imx_pctrl_ops = {
211 .get_groups_count = imx_get_groups_count,
212 .get_group_name = imx_get_group_name,
213 .get_group_pins = imx_get_group_pins,
214 .pin_dbg_show = imx_pin_dbg_show,
215 .dt_node_to_map = imx_dt_node_to_map,
216 .dt_free_map = imx_dt_free_map,
220 static int imx_pmx_enable(
struct pinctrl_dev *pctldev,
unsigned selector,
226 const unsigned *
pins, *mux;
227 unsigned int npins, pin_id;
238 WARN_ON(!pins || !npins || !mux);
240 dev_dbg(ipctl->
dev,
"enable function %s group %s\n",
243 for (i = 0; i < npins; i++) {
246 pin_reg = imx_find_pin_reg(info, pin_id, 1, mux[i]);
251 dev_err(ipctl->
dev,
"Pin(%s) does not support mux function\n",
252 info->
pins[pin_id].name);
257 dev_dbg(ipctl->
dev,
"write: offset 0x%x val 0x%x\n",
264 "==>select_input: offset 0x%x val 0x%x\n",
272 static int imx_pmx_get_funcs_count(
struct pinctrl_dev *pctldev)
280 static const char *imx_pmx_get_func_name(
struct pinctrl_dev *pctldev,
289 static int imx_pmx_get_groups(
struct pinctrl_dev *pctldev,
unsigned selector,
290 const char *
const **
groups,
291 unsigned *
const num_groups)
296 *groups = info->
functions[selector].groups;
297 *num_groups = info->
functions[selector].num_groups;
302 static struct pinmux_ops imx_pmx_ops = {
303 .get_functions_count = imx_pmx_get_funcs_count,
304 .get_function_name = imx_pmx_get_func_name,
305 .get_function_groups = imx_pmx_get_groups,
306 .enable = imx_pmx_enable,
309 static int imx_pinconf_get(
struct pinctrl_dev *pctldev,
310 unsigned pin_id,
unsigned long *
config)
316 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
321 dev_err(info->
dev,
"Pin(%s) does not support config function\n",
322 info->
pins[pin_id].name);
331 static int imx_pinconf_set(
struct pinctrl_dev *pctldev,
332 unsigned pin_id,
unsigned long config)
338 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
343 dev_err(info->
dev,
"Pin(%s) does not support config function\n",
344 info->
pins[pin_id].name);
349 info->
pins[pin_id].name);
352 dev_dbg(ipctl->
dev,
"write: offset 0x%x val 0x%lx\n",
358 static void imx_pinconf_dbg_show(
struct pinctrl_dev *pctldev,
359 struct seq_file *s,
unsigned pin_id)
366 pin_reg = imx_find_pin_reg(info, pin_id, 0, 0);
367 if (!pin_reg || !pin_reg->
conf_reg) {
376 static void imx_pinconf_group_dbg_show(
struct pinctrl_dev *pctldev,
391 for (i = 0; i < grp->
npins; i++) {
393 ret = imx_pinconf_get(pctldev, grp->
pins[i], &config);
401 .pin_config_get = imx_pinconf_get,
402 .pin_config_set = imx_pinconf_set,
403 .pin_config_dbg_show = imx_pinconf_dbg_show,
404 .pin_config_group_dbg_show = imx_pinconf_group_dbg_show,
407 static struct pinctrl_desc imx_pinctrl_desc = {
408 .pctlops = &imx_pctrl_ops,
409 .pmxops = &imx_pmx_ops,
416 unsigned int pin_func_id,
unsigned int *pin_id,
422 *pin_id = info->
pin_regs[pin_func_id].pid;
423 *mux = info->
pin_regs[pin_func_id].mux_mode;
433 unsigned int pin_func_id;
450 size /=
sizeof(*list);
451 if (!size || size % 2) {
452 dev_err(info->
dev,
"wrong pins number or pins and configs should be pairs\n");
456 grp->
npins = size / 2;
463 for (i = 0, j = 0; i <
size; i += 2, j++) {
465 ret = imx_pinctrl_get_pin_id_and_mux(info, pin_func_id,
468 dev_err(info->
dev,
"get invalid pin function id\n");
475 grp->
configs[
j] = config & ~IMX_PAD_SION;
492 static u32 grp_index;
511 grp = &info->
groups[grp_index++];
512 ret = imx_pinctrl_parse_groups(child, grp, info, i++);
532 nfuncs = of_get_child_count(np);
534 dev_err(&pdev->
dev,
"no functions defined\n");
546 info->ngroups += of_get_child_count(child);
553 ret = imx_pinctrl_parse_functions(child, info, i++);
555 dev_err(&pdev->
dev,
"failed to parse function\n");
590 imx_pinctrl_desc.name = dev_name(&pdev->
dev);
591 imx_pinctrl_desc.pins = info->
pins;
592 imx_pinctrl_desc.npins = info->
npins;
594 ret = imx_pinctrl_probe_dt(pdev, info);
596 dev_err(&pdev->
dev,
"fail to probe dt properties\n");
602 platform_set_drvdata(pdev, ipctl);
605 dev_err(&pdev->
dev,
"could not register IMX pinctrl driver\n");
609 dev_info(&pdev->
dev,
"initialized IMX pinctrl driver\n");
616 struct imx_pinctrl *ipctl = platform_get_drvdata(pdev);