13 #include <linux/module.h>
15 #include <linux/slab.h>
17 #include <linux/list.h>
28 #define DRIVER_NAME "pinctrl-single"
29 #define PCS_MUX_PINS_NAME "pinctrl-single,pins"
30 #define PCS_MUX_BITS_NAME "pinctrl-single,bits"
31 #define PCS_REG_NAME_LEN ((sizeof(unsigned long) * 2) + 1)
32 #define PCS_OFF_DISABLED ~0U
89 struct pinctrl_pin_desc *
pa;
197 static int pcs_get_groups_count(
struct pinctrl_dev *pctldev)
206 static const char *pcs_get_group_name(
struct pinctrl_dev *pctldev,
215 dev_err(pcs->
dev,
"%s could not find pingroup%i\n",
216 __func__, gselector);
223 static int pcs_get_group_pins(
struct pinctrl_dev *pctldev,
225 const unsigned **
pins,
234 dev_err(pcs->
dev,
"%s could not find pingroup%i\n",
235 __func__, gselector);
239 *pins = group->
gpins;
245 static void pcs_pin_dbg_show(
struct pinctrl_dev *pctldev,
254 val = pcs->
read(pcs->
base + offset);
260 static void pcs_dt_free_map(
struct pinctrl_dev *pctldev,
269 static int pcs_dt_node_to_map(
struct pinctrl_dev *pctldev,
273 static struct pinctrl_ops pcs_pinctrl_ops = {
274 .get_groups_count = pcs_get_groups_count,
275 .get_group_name = pcs_get_group_name,
276 .get_group_pins = pcs_get_group_pins,
277 .pin_dbg_show = pcs_pin_dbg_show,
278 .dt_node_to_map = pcs_dt_node_to_map,
279 .dt_free_map = pcs_dt_free_map,
282 static int pcs_get_functions_count(
struct pinctrl_dev *pctldev)
291 static const char *pcs_get_function_name(
struct pinctrl_dev *pctldev,
300 dev_err(pcs->
dev,
"%s could not find function%i\n",
301 __func__, fselector);
308 static int pcs_get_function_groups(
struct pinctrl_dev *pctldev,
310 const char *
const **groups,
311 unsigned *
const ngroups)
319 dev_err(pcs->
dev,
"%s could not find function%i\n",
320 __func__, fselector);
329 static int pcs_enable(
struct pinctrl_dev *pctldev,
unsigned fselector,
342 func->
name, fselector);
344 for (i = 0; i < func->
nvals; i++) {
348 vals = &func->
vals[
i];
363 static void pcs_disable(
struct pinctrl_dev *pctldev,
unsigned fselector,
373 dev_err(pcs->
dev,
"%s could not find function%i\n",
374 __func__, fselector);
385 dev_dbg(pcs->
dev,
"ignoring disable for %s function%i\n",
386 func->
name, fselector);
390 dev_dbg(pcs->
dev,
"disabling function%i %s\n",
391 fselector, func->
name);
393 for (i = 0; i < func->
nvals; i++) {
397 vals = &func->
vals[
i];
405 static int pcs_request_gpio(
struct pinctrl_dev *pctldev,
406 struct pinctrl_gpio_range *
range,
unsigned offset)
411 static struct pinmux_ops pcs_pinmux_ops = {
412 .get_functions_count = pcs_get_functions_count,
413 .get_function_name = pcs_get_function_name,
414 .get_function_groups = pcs_get_function_groups,
415 .enable = pcs_enable,
416 .disable = pcs_disable,
417 .gpio_request_enable = pcs_request_gpio,
420 static int pcs_pinconf_get(
struct pinctrl_dev *pctldev,
426 static int pcs_pinconf_set(
struct pinctrl_dev *pctldev,
432 static int pcs_pinconf_group_get(
struct pinctrl_dev *pctldev,
433 unsigned group,
unsigned long *
config)
438 static int pcs_pinconf_group_set(
struct pinctrl_dev *pctldev,
439 unsigned group,
unsigned long config)
444 static void pcs_pinconf_dbg_show(
struct pinctrl_dev *pctldev,
445 struct seq_file *s,
unsigned offset)
449 static void pcs_pinconf_group_dbg_show(
struct pinctrl_dev *pctldev,
454 static struct pinconf_ops pcs_pinconf_ops = {
455 .pin_config_get = pcs_pinconf_get,
456 .pin_config_set = pcs_pinconf_set,
457 .pin_config_group_get = pcs_pinconf_group_get,
458 .pin_config_group_set = pcs_pinconf_group_set,
459 .pin_config_dbg_show = pcs_pinconf_dbg_show,
460 .pin_config_group_dbg_show = pcs_pinconf_group_dbg_show,
470 struct pinctrl_pin_desc *
pin;
475 if (i >= pcs->
desc.npins) {
481 pin = &pcs->
pins.pa[
i];
484 (
unsigned long)pcs->
res->start + offset);
485 pin->name = pn->
name;
503 int mux_bytes, nr_pins,
i;
506 nr_pins = pcs->
size / mux_bytes;
508 dev_dbg(pcs->
dev,
"allocating %i pins\n", nr_pins);
510 sizeof(*pcs->
pins.pa) * nr_pins,
522 pcs->
desc.npins = nr_pins;
524 for (i = 0; i < pcs->
desc.npins; i++) {
528 offset = i * mux_bytes;
529 res = pcs_add_pin(pcs, offset);
531 dev_err(pcs->
dev,
"error adding pins: %i\n", res);
563 function->name =
name;
564 function->vals =
vals;
565 function->nvals =
nvals;
578 static void pcs_remove_function(
struct pcs_device *pcs,
584 for (i = 0; i < pcs->
nfuncs; i++) {
588 if (found ==
function)
603 static int pcs_add_pingroup(
struct pcs_device *pcs,
636 static int pcs_get_pin_by_offset(
struct pcs_device *pcs,
unsigned offset)
640 if (offset >= pcs->
size) {
641 dev_err(pcs->
dev,
"mux offset out of range: 0x%x (0x%x)\n",
669 static int pcs_parse_one_pinctrl_entry(
struct pcs_device *pcs,
672 const char **pgnames)
692 if (size < (
sizeof(*mux) * params)) {
697 size /=
sizeof(*mux);
708 while (index < size) {
721 pin = pcs_get_pin_by_offset(pcs, offset);
724 "could not add functions for %s %ux\n",
731 pgnames[0] = np->
name;
732 function = pcs_add_function(pcs, np, np->
name, vals, found, pgnames, 1);
736 res = pcs_add_pingroup(pcs, np, np->
name, pins, found);
741 (*map)->data.mux.group = np->
name;
742 (*map)->data.mux.function = np->
name;
747 pcs_remove_function(pcs,
function);
764 static int pcs_dt_node_to_map(
struct pinctrl_dev *pctldev,
769 const char **pgnames;
786 ret = pcs_parse_one_pinctrl_entry(pcs, np_config, map, pgnames);
808 static void pcs_free_funcs(
struct pcs_device *pcs)
814 for (i = 0; i < pcs->
nfuncs; i++) {
835 static void pcs_free_pingroups(
struct pcs_device *pcs)
841 for (i = 0; i < pcs->
ngroups; i++) {
862 static void pcs_free_resources(
struct pcs_device *pcs)
868 pcs_free_pingroups(pcs);
871 #define PCS_GET_PROP_U32(name, reg, err) \
873 ret = of_property_read_u32(np, name, reg); \
875 dev_err(pcs->dev, err); \
905 "register width not specified\n");
908 "function register mask not specified\n");
912 ret = of_property_read_u32(np,
"pinctrl-single,function-off",
918 "pinctrl-single,bit-per-mux");
922 dev_err(pcs->
dev,
"could not get resource\n");
929 dev_err(pcs->
dev,
"could not get mem_region\n");
933 pcs->
size = resource_size(pcs->
res);
942 platform_set_drvdata(pdev, pcs);
944 switch (pcs->
width) {
946 pcs->
read = pcs_readb;
947 pcs->
write = pcs_writeb;
950 pcs->
read = pcs_readw;
951 pcs->
write = pcs_writew;
954 pcs->
read = pcs_readl;
955 pcs->
write = pcs_writel;
962 pcs->
desc.pctlops = &pcs_pinctrl_ops;
963 pcs->
desc.pmxops = &pcs_pinmux_ops;
964 pcs->
desc.confops = &pcs_pinconf_ops;
967 ret = pcs_allocate_pin_table(pcs);
973 dev_err(pcs->
dev,
"could not register single pinctrl driver\n");
984 pcs_free_resources(pcs);
991 struct pcs_device *pcs = platform_get_drvdata(pdev);
996 pcs_free_resources(pcs);
1013 .of_match_table = pcs_of_match,