diff --git a/drivers/gpio/pinctrl/pinctrl-meson-s7.c b/drivers/gpio/pinctrl/pinctrl-meson-s7.c index 274c3b0ee..7b964648e 100644 --- a/drivers/gpio/pinctrl/pinctrl-meson-s7.c +++ b/drivers/gpio/pinctrl/pinctrl-meson-s7.c @@ -1078,6 +1078,7 @@ static struct meson_pinctrl_data meson_s7_periphs_pinctrl_data __refdata = { .pmx_ops = &meson_axg_pmx_ops, .pmx_data = &meson_s7_periphs_pmx_banks_data, .parse_dt = &meson_a1_parse_dt_extra, + .ds_mask = BIT(0), /* S7 does not exist DS0 */ }; static const struct of_device_id meson_s7_pinctrl_dt_match[] = { diff --git a/drivers/gpio/pinctrl/pinctrl-meson.c b/drivers/gpio/pinctrl/pinctrl-meson.c index 59e8ca4d1..2eacce968 100644 --- a/drivers/gpio/pinctrl/pinctrl-meson.c +++ b/drivers/gpio/pinctrl/pinctrl-meson.c @@ -382,6 +382,11 @@ static int meson_pinconf_set_drive_strength(struct meson_pinctrl *pc, ds_val = MESON_PINCONF_DRV_4000UA; } + if (BIT(ds_val) & pc->data->ds_mask) { + dev_err(pc->dev, "unsupported drive strength: ds%u\n", ds_val); + return -EOPNOTSUPP; + } + ret = regmap_update_bits(pc->reg_ds, reg, 0x3 << bit, ds_val << bit); if (ret) return ret; diff --git a/drivers/gpio/pinctrl/pinctrl-meson.h b/drivers/gpio/pinctrl/pinctrl-meson.h index fd1ea1232..ad7ebe5f0 100644 --- a/drivers/gpio/pinctrl/pinctrl-meson.h +++ b/drivers/gpio/pinctrl/pinctrl-meson.h @@ -152,6 +152,7 @@ struct meson_pinctrl_data { unsigned int pmx_expand_num; #endif #endif + unsigned int ds_mask; }; struct meson_pinctrl {