diff mbox series

[-next] spi: introduce new helpers with using modern naming

Message ID 20220929132041.484110-1-yangyingliang@huawei.com
State Superseded
Headers show
Series [-next] spi: introduce new helpers with using modern naming | expand

Commit Message

Yang Yingliang Sept. 29, 2022, 1:20 p.m. UTC
For using modern names host/target to instead of all the legacy names,
I think it takes 3 steps:
  - step1: introduce new helpers with modern naming.
  - step2: switch to use these new helpers in all drivers.
  - step3: remove all legacy helpers and update all legacy names.

This patch is for step1, it introduces new helpers with host/target
naming for drivers using.

Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
---
 drivers/spi/spi.c       | 11 +++++++++++
 include/linux/spi/spi.h | 41 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 52 insertions(+)

Comments

Geert Uytterhoeven Sept. 30, 2022, 9:32 a.m. UTC | #1
Hi Yang,

On Thu, Sep 29, 2022 at 3:04 PM Yang Yingliang <yangyingliang@huawei.com> wrote:
> For using modern names host/target to instead of all the legacy names,
> I think it takes 3 steps:
>   - step1: introduce new helpers with modern naming.
>   - step2: switch to use these new helpers in all drivers.
>   - step3: remove all legacy helpers and update all legacy names.
>
> This patch is for step1, it introduces new helpers with host/target
> naming for drivers using.
>
> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>

Thanks for your patch!

> --- a/include/linux/spi/spi.h
> +++ b/include/linux/spi/spi.h
> @@ -356,6 +356,7 @@ extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
>   * @max_speed_hz: Highest supported transfer speed
>   * @flags: other constraints relevant to this driver
>   * @slave: indicates that this is an SPI slave controller
> + * @target: indicates that this is an SPI target controller
>   * @devm_allocated: whether the allocation of this struct is devres-managed
>   * @max_transfer_size: function that returns the max transfer size for
>   *     a &spi_device; may be %NULL, so the default %SIZE_MAX will be used.
> @@ -438,6 +439,7 @@ extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
>   * @mem_caps: controller capabilities for the handling of memory operations.
>   * @unprepare_message: undo any work done by prepare_message().
>   * @slave_abort: abort the ongoing transfer request on an SPI slave controller
> + * @target_abort: abort the ongoing transfer request on an SPI target controller
>   * @cs_gpiods: Array of GPIO descs to use as chip select lines; one per CS
>   *     number. Any individual value may be NULL for CS lines that
>   *     are not GPIOs (driven by the SPI controller itself).
> @@ -535,6 +537,8 @@ struct spi_controller {
>
>         /* Flag indicating this is an SPI slave controller */
>         bool                    slave;
> +       /* Flag indicating this is an SPI target controller */
> +       bool                    target;

To avoid subtle breakage when accessing these fields directly,
this should be a union:

    union {
            bool slave;
            bool target;
    };

>
>         /*
>          * on some hardware transfer / message size may be constrained

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Yang Yingliang Oct. 6, 2022, 5:56 a.m. UTC | #2
Hi,

On 2022/9/30 17:32, Geert Uytterhoeven wrote:
> Hi Yang,
>
> On Thu, Sep 29, 2022 at 3:04 PM Yang Yingliang <yangyingliang@huawei.com> wrote:
>> For using modern names host/target to instead of all the legacy names,
>> I think it takes 3 steps:
>>    - step1: introduce new helpers with modern naming.
>>    - step2: switch to use these new helpers in all drivers.
>>    - step3: remove all legacy helpers and update all legacy names.
>>
>> This patch is for step1, it introduces new helpers with host/target
>> naming for drivers using.
>>
>> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com>
> Thanks for your patch!
>
>> --- a/include/linux/spi/spi.h
>> +++ b/include/linux/spi/spi.h
>> @@ -356,6 +356,7 @@ extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
>>    * @max_speed_hz: Highest supported transfer speed
>>    * @flags: other constraints relevant to this driver
>>    * @slave: indicates that this is an SPI slave controller
>> + * @target: indicates that this is an SPI target controller
>>    * @devm_allocated: whether the allocation of this struct is devres-managed
>>    * @max_transfer_size: function that returns the max transfer size for
>>    *     a &spi_device; may be %NULL, so the default %SIZE_MAX will be used.
>> @@ -438,6 +439,7 @@ extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
>>    * @mem_caps: controller capabilities for the handling of memory operations.
>>    * @unprepare_message: undo any work done by prepare_message().
>>    * @slave_abort: abort the ongoing transfer request on an SPI slave controller
>> + * @target_abort: abort the ongoing transfer request on an SPI target controller
>>    * @cs_gpiods: Array of GPIO descs to use as chip select lines; one per CS
>>    *     number. Any individual value may be NULL for CS lines that
>>    *     are not GPIOs (driven by the SPI controller itself).
>> @@ -535,6 +537,8 @@ struct spi_controller {
>>
>>          /* Flag indicating this is an SPI slave controller */
>>          bool                    slave;
>> +       /* Flag indicating this is an SPI target controller */
>> +       bool                    target;
> To avoid subtle breakage when accessing these fields directly,
> this should be a union:
>
>      union {
>              bool slave;
>              bool target;
>      };
Yes, we should initialize the 'target' member. I will change it in v2.

Thanks,
Yang
>>          /*
>>           * on some hardware transfer / message size may be constrained
> Gr{oetje,eeting}s,
>
>                          Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
>                                  -- Linus Torvalds
>
> .
diff mbox series

Patch

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index ad254b94308e..52d64ac398fc 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -2692,6 +2692,17 @@  int spi_slave_abort(struct spi_device *spi)
 }
 EXPORT_SYMBOL_GPL(spi_slave_abort);
 
+int spi_target_abort(struct spi_device *spi)
+{
+	struct spi_controller *ctlr = spi->controller;
+
+	if (spi_controller_is_target(ctlr) && ctlr->target_abort)
+		return ctlr->target_abort(ctlr);
+
+	return -ENOTSUPP;
+}
+EXPORT_SYMBOL_GPL(spi_target_abort);
+
 static ssize_t slave_show(struct device *dev, struct device_attribute *attr,
 			  char *buf)
 {
diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 6ea889df0813..1824d7cef69b 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -356,6 +356,7 @@  extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
  * @max_speed_hz: Highest supported transfer speed
  * @flags: other constraints relevant to this driver
  * @slave: indicates that this is an SPI slave controller
+ * @target: indicates that this is an SPI target controller
  * @devm_allocated: whether the allocation of this struct is devres-managed
  * @max_transfer_size: function that returns the max transfer size for
  *	a &spi_device; may be %NULL, so the default %SIZE_MAX will be used.
@@ -438,6 +439,7 @@  extern struct spi_device *spi_new_ancillary_device(struct spi_device *spi, u8 ch
  * @mem_caps: controller capabilities for the handling of memory operations.
  * @unprepare_message: undo any work done by prepare_message().
  * @slave_abort: abort the ongoing transfer request on an SPI slave controller
+ * @target_abort: abort the ongoing transfer request on an SPI target controller
  * @cs_gpiods: Array of GPIO descs to use as chip select lines; one per CS
  *	number. Any individual value may be NULL for CS lines that
  *	are not GPIOs (driven by the SPI controller itself).
@@ -535,6 +537,8 @@  struct spi_controller {
 
 	/* Flag indicating this is an SPI slave controller */
 	bool			slave;
+	/* Flag indicating this is an SPI target controller */
+	bool			target;
 
 	/*
 	 * on some hardware transfer / message size may be constrained
@@ -646,6 +650,7 @@  struct spi_controller {
 	int (*unprepare_message)(struct spi_controller *ctlr,
 				 struct spi_message *message);
 	int (*slave_abort)(struct spi_controller *ctlr);
+	int (*target_abort)(struct spi_controller *ctlr);
 
 	/*
 	 * These hooks are for drivers that use a generic implementation
@@ -723,6 +728,11 @@  static inline bool spi_controller_is_slave(struct spi_controller *ctlr)
 	return IS_ENABLED(CONFIG_SPI_SLAVE) && ctlr->slave;
 }
 
+static inline bool spi_controller_is_target(struct spi_controller *ctlr)
+{
+	return IS_ENABLED(CONFIG_SPI_SLAVE) && ctlr->target;
+}
+
 /* PM calls that need to be issued by the driver */
 extern int spi_controller_suspend(struct spi_controller *ctlr);
 extern int spi_controller_resume(struct spi_controller *ctlr);
@@ -759,6 +769,21 @@  static inline struct spi_controller *spi_alloc_slave(struct device *host,
 	return __spi_alloc_controller(host, size, true);
 }
 
+static inline struct spi_controller *spi_alloc_host(struct device *dev,
+						    unsigned int size)
+{
+	return __spi_alloc_controller(dev, size, false);
+}
+
+static inline struct spi_controller *spi_alloc_target(struct device *dev,
+						      unsigned int size)
+{
+	if (!IS_ENABLED(CONFIG_SPI_SLAVE))
+		return NULL;
+
+	return __spi_alloc_controller(dev, size, true);
+}
+
 struct spi_controller *__devm_spi_alloc_controller(struct device *dev,
 						   unsigned int size,
 						   bool slave);
@@ -778,6 +803,21 @@  static inline struct spi_controller *devm_spi_alloc_slave(struct device *dev,
 	return __devm_spi_alloc_controller(dev, size, true);
 }
 
+static inline struct spi_controller *devm_spi_alloc_host(struct device *dev,
+							 unsigned int size)
+{
+	return __devm_spi_alloc_controller(dev, size, false);
+}
+
+static inline struct spi_controller *devm_spi_alloc_target(struct device *dev,
+							   unsigned int size)
+{
+	if (!IS_ENABLED(CONFIG_SPI_SLAVE))
+		return NULL;
+
+	return __devm_spi_alloc_controller(dev, size, true);
+}
+
 extern int spi_register_controller(struct spi_controller *ctlr);
 extern int devm_spi_register_controller(struct device *dev,
 					struct spi_controller *ctlr);
@@ -1137,6 +1177,7 @@  static inline void spi_message_free(struct spi_message *m)
 extern int spi_setup(struct spi_device *spi);
 extern int spi_async(struct spi_device *spi, struct spi_message *message);
 extern int spi_slave_abort(struct spi_device *spi);
+extern int spi_target_abort(struct spi_device *spi);
 
 static inline size_t
 spi_max_message_size(struct spi_device *spi)