[PATCH linux dev-5.3 1/2] fsi: aspeed: Configure optional GPIOs

Andrew Jeffery andrew at aj.id.au
Tue Oct 15 11:27:22 AEDT 2019



On Mon, 14 Oct 2019, at 18:16, Joel Stanley wrote:
> On Tacoma the enable and mux GPIOs allow the BMC to enable FSI and
> control if the clock and data should come from the BMC, or from the
> debug connector.
> 
> Configure these as optional GPIOs which will fail without error for
> systems that do not have these GPIOs in their device tree.
> 
> Signed-off-by: Joel Stanley <joel at jms.id.au>
> ---
>  drivers/fsi/fsi-master-aspeed.c | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
> 
> diff --git a/drivers/fsi/fsi-master-aspeed.c b/drivers/fsi/fsi-master-aspeed.c
> index 6496d2972944..2048e38e7200 100644
> --- a/drivers/fsi/fsi-master-aspeed.c
> +++ b/drivers/fsi/fsi-master-aspeed.c
> @@ -14,6 +14,7 @@
>  #include <linux/regmap.h>
>  #include <linux/slab.h>
>  #include <linux/iopoll.h>
> +#include <linux/gpio/consumer.h>
>  
>  #include "fsi-master.h"
>  
> @@ -85,6 +86,9 @@ struct fsi_master_aspeed {
>  	void __iomem		*base;
>  	struct clk		*clk;
>  
> +	struct gpio_desc	*gpio_enable;
> +	struct gpio_desc	*gpio_mux;
> +
>  	struct dentry		*debugfs_dir;
>  	struct fsi_master_aspeed_debugfs_entry debugfs[FSI_NUM_DEBUGFS_ENTRIES];
>  };
> @@ -471,6 +475,30 @@ DEFINE_DEBUGFS_ATTRIBUTE(fsi_master_aspeed_debugfs_ops,
>  			 fsi_master_aspeed_debugfs_get,
>  			 fsi_master_aspeed_debugfs_set, "0x%08llx\n");
>  
> +static int aspeed_master_gpio_init(struct fsi_master_aspeed *master)
> +{
> +	struct device *dev = master->dev;
> +	struct gpio_desc *gpio;
> +
> +	gpio = devm_gpiod_get_optional(dev, "fsi-enable", 0);
> +	if (IS_ERR(gpio)) {

devm_gpiod_get_option() returns NULL if the GPIO isn't defined, and
interfaces like gpiod_direction_output(...) return 0 if the descriptor is
NULL. The design point of the _optional() interfaces is that it makes the
error handling unnecessary because we know the GPIO might be absent.

The pattern is also wrong in fsi-master-ast-cf and probably fsi-master-gpio.


More information about the openbmc mailing list