On Tue, Mar 31, 2020 at 06:25:44PM +0300, Andy Shevchenko wrote: > 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@xxxxxxxxxxxxxxx> > --- > drivers/pinctrl/intel/pinctrl-intel.c | 19 +++++++++++++------ > drivers/pinctrl/intel/pinctrl-intel.h | 5 +++-- > 2 files changed, 16 insertions(+), 8 deletions(-) > > diff --git a/drivers/pinctrl/intel/pinctrl-intel.c b/drivers/pinctrl/intel/pinctrl-intel.c > index 74fdfd2b9ff5..a1b286dc7008 100644 > --- a/drivers/pinctrl/intel/pinctrl-intel.c > +++ b/drivers/pinctrl/intel/pinctrl-intel.c > @@ -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); > diff --git a/drivers/pinctrl/intel/pinctrl-intel.h b/drivers/pinctrl/intel/pinctrl-intel.h > index c6f066f6d3fb..df11bd6e4a80 100644 > --- a/drivers/pinctrl/intel/pinctrl-intel.h > +++ b/drivers/pinctrl/intel/pinctrl-intel.h > @@ -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 > @@ -64,6 +63,8 @@ struct intel_padgroup { > unsigned int reg_num; > unsigned int base; > unsigned int size; > +#define INTEL_GPIO_BASE_MATCH 0 /* matches with @base */ > +#define INTEL_GPIO_BASE_NOMAP (-1) /* no GPIO mapping should be created */ Maybe use enum and add kernel-doc there? > int gpio_base; > unsigned int padown_num; > }; > -- > 2.25.1