]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'pinctrl/for-next'
authorThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 12:59:39 +0000 (14:59 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 24 Oct 2013 12:59:39 +0000 (14:59 +0200)
1  2 
arch/blackfin/Kconfig
drivers/gpio/gpiolib.c

diff --combined arch/blackfin/Kconfig
index eb382aedd9a232c9d85173356bf4ed44d33fb6b5,74314bd8be39b5327ff305801903719be5acf4a1..e887b57c3176705d90beeebcc39123836f5eff1b
@@@ -52,6 -52,9 +52,9 @@@ config GENERIC_BU
  config ZONE_DMA
        def_bool y
  
+ config GENERIC_GPIO
+       def_bool y
  config FORCE_MAX_ZONEORDER
        int
        default "14"
@@@ -317,6 -320,14 +320,14 @@@ config BF53
        depends on (BF531 || BF532 || BF533 || BF534 || BF536 || BF537)
        default y
  
+ config GPIO_ADI
+       def_bool y
+       depends on (BF51x || BF52x || BF53x || BF538 || BF539 || BF561)
+ config PINCTRL
+       def_bool y
+       depends on BF54x || BF60x
  config MEM_MT48LC64M4A2FB_7E
        bool
        depends on (BFIN533_STAMP)
@@@ -1429,6 -1440,7 +1440,6 @@@ source "drivers/cpufreq/Kconfig
  config BFIN_CPU_FREQ
        bool
        depends on CPU_FREQ
 -      select CPU_FREQ_TABLE
        default y
  
  config CPU_VOLTAGE
diff --combined drivers/gpio/gpiolib.c
index dadbac2772676c842846944c7d21771e175885e2,b83b7e491f760a1d549d420f872c1c35a2872df8..4a34ca9c1768ea75fe7c8155bf8c07e2a7a11e7e
@@@ -136,7 -136,7 +136,7 @@@ static struct gpio_desc *gpio_to_desc(u
   */
  static int desc_to_gpio(const struct gpio_desc *desc)
  {
 -      return desc->chip->base + gpio_chip_hwgpio(desc);
 +      return desc - &gpio_desc[0];
  }
  
  
@@@ -408,7 -408,7 +408,7 @@@ static int gpio_setup_irq(struct gpio_d
                        IRQF_TRIGGER_FALLING : IRQF_TRIGGER_RISING;
  
        if (!value_sd) {
 -              value_sd = sysfs_get_dirent(dev->kobj.sd, NULL, "value");
 +              value_sd = sysfs_get_dirent(dev->kobj.sd, "value");
                if (!value_sd) {
                        ret = -ENODEV;
                        goto err_out;
@@@ -1319,6 -1319,53 +1319,53 @@@ EXPORT_SYMBOL_GPL(gpiochip_find)
  
  #ifdef CONFIG_PINCTRL
  
+ /**
+  * gpiochip_add_pingroup_range() - add a range for GPIO <-> pin mapping
+  * @chip: the gpiochip to add the range for
+  * @pinctrl: the dev_name() of the pin controller to map to
+  * @gpio_offset: the start offset in the current gpio_chip number space
+  * @pin_group: name of the pin group inside the pin controller
+  */
+ int gpiochip_add_pingroup_range(struct gpio_chip *chip,
+                       struct pinctrl_dev *pctldev,
+                       unsigned int gpio_offset, const char *pin_group)
+ {
+       struct gpio_pin_range *pin_range;
+       int ret;
+       pin_range = kzalloc(sizeof(*pin_range), GFP_KERNEL);
+       if (!pin_range) {
+               pr_err("%s: GPIO chip: failed to allocate pin ranges\n",
+                               chip->label);
+               return -ENOMEM;
+       }
+       /* Use local offset as range ID */
+       pin_range->range.id = gpio_offset;
+       pin_range->range.gc = chip;
+       pin_range->range.name = chip->label;
+       pin_range->range.base = chip->base + gpio_offset;
+       pin_range->pctldev = pctldev;
+       ret = pinctrl_get_group_pins(pctldev, pin_group,
+                                       &pin_range->range.pins,
+                                       &pin_range->range.npins);
+       if (ret < 0)
+               return ret;
+       pinctrl_add_gpio_range(pctldev, &pin_range->range);
+       pr_debug("GPIO chip %s: created GPIO range %d->%d ==> %s PINGRP %s\n",
+                chip->label, gpio_offset,
+                gpio_offset + pin_range->range.npins - 1,
+                pinctrl_dev_get_devname(pctldev), pin_group);
+       list_add_tail(&pin_range->node, &chip->pin_ranges);
+       return 0;
+ }
+ EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);
  /**
   * gpiochip_add_pin_range() - add a range for GPIO <-> pin mapping
   * @chip: the gpiochip to add the range for
@@@ -1398,7 -1445,7 +1445,7 @@@ static int gpiod_request(struct gpio_de
        int                     status = -EPROBE_DEFER;
        unsigned long           flags;
  
 -      if (!desc || !desc->chip) {
 +      if (!desc) {
                pr_warn("%s: invalid GPIO\n", __func__);
                return -EINVAL;
        }
        spin_lock_irqsave(&gpio_lock, flags);
  
        chip = desc->chip;
 +      if (chip == NULL)
 +              goto done;
  
        if (!try_module_get(chip->owner))
                goto done;