From: "Andreas Färber" <afaerber@suse.de> To: linux-realtek-soc@lists.infradead.org, linux-leds@vger.kernel.org Cc: "Jacek Anaszewski" <jacek.anaszewski@gmail.com>, "Pavel Machek" <pavel@ucw.cz>, "Dan Murphy" <dmurphy@ti.com>, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, "Andreas Färber" <afaerber@suse.de>, "Mark Brown" <broonie@kernel.org>, linux-spi@vger.kernel.org Subject: [RFC 04/25] spi: gpio: Implement LSB First bitbang support Date: Thu, 12 Dec 2019 04:39:31 +0100 [thread overview] Message-ID: <20191212033952.5967-5-afaerber@suse.de> (raw) In-Reply-To: <20191212033952.5967-1-afaerber@suse.de> Add support for slave DT property spi-lsb-first, i.e., SPI_LSB_FIRST mode. Duplicate the inline helpers bitbang_txrx_be_cpha{0,1} as LE versions. Make checkpatch.pl happy by changing "unsigned" to "unsigned int". Conditionally call them from all the spi-gpio txrx_word callbacks. Signed-off-by: Andreas Färber <afaerber@suse.de> --- drivers/spi/spi-bitbang-txrx.h | 68 ++++++++++++++++++++++++++++++++++++++++-- drivers/spi/spi-gpio.c | 42 ++++++++++++++++++++------ 2 files changed, 99 insertions(+), 11 deletions(-) diff --git a/drivers/spi/spi-bitbang-txrx.h b/drivers/spi/spi-bitbang-txrx.h index ae61d72c7d28..999a89325325 100644 --- a/drivers/spi/spi-bitbang-txrx.h +++ b/drivers/spi/spi-bitbang-txrx.h @@ -45,7 +45,7 @@ static inline u32 bitbang_txrx_be_cpha0(struct spi_device *spi, - unsigned nsecs, unsigned cpol, unsigned flags, + unsigned int nsecs, unsigned int cpol, unsigned int flags, u32 word, u8 bits) { /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ @@ -77,7 +77,7 @@ bitbang_txrx_be_cpha0(struct spi_device *spi, static inline u32 bitbang_txrx_be_cpha1(struct spi_device *spi, - unsigned nsecs, unsigned cpol, unsigned flags, + unsigned int nsecs, unsigned int cpol, unsigned int flags, u32 word, u8 bits) { /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ @@ -106,3 +106,67 @@ bitbang_txrx_be_cpha1(struct spi_device *spi, } return word; } + +static inline u32 +bitbang_txrx_le_cpha0(struct spi_device *spi, + unsigned int nsecs, unsigned int cpol, unsigned int flags, + u32 word, u8 bits) +{ + /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ + + u32 oldbit = !(word & 1); + /* clock starts at inactive polarity */ + for (; likely(bits); bits--) { + + /* setup LSB (to slave) on trailing edge */ + if ((flags & SPI_MASTER_NO_TX) == 0) { + if ((word & 1) != oldbit) { + setmosi(spi, word & 1); + oldbit = word & 1; + } + } + spidelay(nsecs); /* T(setup) */ + + setsck(spi, !cpol); + spidelay(nsecs); + + /* sample LSB (from slave) on leading edge */ + word >>= 1; + if ((flags & SPI_MASTER_NO_RX) == 0) + word |= getmiso(spi) << (bits - 1); + setsck(spi, cpol); + } + return word; +} + +static inline u32 +bitbang_txrx_le_cpha1(struct spi_device *spi, + unsigned int nsecs, unsigned int cpol, unsigned int flags, + u32 word, u8 bits) +{ + /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ + + u32 oldbit = !(word & 1); + /* clock starts at inactive polarity */ + for (; likely(bits); bits--) { + + /* setup LSB (to slave) on leading edge */ + setsck(spi, !cpol); + if ((flags & SPI_MASTER_NO_TX) == 0) { + if ((word & 1) != oldbit) { + setmosi(spi, word & 1); + oldbit = word & 1; + } + } + spidelay(nsecs); /* T(setup) */ + + setsck(spi, cpol); + spidelay(nsecs); + + /* sample LSB (from slave) on trailing edge */ + word >>= 1; + if ((flags & SPI_MASTER_NO_RX) == 0) + word |= getmiso(spi) << (bits - 1); + } + return word; +} diff --git a/drivers/spi/spi-gpio.c b/drivers/spi/spi-gpio.c index 7ceb0ba27b75..493723eda844 100644 --- a/drivers/spi/spi-gpio.c +++ b/drivers/spi/spi-gpio.c @@ -135,25 +135,37 @@ static inline int getmiso(const struct spi_device *spi) static u32 spi_gpio_txrx_word_mode0(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_txrx_word_mode1(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_txrx_word_mode2(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); } static u32 spi_gpio_txrx_word_mode3(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); } /* @@ -170,28 +182,40 @@ static u32 spi_gpio_spec_txrx_word_mode0(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_spec_txrx_word_mode1(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_spec_txrx_word_mode2(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); } static u32 spi_gpio_spec_txrx_word_mode3(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); } /*----------------------------------------------------------------------*/ @@ -389,7 +413,7 @@ static int spi_gpio_probe(struct platform_device *pdev) master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32); master->mode_bits = SPI_3WIRE | SPI_3WIRE_HIZ | SPI_CPHA | SPI_CPOL | - SPI_CS_HIGH; + SPI_CS_HIGH | SPI_LSB_FIRST; if (!spi_gpio->mosi) { /* HW configuration without MOSI pin * -- 2.16.4
WARNING: multiple messages have this Message-ID (diff)
From: "Andreas Färber" <afaerber@suse.de> To: linux-realtek-soc@lists.infradead.org, linux-leds@vger.kernel.org Cc: linux-kernel@vger.kernel.org, linux-spi@vger.kernel.org, "Mark Brown" <broonie@kernel.org>, "Jacek Anaszewski" <jacek.anaszewski@gmail.com>, "Pavel Machek" <pavel@ucw.cz>, "Andreas Färber" <afaerber@suse.de>, linux-arm-kernel@lists.infradead.org, "Dan Murphy" <dmurphy@ti.com> Subject: [RFC 04/25] spi: gpio: Implement LSB First bitbang support Date: Thu, 12 Dec 2019 04:39:31 +0100 [thread overview] Message-ID: <20191212033952.5967-5-afaerber@suse.de> (raw) In-Reply-To: <20191212033952.5967-1-afaerber@suse.de> Add support for slave DT property spi-lsb-first, i.e., SPI_LSB_FIRST mode. Duplicate the inline helpers bitbang_txrx_be_cpha{0,1} as LE versions. Make checkpatch.pl happy by changing "unsigned" to "unsigned int". Conditionally call them from all the spi-gpio txrx_word callbacks. Signed-off-by: Andreas Färber <afaerber@suse.de> --- drivers/spi/spi-bitbang-txrx.h | 68 ++++++++++++++++++++++++++++++++++++++++-- drivers/spi/spi-gpio.c | 42 ++++++++++++++++++++------ 2 files changed, 99 insertions(+), 11 deletions(-) diff --git a/drivers/spi/spi-bitbang-txrx.h b/drivers/spi/spi-bitbang-txrx.h index ae61d72c7d28..999a89325325 100644 --- a/drivers/spi/spi-bitbang-txrx.h +++ b/drivers/spi/spi-bitbang-txrx.h @@ -45,7 +45,7 @@ static inline u32 bitbang_txrx_be_cpha0(struct spi_device *spi, - unsigned nsecs, unsigned cpol, unsigned flags, + unsigned int nsecs, unsigned int cpol, unsigned int flags, u32 word, u8 bits) { /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ @@ -77,7 +77,7 @@ bitbang_txrx_be_cpha0(struct spi_device *spi, static inline u32 bitbang_txrx_be_cpha1(struct spi_device *spi, - unsigned nsecs, unsigned cpol, unsigned flags, + unsigned int nsecs, unsigned int cpol, unsigned int flags, u32 word, u8 bits) { /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ @@ -106,3 +106,67 @@ bitbang_txrx_be_cpha1(struct spi_device *spi, } return word; } + +static inline u32 +bitbang_txrx_le_cpha0(struct spi_device *spi, + unsigned int nsecs, unsigned int cpol, unsigned int flags, + u32 word, u8 bits) +{ + /* if (cpol == 0) this is SPI_MODE_0; else this is SPI_MODE_2 */ + + u32 oldbit = !(word & 1); + /* clock starts at inactive polarity */ + for (; likely(bits); bits--) { + + /* setup LSB (to slave) on trailing edge */ + if ((flags & SPI_MASTER_NO_TX) == 0) { + if ((word & 1) != oldbit) { + setmosi(spi, word & 1); + oldbit = word & 1; + } + } + spidelay(nsecs); /* T(setup) */ + + setsck(spi, !cpol); + spidelay(nsecs); + + /* sample LSB (from slave) on leading edge */ + word >>= 1; + if ((flags & SPI_MASTER_NO_RX) == 0) + word |= getmiso(spi) << (bits - 1); + setsck(spi, cpol); + } + return word; +} + +static inline u32 +bitbang_txrx_le_cpha1(struct spi_device *spi, + unsigned int nsecs, unsigned int cpol, unsigned int flags, + u32 word, u8 bits) +{ + /* if (cpol == 0) this is SPI_MODE_1; else this is SPI_MODE_3 */ + + u32 oldbit = !(word & 1); + /* clock starts at inactive polarity */ + for (; likely(bits); bits--) { + + /* setup LSB (to slave) on leading edge */ + setsck(spi, !cpol); + if ((flags & SPI_MASTER_NO_TX) == 0) { + if ((word & 1) != oldbit) { + setmosi(spi, word & 1); + oldbit = word & 1; + } + } + spidelay(nsecs); /* T(setup) */ + + setsck(spi, cpol); + spidelay(nsecs); + + /* sample LSB (from slave) on trailing edge */ + word >>= 1; + if ((flags & SPI_MASTER_NO_RX) == 0) + word |= getmiso(spi) << (bits - 1); + } + return word; +} diff --git a/drivers/spi/spi-gpio.c b/drivers/spi/spi-gpio.c index 7ceb0ba27b75..493723eda844 100644 --- a/drivers/spi/spi-gpio.c +++ b/drivers/spi/spi-gpio.c @@ -135,25 +135,37 @@ static inline int getmiso(const struct spi_device *spi) static u32 spi_gpio_txrx_word_mode0(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_txrx_word_mode1(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_txrx_word_mode2(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); } static u32 spi_gpio_txrx_word_mode3(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { - return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); } /* @@ -170,28 +182,40 @@ static u32 spi_gpio_spec_txrx_word_mode0(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_spec_txrx_word_mode1(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 0, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 0, flags, word, bits); } static u32 spi_gpio_spec_txrx_word_mode2(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha0(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha0(spi, nsecs, 1, flags, word, bits); } static u32 spi_gpio_spec_txrx_word_mode3(struct spi_device *spi, unsigned nsecs, u32 word, u8 bits, unsigned flags) { flags = spi->master->flags; - return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); + if (unlikely(spi->mode & SPI_LSB_FIRST)) + return bitbang_txrx_le_cpha1(spi, nsecs, 1, flags, word, bits); + else + return bitbang_txrx_be_cpha1(spi, nsecs, 1, flags, word, bits); } /*----------------------------------------------------------------------*/ @@ -389,7 +413,7 @@ static int spi_gpio_probe(struct platform_device *pdev) master->bits_per_word_mask = SPI_BPW_RANGE_MASK(1, 32); master->mode_bits = SPI_3WIRE | SPI_3WIRE_HIZ | SPI_CPHA | SPI_CPOL | - SPI_CS_HIGH; + SPI_CS_HIGH | SPI_LSB_FIRST; if (!spi_gpio->mosi) { /* HW configuration without MOSI pin * -- 2.16.4 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-12-12 3:41 UTC|newest] Thread overview: 132+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-12 3:39 [RFC 00/25] arm64: realtek: Add Xnano X5 and implement TM1628/FD628/AiP1618 LED controllers Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 01/25] dt-bindings: vendor-prefixes: Add Xnano Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 22:26 ` Rob Herring 2019-12-19 22:26 ` Rob Herring 2019-12-12 3:39 ` [RFC 02/25] dt-bindings: arm: realtek: Add Xnano X5 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 22:27 ` Rob Herring 2019-12-19 22:27 ` Rob Herring 2019-12-12 3:39 ` [RFC 03/25] arm64: dts: realtek: rtd1295: " Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` Andreas Färber [this message] 2019-12-12 3:39 ` [RFC 04/25] spi: gpio: Implement LSB First bitbang support Andreas Färber 2019-12-12 8:40 ` Geert Uytterhoeven 2019-12-12 8:40 ` Geert Uytterhoeven 2019-12-12 15:14 ` Andreas Färber 2019-12-12 15:14 ` Andreas Färber 2019-12-12 17:19 ` Mark Brown 2019-12-12 17:19 ` Mark Brown 2019-12-12 21:08 ` Andreas Färber 2019-12-12 21:08 ` Andreas Färber 2019-12-13 11:42 ` Mark Brown 2019-12-13 11:42 ` Mark Brown 2019-12-12 3:39 ` [RFC 05/25] dt-bindings: vendor-prefixes: Add Titan Micro Electronics Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 22:31 ` Rob Herring 2019-12-19 22:31 ` Rob Herring 2019-12-12 3:39 ` [RFC 06/25] dt-bindings: leds: Add Titan Micro Electronics TM1628 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 23:04 ` Rob Herring 2019-12-19 23:04 ` Rob Herring 2019-12-12 3:39 ` [RFC 07/25] " Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-14 9:48 ` Andreas Färber 2019-12-14 9:48 ` Andreas Färber 2019-12-12 3:39 ` [RFC 08/25] arm64: dts: realtek: rtd129x-zidoo-x9s: Add TM1628 LED controller Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 09/25] arm64: dts: realtek: rtd1295-zidoo-x9s: Add regular LEDs to TM1628 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 10/25] dt-bindings: vendor-prefixes: Add Fuda Hisi Microelectronics Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 23:04 ` Rob Herring 2019-12-19 23:04 ` Rob Herring 2019-12-12 3:39 ` [RFC 11/25] dt-bindings: leds: tm1628: Add Fuda Hisi Microelectronics FD628 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 23:05 ` Rob Herring 2019-12-19 23:05 ` Rob Herring 2019-12-12 3:39 ` [RFC 12/25] " Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 13/25] arm64: dts: realtek: rtd1295-xnano-x5: Add FD628 LED controller Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 14/25] arm64: dts: realtek: rtd1295-xnano-x5: Add regular LEDs to FD628 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-21 20:21 ` Pavel Machek 2019-12-21 20:21 ` Pavel Machek 2019-12-12 3:39 ` [RFC 15/25] dt-bindings: vendor-prefixes: Add Fude Microelectronics Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 23:05 ` Rob Herring 2019-12-19 23:05 ` Rob Herring 2019-12-12 3:39 ` [RFC 16/25] dt-bindings: leds: tm1628: Add Fude Microelectronics AiP1618 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-19 23:06 ` Rob Herring 2019-12-19 23:06 ` Rob Herring 2019-12-12 3:39 ` [RFC 17/25] leds: tm1628: Prepare " Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-21 19:55 ` Andreas Färber 2019-12-21 19:55 ` Andreas Färber 2019-12-12 3:39 ` [RFC 18/25] dt-bindings: leds: tm1628: Define display child nodes Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 19/25] leds: tm1628: Add 7-segment display support Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 8:33 ` Geert Uytterhoeven 2019-12-12 8:33 ` Geert Uytterhoeven 2019-12-12 14:10 ` Andreas Färber 2019-12-12 14:10 ` Andreas Färber 2019-12-21 20:23 ` Pavel Machek 2019-12-21 20:23 ` Pavel Machek 2019-12-12 3:39 ` [RFC 20/25] arm64: dts: realtek: rtd1295-zidoo-x9s: Add display to TM1628 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 21/25] arm64: dts: realtek: rtd1295-xnano-x5: Add display to FD628 Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 22/25] leds: tm1826: Add combined glyph support Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-21 20:27 ` Pavel Machek 2019-12-21 20:27 ` Pavel Machek 2019-12-21 20:41 ` Andreas Färber 2019-12-21 20:41 ` Andreas Färber 2019-12-21 21:04 ` Pavel Machek 2019-12-21 21:04 ` Pavel Machek 2019-12-21 21:49 ` Andreas Färber 2019-12-21 21:49 ` Andreas Färber [not found] ` <CANiq72nA9OLa0SjY8W055J_2A32tcp7S98SruKSdWH2dm25VKw@mail.gmail.com> 2019-12-22 3:14 ` Andreas Färber 2019-12-22 3:14 ` Andreas Färber 2020-01-15 14:31 ` Miguel Ojeda 2020-01-15 14:31 ` Miguel Ojeda 2019-12-12 3:39 ` [RFC 23/25] WIP: leds: tm1628: Prepare TM1628 keys Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 24/25] WIP: leds: tm1628: Prepare FD628 keys Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 3:39 ` [RFC 25/25] WIP: leds: tm1628: Prepare AiP1618 keys Andreas Färber 2019-12-12 3:39 ` Andreas Färber 2019-12-12 13:14 ` [RFC 00/25] arm64: realtek: Add Xnano X5 and implement TM1628/FD628/AiP1618 LED controllers Robin Murphy 2019-12-12 13:14 ` Robin Murphy 2019-12-12 13:14 ` Robin Murphy 2019-12-12 20:55 ` Andreas Färber 2019-12-12 20:55 ` Andreas Färber 2019-12-12 20:55 ` Andreas Färber 2019-12-13 14:07 ` Robin Murphy 2019-12-13 14:07 ` Robin Murphy 2019-12-13 14:07 ` Robin Murphy 2019-12-13 14:36 ` Geert Uytterhoeven 2019-12-13 14:36 ` Geert Uytterhoeven 2019-12-13 14:36 ` Geert Uytterhoeven 2020-02-25 21:42 ` Ezra Buehler 2020-02-25 21:42 ` Ezra Buehler 2020-02-25 21:42 ` Ezra Buehler 2020-02-26 13:03 ` Pavel Machek 2020-02-26 13:03 ` Pavel Machek 2020-02-26 13:03 ` Pavel Machek 2020-02-26 13:03 ` Pavel Machek 2019-12-21 18:20 ` Pavel Machek 2019-12-21 18:20 ` Pavel Machek 2019-12-21 18:20 ` Pavel Machek 2019-12-21 21:07 ` Andreas Färber 2019-12-21 21:07 ` Andreas Färber 2019-12-21 21:07 ` Andreas Färber 2020-01-15 13:34 ` Andreas Färber 2020-01-15 13:34 ` Andreas Färber 2020-01-15 13:34 ` Andreas Färber 2020-01-15 13:34 ` Andreas Färber
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191212033952.5967-5-afaerber@suse.de \ --to=afaerber@suse.de \ --cc=broonie@kernel.org \ --cc=dmurphy@ti.com \ --cc=jacek.anaszewski@gmail.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-leds@vger.kernel.org \ --cc=linux-realtek-soc@lists.infradead.org \ --cc=linux-spi@vger.kernel.org \ --cc=pavel@ucw.cz \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.