[PATCH v6 20/28] spi: spi-mem: Fill the spi-mem controller capabilities of all the drivers

Miquel Raynal miquel.raynal at bootlin.com
Thu Dec 16 07:52:24 PST 2021


Hello all,

> diff --git a/drivers/spi/spi-mem.c b/drivers/spi/spi-mem.c
> index c4da0c9b05e9..bfd5c6b2db0a 100644
> --- a/drivers/spi/spi-mem.c
> +++ b/drivers/spi/spi-mem.c
> @@ -160,6 +160,9 @@ static bool spi_mem_check_buswidth(struct spi_mem *mem,
>  	return true;
>  }
>  
> +const struct spi_controller_mem_caps spi_mem_no_caps = {};
> +EXPORT_SYMBOL_GPL(spi_mem_no_caps);

As suggested by Boris on IRC, we might just find a way to avoid
defining this empty structure and requesting all drivers to provide one.

As it turns out, there is no per-controller spi-mem initialization
where we could provide a default set of capabilities, but I believe we
could hide the little extra complexity with something like:

#define spi_mem_controller_is_capable(mem, cap) \
	((mem)->ctlr->caps && (mem)->ctrl->caps->##cap)

And using the above helper in spi_mem_default_supports_op(), which
would transparently handle the !caps situation.

> diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
> index 57e2499ec1ed..58c5cb985431 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -2747,6 +2747,9 @@ static int spi_controller_check_ops(struct spi_controller *ctlr)
>  	if (ctlr->mem_ops) {
>  		if (!ctlr->mem_ops->exec_op)
>  			return -EINVAL;
> +
> +		if (!ctlr->mem_ops->caps)
> +			return -EINVAL;
>  	} else if (!ctlr->transfer && !ctlr->transfer_one &&
>  		   !ctlr->transfer_one_message) {
>  		return -EINVAL;
> diff --git a/include/linux/spi/spi-mem.h b/include/linux/spi/spi-mem.h
> index 42f3850610b5..5f728f3113bd 100644
> --- a/include/linux/spi/spi-mem.h
> +++ b/include/linux/spi/spi-mem.h
> @@ -366,6 +366,7 @@ bool spi_mem_dtr_supports_op(struct spi_mem *mem,
>  
>  int spi_mem_adjust_op_size(struct spi_mem *mem, struct spi_mem_op *op);
>  
> +const struct spi_controller_mem_caps spi_mem_no_caps;
>  bool spi_mem_supports_op(struct spi_mem *mem,
>  			 const struct spi_mem_op *op);
>  


Thanks,
Miquèl



More information about the linux-mtd mailing list