|
@@ -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);
|
|
|
|