These changes are a raw update to a vanilla kernel 4.1.10, with the
[kvmfornfv.git] / kernel / drivers / pinctrl / pinctrl-at91.c
index 2f797cb..7747814 100644 (file)
@@ -320,6 +320,9 @@ static const struct pinctrl_ops at91_pctrl_ops = {
 static void __iomem *pin_to_controller(struct at91_pinctrl *info,
                                 unsigned int bank)
 {
+       if (!gpio_chips[bank])
+               return NULL;
+
        return gpio_chips[bank]->regbase;
 }
 
@@ -729,6 +732,10 @@ static int at91_pmx_set(struct pinctrl_dev *pctldev, unsigned selector,
                pin = &pins_conf[i];
                at91_pin_dbg(info->dev, pin);
                pio = pin_to_controller(info, pin->bank);
+
+               if (!pio)
+                       continue;
+
                mask = pin_to_mask(pin->pin);
                at91_mux_disable_interrupt(pio, mask);
                switch (pin->mux) {
@@ -848,6 +855,10 @@ static int at91_pinconf_get(struct pinctrl_dev *pctldev,
        *config = 0;
        dev_dbg(info->dev, "%s:%d, pin_id=%d", __func__, __LINE__, pin_id);
        pio = pin_to_controller(info, pin_to_bank(pin_id));
+
+       if (!pio)
+               return -EINVAL;
+
        pin = pin_id % MAX_NB_GPIO_PER_BANK;
 
        if (at91_mux_get_multidrive(pio, pin))
@@ -889,6 +900,10 @@ static int at91_pinconf_set(struct pinctrl_dev *pctldev,
                        "%s:%d, pin_id=%d, config=0x%lx",
                        __func__, __LINE__, pin_id, config);
                pio = pin_to_controller(info, pin_to_bank(pin_id));
+
+               if (!pio)
+                       return -EINVAL;
+
                pin = pin_id % MAX_NB_GPIO_PER_BANK;
                mask = pin_to_mask(pin);