* [PATCH -next] spi: introduce new helpers with using modern naming
@ 2022-09-29 13:20 Yang Yingliang
2022-09-30 9:32 ` Geert Uytterhoeven
0 siblings, 1 reply; 3+ messages in thread
From: Yang Yingliang @ 2022-09-29 13:20 UTC (permalink / raw)
To: linux-spi; +Cc: broonie, lukas, geert, yangyingliang
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(+)
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)
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH -next] spi: introduce new helpers with using modern naming
2022-09-29 13:20 [PATCH -next] spi: introduce new helpers with using modern naming Yang Yingliang
@ 2022-09-30 9:32 ` Geert Uytterhoeven
2022-10-06 5:56 ` Yang Yingliang
0 siblings, 1 reply; 3+ messages in thread
From: Geert Uytterhoeven @ 2022-09-30 9:32 UTC (permalink / raw)
To: Yang Yingliang; +Cc: linux-spi, broonie, lukas
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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH -next] spi: introduce new helpers with using modern naming
2022-09-30 9:32 ` Geert Uytterhoeven
@ 2022-10-06 5:56 ` Yang Yingliang
0 siblings, 0 replies; 3+ messages in thread
From: Yang Yingliang @ 2022-10-06 5:56 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: linux-spi, broonie, lukas, yangyingliang
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
>
> .
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-10-06 5:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-29 13:20 [PATCH -next] spi: introduce new helpers with using modern naming Yang Yingliang
2022-09-30 9:32 ` Geert Uytterhoeven
2022-10-06 5:56 ` Yang Yingliang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).