pinctrl: intel: Introduce common flags for GPIO mapping scheme
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Mon, 13 Apr 2020 11:18:20 +0000 (14:18 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 14 Apr 2020 13:17:12 +0000 (16:17 +0300)
Few drivers are using the same flag to tell Intel pin control core
how to interpret GPIO base.

Provide a generic flags so all drivers can use.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/pinctrl/intel/pinctrl-intel.c
drivers/pinctrl/intel/pinctrl-intel.h

index 74fdfd2..a1b286d 100644 (file)
@@ -798,7 +798,7 @@ static int intel_gpio_to_pin(struct intel_pinctrl *pctrl, unsigned int offset,
                for (j = 0; j < comm->ngpps; j++) {
                        const struct intel_padgroup *pgrp = &comm->gpps[j];
 
-                       if (pgrp->gpio_base < 0)
+                       if (pgrp->gpio_base == INTEL_GPIO_BASE_NOMAP)
                                continue;
 
                        if (offset >= pgrp->gpio_base &&
@@ -1138,7 +1138,7 @@ static int intel_gpio_add_community_ranges(struct intel_pinctrl *pctrl,
        for (i = 0; i < community->ngpps; i++) {
                const struct intel_padgroup *gpp = &community->gpps[i];
 
-               if (gpp->gpio_base < 0)
+               if (gpp->gpio_base == INTEL_GPIO_BASE_NOMAP)
                        continue;
 
                ret = gpiochip_add_pin_range(&pctrl->chip, dev_name(pctrl->dev),
@@ -1180,7 +1180,7 @@ static unsigned int intel_gpio_ngpio(const struct intel_pinctrl *pctrl)
                for (j = 0; j < community->ngpps; j++) {
                        const struct intel_padgroup *gpp = &community->gpps[j];
 
-                       if (gpp->gpio_base < 0)
+                       if (gpp->gpio_base == INTEL_GPIO_BASE_NOMAP)
                                continue;
 
                        if (gpp->gpio_base + gpp->size > ngpio)
@@ -1276,8 +1276,15 @@ static int intel_pinctrl_add_padgroups(struct intel_pinctrl *pctrl,
                if (gpps[i].size > 32)
                        return -EINVAL;
 
-               if (!gpps[i].gpio_base)
-                       gpps[i].gpio_base = gpps[i].base;
+               /* Special treatment for GPIO base */
+               switch (gpps[i].gpio_base) {
+                       case INTEL_GPIO_BASE_MATCH:
+                               gpps[i].gpio_base = gpps[i].base;
+                               break;
+                       case INTEL_GPIO_BASE_NOMAP:
+                       default:
+                               break;
+               }
 
                gpps[i].padown_num = padown_num;
 
@@ -1596,7 +1603,7 @@ static void intel_restore_hostown(struct intel_pinctrl *pctrl, unsigned int c,
        struct device *dev = pctrl->dev;
        u32 requested;
 
-       if (padgrp->gpio_base < 0)
+       if (padgrp->gpio_base == INTEL_GPIO_BASE_NOMAP)
                return;
 
        requested = intel_gpio_is_requested(&pctrl->chip, padgrp->gpio_base, padgrp->size);
index c6f066f..89f38fa 100644 (file)
@@ -53,8 +53,7 @@ struct intel_function {
  * @reg_num: GPI_IS register number
  * @base: Starting pin of this group
  * @size: Size of this group (maximum is 32).
- * @gpio_base: Starting GPIO base of this group (%0 if matches with @base,
- *            and %-1 if no GPIO mapping should be created)
+ * @gpio_base: Starting GPIO base of this group
  * @padown_num: PAD_OWN register number (assigned by the core driver)
  *
  * If pad groups of a community are not the same size, use this structure
@@ -69,6 +68,17 @@ struct intel_padgroup {
 };
 
 /**
+ * enum - Special treatment for GPIO base in pad group
+ *
+ * @INTEL_GPIO_BASE_NOMAP:     no GPIO mapping should be created
+ * @INTEL_GPIO_BASE_MATCH:     matches with starting pin number
+ */
+enum {
+       INTEL_GPIO_BASE_NOMAP   = -1,
+       INTEL_GPIO_BASE_MATCH   = 0,
+};
+
+/**
  * struct intel_community - Intel pin community description
  * @barno: MMIO BAR number where registers for this community reside
  * @padown_offset: Register offset of PAD_OWN register from @regs. If %0