root/drivers/staging/mt7621-pinctrl/pinctrl-rt2880.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. rt2880_get_group_count
  2. rt2880_get_group_name
  3. rt2880_get_group_pins
  4. rt2880_pmx_func_count
  5. rt2880_pmx_func_name
  6. rt2880_pmx_group_get_groups
  7. rt2880_pmx_group_enable
  8. rt2880_pmx_group_gpio_request_enable
  9. rt2880_pinmux_index
  10. rt2880_pinmux_pins
  11. rt2880_pinmux_probe
  12. rt2880_pinmux_init

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  *  Copyright (C) 2013 John Crispin <blogic@openwrt.org>
   4  */
   5 
   6 #include <linux/module.h>
   7 #include <linux/device.h>
   8 #include <linux/io.h>
   9 #include <linux/platform_device.h>
  10 #include <linux/slab.h>
  11 #include <linux/of.h>
  12 #include <linux/pinctrl/pinctrl.h>
  13 #include <linux/pinctrl/pinconf.h>
  14 #include <linux/pinctrl/pinconf-generic.h>
  15 #include <linux/pinctrl/pinmux.h>
  16 #include <linux/pinctrl/consumer.h>
  17 #include <linux/pinctrl/machine.h>
  18 
  19 #include <asm/mach-ralink/ralink_regs.h>
  20 #include <asm/mach-ralink/pinmux.h>
  21 #include <asm/mach-ralink/mt7620.h>
  22 
  23 #include "core.h"
  24 #include "pinctrl-utils.h"
  25 
  26 #define SYSC_REG_GPIO_MODE      0x60
  27 #define SYSC_REG_GPIO_MODE2     0x64
  28 
  29 struct rt2880_priv {
  30         struct device *dev;
  31 
  32         struct pinctrl_pin_desc *pads;
  33         struct pinctrl_desc *desc;
  34 
  35         struct rt2880_pmx_func **func;
  36         int func_count;
  37 
  38         struct rt2880_pmx_group *groups;
  39         const char **group_names;
  40         int group_count;
  41 
  42         u8 *gpio;
  43         int max_pins;
  44 };
  45 
  46 static int rt2880_get_group_count(struct pinctrl_dev *pctrldev)
  47 {
  48         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
  49 
  50         return p->group_count;
  51 }
  52 
  53 static const char *rt2880_get_group_name(struct pinctrl_dev *pctrldev,
  54                                          unsigned int group)
  55 {
  56         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
  57 
  58         return (group >= p->group_count) ? NULL : p->group_names[group];
  59 }
  60 
  61 static int rt2880_get_group_pins(struct pinctrl_dev *pctrldev,
  62                                  unsigned int group,
  63                                  const unsigned int **pins,
  64                                  unsigned int *num_pins)
  65 {
  66         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
  67 
  68         if (group >= p->group_count)
  69                 return -EINVAL;
  70 
  71         *pins = p->groups[group].func[0].pins;
  72         *num_pins = p->groups[group].func[0].pin_count;
  73 
  74         return 0;
  75 }
  76 
  77 static const struct pinctrl_ops rt2880_pctrl_ops = {
  78         .get_groups_count       = rt2880_get_group_count,
  79         .get_group_name         = rt2880_get_group_name,
  80         .get_group_pins         = rt2880_get_group_pins,
  81         .dt_node_to_map         = pinconf_generic_dt_node_to_map_all,
  82         .dt_free_map            = pinconf_generic_dt_free_map,
  83 };
  84 
  85 static int rt2880_pmx_func_count(struct pinctrl_dev *pctrldev)
  86 {
  87         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
  88 
  89         return p->func_count;
  90 }
  91 
  92 static const char *rt2880_pmx_func_name(struct pinctrl_dev *pctrldev,
  93                                         unsigned int func)
  94 {
  95         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
  96 
  97         return p->func[func]->name;
  98 }
  99 
 100 static int rt2880_pmx_group_get_groups(struct pinctrl_dev *pctrldev,
 101                                        unsigned int func,
 102                                        const char * const **groups,
 103                                        unsigned int * const num_groups)
 104 {
 105         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
 106 
 107         if (p->func[func]->group_count == 1)
 108                 *groups = &p->group_names[p->func[func]->groups[0]];
 109         else
 110                 *groups = p->group_names;
 111 
 112         *num_groups = p->func[func]->group_count;
 113 
 114         return 0;
 115 }
 116 
 117 static int rt2880_pmx_group_enable(struct pinctrl_dev *pctrldev,
 118                                    unsigned int func, unsigned int group)
 119 {
 120         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
 121         u32 mode = 0;
 122         u32 reg = SYSC_REG_GPIO_MODE;
 123         int i;
 124         int shift;
 125 
 126         /* dont allow double use */
 127         if (p->groups[group].enabled) {
 128                 dev_err(p->dev, "%s is already enabled\n",
 129                         p->groups[group].name);
 130                 return -EBUSY;
 131         }
 132 
 133         p->groups[group].enabled = 1;
 134         p->func[func]->enabled = 1;
 135 
 136         shift = p->groups[group].shift;
 137         if (shift >= 32) {
 138                 shift -= 32;
 139                 reg = SYSC_REG_GPIO_MODE2;
 140         }
 141         mode = rt_sysc_r32(reg);
 142         mode &= ~(p->groups[group].mask << shift);
 143 
 144         /* mark the pins as gpio */
 145         for (i = 0; i < p->groups[group].func[0].pin_count; i++)
 146                 p->gpio[p->groups[group].func[0].pins[i]] = 1;
 147 
 148         /* function 0 is gpio and needs special handling */
 149         if (func == 0) {
 150                 mode |= p->groups[group].gpio << shift;
 151         } else {
 152                 for (i = 0; i < p->func[func]->pin_count; i++)
 153                         p->gpio[p->func[func]->pins[i]] = 0;
 154                 mode |= p->func[func]->value << shift;
 155         }
 156         rt_sysc_w32(mode, reg);
 157 
 158         return 0;
 159 }
 160 
 161 static int rt2880_pmx_group_gpio_request_enable(struct pinctrl_dev *pctrldev,
 162                                                 struct pinctrl_gpio_range *range,
 163                                                 unsigned int pin)
 164 {
 165         struct rt2880_priv *p = pinctrl_dev_get_drvdata(pctrldev);
 166 
 167         if (!p->gpio[pin]) {
 168                 dev_err(p->dev, "pin %d is not set to gpio mux\n", pin);
 169                 return -EINVAL;
 170         }
 171 
 172         return 0;
 173 }
 174 
 175 static const struct pinmux_ops rt2880_pmx_group_ops = {
 176         .get_functions_count    = rt2880_pmx_func_count,
 177         .get_function_name      = rt2880_pmx_func_name,
 178         .get_function_groups    = rt2880_pmx_group_get_groups,
 179         .set_mux                = rt2880_pmx_group_enable,
 180         .gpio_request_enable    = rt2880_pmx_group_gpio_request_enable,
 181 };
 182 
 183 static struct pinctrl_desc rt2880_pctrl_desc = {
 184         .owner          = THIS_MODULE,
 185         .name           = "rt2880-pinmux",
 186         .pctlops        = &rt2880_pctrl_ops,
 187         .pmxops         = &rt2880_pmx_group_ops,
 188 };
 189 
 190 static struct rt2880_pmx_func gpio_func = {
 191         .name = "gpio",
 192 };
 193 
 194 static int rt2880_pinmux_index(struct rt2880_priv *p)
 195 {
 196         struct rt2880_pmx_func **f;
 197         struct rt2880_pmx_group *mux = p->groups;
 198         int i, j, c = 0;
 199 
 200         /* count the mux functions */
 201         while (mux->name) {
 202                 p->group_count++;
 203                 mux++;
 204         }
 205 
 206         /* allocate the group names array needed by the gpio function */
 207         p->group_names = devm_kcalloc(p->dev, p->group_count,
 208                                       sizeof(char *), GFP_KERNEL);
 209         if (!p->group_names)
 210                 return -1;
 211 
 212         for (i = 0; i < p->group_count; i++) {
 213                 p->group_names[i] = p->groups[i].name;
 214                 p->func_count += p->groups[i].func_count;
 215         }
 216 
 217         /* we have a dummy function[0] for gpio */
 218         p->func_count++;
 219 
 220         /* allocate our function and group mapping index buffers */
 221         f = p->func = devm_kcalloc(p->dev,
 222                                    p->func_count,
 223                                    sizeof(struct rt2880_pmx_func),
 224                                    GFP_KERNEL);
 225         gpio_func.groups = devm_kcalloc(p->dev, p->group_count, sizeof(int),
 226                                         GFP_KERNEL);
 227         if (!f || !gpio_func.groups)
 228                 return -1;
 229 
 230         /* add a backpointer to the function so it knows its group */
 231         gpio_func.group_count = p->group_count;
 232         for (i = 0; i < gpio_func.group_count; i++)
 233                 gpio_func.groups[i] = i;
 234 
 235         f[c] = &gpio_func;
 236         c++;
 237 
 238         /* add remaining functions */
 239         for (i = 0; i < p->group_count; i++) {
 240                 for (j = 0; j < p->groups[i].func_count; j++) {
 241                         f[c] = &p->groups[i].func[j];
 242                         f[c]->groups = devm_kzalloc(p->dev, sizeof(int),
 243                                                     GFP_KERNEL);
 244                         f[c]->groups[0] = i;
 245                         f[c]->group_count = 1;
 246                         c++;
 247                 }
 248         }
 249         return 0;
 250 }
 251 
 252 static int rt2880_pinmux_pins(struct rt2880_priv *p)
 253 {
 254         int i, j;
 255 
 256         /*
 257          * loop over the functions and initialize the pins array.
 258          * also work out the highest pin used.
 259          */
 260         for (i = 0; i < p->func_count; i++) {
 261                 int pin;
 262 
 263                 if (!p->func[i]->pin_count)
 264                         continue;
 265 
 266                 p->func[i]->pins = devm_kcalloc(p->dev,
 267                                                 p->func[i]->pin_count,
 268                                                 sizeof(int),
 269                                                 GFP_KERNEL);
 270                 for (j = 0; j < p->func[i]->pin_count; j++)
 271                         p->func[i]->pins[j] = p->func[i]->pin_first + j;
 272 
 273                 pin = p->func[i]->pin_first + p->func[i]->pin_count;
 274                 if (pin > p->max_pins)
 275                         p->max_pins = pin;
 276         }
 277 
 278         /* the buffer that tells us which pins are gpio */
 279         p->gpio = devm_kcalloc(p->dev, p->max_pins, sizeof(u8), GFP_KERNEL);
 280         /* the pads needed to tell pinctrl about our pins */
 281         p->pads = devm_kcalloc(p->dev, p->max_pins,
 282                                sizeof(struct pinctrl_pin_desc), GFP_KERNEL);
 283         if (!p->pads || !p->gpio) {
 284                 dev_err(p->dev, "Failed to allocate gpio data\n");
 285                 return -ENOMEM;
 286         }
 287 
 288         memset(p->gpio, 1, sizeof(u8) * p->max_pins);
 289         for (i = 0; i < p->func_count; i++) {
 290                 if (!p->func[i]->pin_count)
 291                         continue;
 292 
 293                 for (j = 0; j < p->func[i]->pin_count; j++)
 294                         p->gpio[p->func[i]->pins[j]] = 0;
 295         }
 296 
 297         /* pin 0 is always a gpio */
 298         p->gpio[0] = 1;
 299 
 300         /* set the pads */
 301         for (i = 0; i < p->max_pins; i++) {
 302                 /* strlen("ioXY") + 1 = 5 */
 303                 char *name = devm_kzalloc(p->dev, 5, GFP_KERNEL);
 304 
 305                 if (!name)
 306                         return -ENOMEM;
 307                 snprintf(name, 5, "io%d", i);
 308                 p->pads[i].number = i;
 309                 p->pads[i].name = name;
 310         }
 311         p->desc->pins = p->pads;
 312         p->desc->npins = p->max_pins;
 313 
 314         return 0;
 315 }
 316 
 317 static int rt2880_pinmux_probe(struct platform_device *pdev)
 318 {
 319         struct rt2880_priv *p;
 320         struct pinctrl_dev *dev;
 321         struct device_node *np;
 322 
 323         if (!rt2880_pinmux_data)
 324                 return -ENOTSUPP;
 325 
 326         /* setup the private data */
 327         p = devm_kzalloc(&pdev->dev, sizeof(struct rt2880_priv), GFP_KERNEL);
 328         if (!p)
 329                 return -ENOMEM;
 330 
 331         p->dev = &pdev->dev;
 332         p->desc = &rt2880_pctrl_desc;
 333         p->groups = rt2880_pinmux_data;
 334         platform_set_drvdata(pdev, p);
 335 
 336         /* init the device */
 337         if (rt2880_pinmux_index(p)) {
 338                 dev_err(&pdev->dev, "failed to load index\n");
 339                 return -EINVAL;
 340         }
 341         if (rt2880_pinmux_pins(p)) {
 342                 dev_err(&pdev->dev, "failed to load pins\n");
 343                 return -EINVAL;
 344         }
 345         dev = pinctrl_register(p->desc, &pdev->dev, p);
 346         if (IS_ERR(dev))
 347                 return PTR_ERR(dev);
 348 
 349         /* finalize by adding gpio ranges for enables gpio controllers */
 350         for_each_compatible_node(np, NULL, "ralink,rt2880-gpio") {
 351                 const __be32 *ngpio, *gpiobase;
 352                 struct pinctrl_gpio_range *range;
 353 
 354                 if (!of_device_is_available(np))
 355                         continue;
 356 
 357                 ngpio = of_get_property(np, "ralink,num-gpios", NULL);
 358                 gpiobase = of_get_property(np, "ralink,gpio-base", NULL);
 359                 if (!ngpio || !gpiobase) {
 360                         dev_err(&pdev->dev, "failed to load chip info\n");
 361                         of_node_put(np);
 362                         return -EINVAL;
 363                 }
 364 
 365                 range = devm_kzalloc(p->dev, sizeof(*range), GFP_KERNEL);
 366                 if (!range) {
 367                         of_node_put(np);
 368                         return -ENOMEM;
 369                 }
 370                 range->name = "pio";
 371                 range->npins = __be32_to_cpu(*ngpio);
 372                 range->base = __be32_to_cpu(*gpiobase);
 373                 range->pin_base = range->base;
 374                 pinctrl_add_gpio_range(dev, range);
 375         }
 376 
 377         return 0;
 378 }
 379 
 380 static const struct of_device_id rt2880_pinmux_match[] = {
 381         { .compatible = "ralink,rt2880-pinmux" },
 382         {},
 383 };
 384 MODULE_DEVICE_TABLE(of, rt2880_pinmux_match);
 385 
 386 static struct platform_driver rt2880_pinmux_driver = {
 387         .probe = rt2880_pinmux_probe,
 388         .driver = {
 389                 .name = "rt2880-pinmux",
 390                 .of_match_table = rt2880_pinmux_match,
 391         },
 392 };
 393 
 394 int __init rt2880_pinmux_init(void)
 395 {
 396         return platform_driver_register(&rt2880_pinmux_driver);
 397 }
 398 
 399 core_initcall_sync(rt2880_pinmux_init);

/* [<][>][^][v][top][bottom][index][help] */