Skip to content

Commit de48e4b

Browse files
committed
Merge remote-tracking branch 'adafruit/master' into fix_cpx_display
2 parents 0f003ac + 5015036 commit de48e4b

File tree

7 files changed

+60
-3
lines changed

7 files changed

+60
-3
lines changed

ports/atmel-samd/boards/hallowing_m0_express/board.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@
2626

2727
#include "boards/board.h"
2828

29+
#include "shared-bindings/board/__init__.h"
2930
#include "shared-bindings/displayio/FourWire.h"
3031
#include "shared-module/displayio/__init__.h"
3132
#include "shared-module/displayio/mipi_constants.h"
33+
#include "shared-bindings/busio/SPI.h"
3234

3335
#include "tick.h"
3436

@@ -71,8 +73,10 @@ uint8_t display_init_sequence[] = {
7173
void board_init(void) {
7274
displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
7375
bus->base.type = &displayio_fourwire_type;
76+
busio_spi_obj_t *spi = common_hal_board_create_spi();
77+
common_hal_busio_spi_configure(spi, 12000000, 0, 0, 8);
7478
common_hal_displayio_fourwire_construct(bus,
75-
common_hal_board_create_spi(),
79+
spi,
7680
&pin_PA28, // Command or data
7781
&pin_PA01, // Chip select
7882
&pin_PA27); // Reset

ports/atmel-samd/common-hal/busio/SPI.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -361,3 +361,13 @@ bool common_hal_busio_spi_transfer(busio_spi_obj_t *self, uint8_t *data_out, uin
361361
uint32_t common_hal_busio_spi_get_frequency(busio_spi_obj_t* self) {
362362
return samd_peripherals_spi_baud_reg_value_to_baudrate(hri_sercomspi_read_BAUD_reg(self->spi_desc.dev.prvt));
363363
}
364+
365+
uint8_t common_hal_busio_spi_get_phase(busio_spi_obj_t* self) {
366+
void * hw = self->spi_desc.dev.prvt;
367+
return hri_sercomspi_get_CTRLA_CPHA_bit(hw);
368+
}
369+
370+
uint8_t common_hal_busio_spi_get_polarity(busio_spi_obj_t* self) {
371+
void * hw = self->spi_desc.dev.prvt;
372+
return hri_sercomspi_get_CTRLA_CPOL_bit(hw);
373+
}

ports/nrf/common-hal/busio/SPI.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,3 +327,11 @@ uint32_t common_hal_busio_spi_get_frequency(busio_spi_obj_t* self) {
327327
return 0;
328328
}
329329
}
330+
331+
uint8_t common_hal_busio_spi_get_phase(busio_spi_obj_t* self) {
332+
return 0;
333+
}
334+
335+
uint8_t common_hal_busio_spi_get_polarity(busio_spi_obj_t* self) {
336+
return 0;
337+
}

shared-bindings/busio/SPI.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ extern bool common_hal_busio_spi_transfer(busio_spi_obj_t *self, uint8_t *data_o
6161
// Return actual SPI bus frequency.
6262
uint32_t common_hal_busio_spi_get_frequency(busio_spi_obj_t* self);
6363

64+
// Return SPI bus phase.
65+
uint8_t common_hal_busio_spi_get_phase(busio_spi_obj_t* self);
66+
67+
// Return SPI bus polarity.
68+
uint8_t common_hal_busio_spi_get_polarity(busio_spi_obj_t* self);
69+
6470
// This is used by the supervisor to claim SPI devices indefinitely.
6571
extern void common_hal_busio_spi_never_reset(busio_spi_obj_t *self);
6672

shared-bindings/displayio/Display.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,25 @@ const mp_obj_property_t displayio_display_height_obj = {
295295
(mp_obj_t)&mp_const_none_obj},
296296
};
297297

298+
//| .. attribute:: bus
299+
//|
300+
//| The bus being used by the display
301+
//|
302+
//|
303+
STATIC mp_obj_t displayio_display_obj_get_bus(mp_obj_t self_in) {
304+
displayio_display_obj_t *self = MP_OBJ_TO_PTR(self_in);
305+
return self->bus;
306+
}
307+
MP_DEFINE_CONST_FUN_OBJ_1(displayio_display_get_bus_obj, displayio_display_obj_get_bus);
308+
309+
const mp_obj_property_t displayio_display_bus_obj = {
310+
.base.type = &mp_type_property,
311+
.proxy = {(mp_obj_t)&displayio_display_get_bus_obj,
312+
(mp_obj_t)&mp_const_none_obj,
313+
(mp_obj_t)&mp_const_none_obj},
314+
};
315+
316+
298317
STATIC const mp_rom_map_elem_t displayio_display_locals_dict_table[] = {
299318
{ MP_ROM_QSTR(MP_QSTR_show), MP_ROM_PTR(&displayio_display_show_obj) },
300319
{ MP_ROM_QSTR(MP_QSTR_refresh_soon), MP_ROM_PTR(&displayio_display_refresh_soon_obj) },
@@ -305,6 +324,7 @@ STATIC const mp_rom_map_elem_t displayio_display_locals_dict_table[] = {
305324

306325
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&displayio_display_width_obj) },
307326
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&displayio_display_height_obj) },
327+
{ MP_ROM_QSTR(MP_QSTR_bus), MP_ROM_PTR(&displayio_display_bus_obj) },
308328
};
309329
STATIC MP_DEFINE_CONST_DICT(displayio_display_locals_dict, displayio_display_locals_dict_table);
310330

shared-module/displayio/FourWire.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,14 @@ void common_hal_displayio_fourwire_construct(displayio_fourwire_obj_t* self,
4141

4242
self->bus = spi;
4343
common_hal_busio_spi_never_reset(self->bus);
44+
// Our object is statically allocated off the heap so make sure the bus object lives to the end
45+
// of the heap as well.
4446
gc_never_free(self->bus);
4547

48+
self->frequency = common_hal_busio_spi_get_frequency(spi);
49+
self->polarity = common_hal_busio_spi_get_polarity(spi);
50+
self->phase = common_hal_busio_spi_get_phase(spi);
51+
4652
common_hal_digitalio_digitalinout_construct(&self->command, command);
4753
common_hal_digitalio_digitalinout_switch_to_output(&self->command, true, DRIVE_MODE_PUSH_PULL);
4854
common_hal_digitalio_digitalinout_construct(&self->chip_select, chip_select);
@@ -73,8 +79,8 @@ bool common_hal_displayio_fourwire_begin_transaction(mp_obj_t obj) {
7379
if (!common_hal_busio_spi_try_lock(self->bus)) {
7480
return false;
7581
}
76-
// TODO(tannewt): Stop hardcoding SPI frequency, polarity and phase.
77-
common_hal_busio_spi_configure(self->bus, 12000000, 0, 0, 8);
82+
common_hal_busio_spi_configure(self->bus, self->frequency, self->polarity,
83+
self->phase, 8);
7884
common_hal_digitalio_digitalinout_set_value(&self->chip_select, false);
7985
return true;
8086
}

shared-module/displayio/FourWire.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ typedef struct {
3838
digitalio_digitalinout_obj_t command;
3939
digitalio_digitalinout_obj_t chip_select;
4040
digitalio_digitalinout_obj_t reset;
41+
uint32_t frequency;
42+
uint8_t polarity;
43+
uint8_t phase;
4144
} displayio_fourwire_obj_t;
4245

4346
#endif // MICROPY_INCLUDED_ATMEL_SAMD_COMMON_HAL_DISPLAYIO_FOURWIRE_H

0 commit comments

Comments
 (0)