On 14/03/2019 17:37, Jerome Brunet wrote:
> From: Guillaume La Roque <[email protected]>
> 
> drive-strength is a new feature needed for G12A SoC.
> the default DS setting after boot is usually 0.5mA and it is not enough for
> many functions. We need to be able to set the drive strength to reliably
> enable things like MMC, I2C, etc ...
> 
> Signed-off-by: Guillaume La Roque <[email protected]>
> Signed-off-by: Jerome Brunet <[email protected]>
> ---
>  drivers/pinctrl/meson/pinctrl-meson-g12a.c |  36 ++---
>  drivers/pinctrl/meson/pinctrl-meson.c      | 166 ++++++++++++++++-----
>  drivers/pinctrl/meson/pinctrl-meson.h      |  20 ++-
>  3 files changed, 162 insertions(+), 60 deletions(-)
> 
> diff --git a/drivers/pinctrl/meson/pinctrl-meson-g12a.c 
> b/drivers/pinctrl/meson/pinctrl-meson-g12a.c
> index d494492e98e9..3475cd7bd2af 100644
> --- a/drivers/pinctrl/meson/pinctrl-meson-g12a.c
> +++ b/drivers/pinctrl/meson/pinctrl-meson-g12a.c

[...]

>  static int meson_pinconf_get(struct pinctrl_dev *pcdev, unsigned int pin,
>                            unsigned long *config)
>  {
>       struct meson_pinctrl *pc = pinctrl_dev_get_drvdata(pcdev);
>       enum pin_config_param param = pinconf_to_config_param(*config);
>       u16 arg;
> +     int ret;
>  
>       switch (param) {
>       case PIN_CONFIG_BIAS_DISABLE:
> @@ -291,6 +373,10 @@ static int meson_pinconf_get(struct pinctrl_dev *pcdev, 
> unsigned int pin,
>               else
>                       return -EINVAL;
>               break;
> +     case PIN_CONFIG_DRIVE_STRENGTH:
> +             ret = meson_pinconf_get_drive_strength(pc, pin, &arg);
> +             if (ret)
> +                     return ret;

Missing break here !

Neil


>       default:
>               return -ENOTSUPP;
>       }
> diff --git a/drivers/pinctrl/meson/pinctrl-meson.h 
> b/drivers/pinctrl/meson/pinctrl-meson.h
> index 5eaab925f427..1a88103dcb9b 100644
> --- a/drivers/pinctrl/meson/pinctrl-meson.h
> +++ b/drivers/pinctrl/meson/pinctrl-meson.h
> @@ -71,9 +71,20 @@ enum meson_reg_type {
>       REG_DIR,
>       REG_OUT,
>       REG_IN,
> +     REG_DS,
>       NUM_REG,
>  };
>  
> +/**
> + * enum meson_pinconf_drv - value of drive-strength supported
> + */
> +enum meson_pinconf_drv {
> +     MESON_PINCONF_DRV_500UA,
> +     MESON_PINCONF_DRV_2500UA,
> +     MESON_PINCONF_DRV_3000UA,
> +     MESON_PINCONF_DRV_4000UA,
> +};
> +
>  /**
>   * struct meson bank
>   *
> @@ -132,7 +143,8 @@ struct meson_pinctrl {
>               .num_groups = ARRAY_SIZE(fn ## _groups),                \
>       }
>  
> -#define BANK(n, f, l, fi, li, per, peb, pr, pb, dr, db, or, ob, ir, ib)      
> \
> +#define BANK_DS(n, f, l, fi, li, per, peb, pr, pb, dr, db, or, ob, ir, ib,   
>   \
> +             dsr, dsb)                                                      \
>       {                                                               \
>               .name           = n,                                    \
>               .first          = f,                                    \
> @@ -145,8 +157,12 @@ struct meson_pinctrl {
>                       [REG_DIR]       = { dr, db },                   \
>                       [REG_OUT]       = { or, ob },                   \
>                       [REG_IN]        = { ir, ib },                   \
> +                     [REG_DS]        = { dsr, dsb },                 \
>               },                                                      \
> -      }
> +     }
> +
> +#define BANK(n, f, l, fi, li, per, peb, pr, pb, dr, db, or, ob, ir, ib) \
> +     BANK_DS(n, f, l, fi, li, per, peb, pr, pb, dr, db, or, ob, ir, ib, 0, 0)
>  
>  #define MESON_PIN(x) PINCTRL_PIN(x, #x)
>  
> 

Reply via email to