From: Jan Volckaert Date: Sun, 27 Aug 2023 17:12:22 +0000 (+0200) Subject: make chip_select pin optional in SPI four wire X-Git-Tag: 1.2.1~1^2~3 X-Git-Url: https://git.ayoreis.com/hackapet/Adafruit_Blinka_Displayio.git/commitdiff_plain/3e217487a005ed9ba2e45e27fa03afc8fff3f424 make chip_select pin optional in SPI four wire on Odroid C4 the chip_select is controller by the spi_meson_spicc driver, in case the SPI_CS0 is used as chip_select pin in the FourWire class Resource Busy exceptions are thrown. --- diff --git a/displayio/_fourwire.py b/displayio/_fourwire.py index 61be810..65b7654 100644 --- a/displayio/_fourwire.py +++ b/displayio/_fourwire.py @@ -44,7 +44,7 @@ class FourWire: spi_bus: busio.SPI, *, command: microcontroller.Pin, - chip_select: microcontroller.Pin, + chip_select: Optional[microcontroller.Pin] = None, reset: Optional[microcontroller.Pin] = None, baudrate: int = 24000000, polarity: int = 0, @@ -61,15 +61,20 @@ class FourWire: """ self._dc = digitalio.DigitalInOut(command) self._dc.switch_to_output(value=False) - self._chip_select = digitalio.DigitalInOut(chip_select) - self._chip_select.switch_to_output(value=True) + + if chip_select is not None: + self._chip_select = digitalio.DigitalInOut(chip_select) + self._chip_select.switch_to_output(value=True) + else: + self._chip_select = None + self._frequency = baudrate self._polarity = polarity self._phase = phase if reset is not None: self._reset = digitalio.DigitalInOut(reset) - self._reset.switch_to_output(value=True) + self._reset.switch_to_output(value=False) else: self._reset = None self._spi = spi_bus @@ -78,7 +83,10 @@ class FourWire: self.reset() self._spi.deinit() self._dc.deinit() - self._chip_select.deinit() + + if self._chip_select is not None: + self._chip_select.deinit() + if self._reset is not None: self._reset.deinit() @@ -123,7 +131,11 @@ class FourWire: data: ReadableBuffer, ): self._dc.value = data_type == DISPLAY_DATA - if chip_select == CHIP_SELECT_TOGGLE_EVERY_BYTE: + + if ( + self._chip_select is not None + and chip_select == CHIP_SELECT_TOGGLE_EVERY_BYTE + ): for byte in data: self._spi.write(bytes([byte])) self._chip_select.value = True @@ -146,10 +158,18 @@ class FourWire: self._spi.configure( baudrate=self._frequency, polarity=self._polarity, phase=self._phase ) +<<<<<<< HEAD self._chip_select.value = False return True +======= + + if self._chip_select is not None: + self._chip_select.value = False +>>>>>>> 87a1bde (make chip_select pin optional in SPI four wire) def _end_transaction(self) -> None: """End the SPI transaction by unlocking and setting Chip Select""" - self._chip_select.value = True + if self._chip_select is not None: + self._chip_select.value = True + self._spi.unlock()