X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/a8bd0c058b91b06b5e216632261503745a2cb675..f454d3a956255a95477f7cb2c3aeab49dda1a05c:/src/adafruit_blinka/microcontroller/generic_linux/spi.py diff --git a/src/adafruit_blinka/microcontroller/generic_linux/spi.py b/src/adafruit_blinka/microcontroller/generic_linux/spi.py index a8141b9..58a465d 100755 --- a/src/adafruit_blinka/microcontroller/generic_linux/spi.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/spi.py @@ -1,5 +1,6 @@ import spidev import time +from adafruit_blinka.agnostic import detector class SPI: MSB = 0 @@ -29,6 +30,18 @@ class SPI: self.baudrate = baudrate self.mode = mode self.bits = bits + self.chip = detector.chip + + def set_no_cs(self): + # Linux SPI driver for AM33XX chip in BeagleBone and PocketBeagle + # does not support setting SPI_NO_CS mode bit (issue #104) + if not self.chip.AM33XX and not self.chip.IMX8MX and not self.chip.SAMA5 \ + and not self.chip.APQ8016 and not self.chip.T210 and not self.chip.T186 \ + and not self.chip.T194: + try: + self._spi.no_cs = True # this doesn't work but try anyways + except AttributeError: + pass def write(self, buf, start=0, end=None): if not buf: @@ -37,14 +50,11 @@ class SPI: end = len(buf) try: self._spi.open(self._port, 0) - try: - self._spi.no_cs = True # this doesn't work but try anyways - except AttributeError: - pass + self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits - self._spi.writebytes([x for x in buf[start:end]]) + self._spi.writebytes2(buf[start:end]) self._spi.close() except FileNotFoundError as not_found: print("Could not open SPI device - check if SPI is enabled in kernel!") @@ -57,10 +67,7 @@ class SPI: end = len(buf) try: self._spi.open(self._port, 0) - try: - self._spi.no_cs = True # this doesn't work but try anyways - except AttributeError: - pass + self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits @@ -84,10 +91,7 @@ class SPI: raise RuntimeError('Buffer slices must be of equal length.') try: self._spi.open(self._port, 0) - try: - self._spi.no_cs = True # this doesn't work but try anyways - except AttributeError: - pass + self.set_no_cs() self._spi.max_speed_hz = self.baudrate self._spi.mode = self.mode self._spi.bits_per_word = self.bits