Skip to content

Commit

Permalink
Some SPI displays require cs_post adjusted per speed - release
Browse files Browse the repository at this point in the history
  • Loading branch information
philippe44 committed Jan 5, 2022
1 parent d0461d5 commit df777e8
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 6 deletions.
6 changes: 5 additions & 1 deletion components/display/SH1106.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,10 @@ static void SetContrast( struct GDS_Device* Device, uint8_t Contrast ) {
Device->WriteCommand( Device, Contrast );
}

static void SPIParams(int Speed, uint8_t *mode, uint8_t *CS_pre, uint8_t *CS_post) {
*CS_post = Speed / (8*1000*1000);
}

static bool Init( struct GDS_Device* Device ) {
#ifdef SHADOW_BUFFER
struct PrivateSpace *Private = (struct PrivateSpace*) Device->Private;
Expand Down Expand Up @@ -140,7 +144,7 @@ static const struct GDS_Device SH1106 = {
.SetLayout = SetLayout,
.Update = Update, .Init = Init,
.Depth = 1,
.CS_post = 2,
.SPIParams = SPIParams,
#if !defined SHADOW_BUFFER && defined USE_IRAM
.Alloc = GDS_ALLOC_IRAM_SPI;
#endif
Expand Down
3 changes: 2 additions & 1 deletion components/display/core/gds_private.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ struct GDS_Device {
struct {
spi_device_handle_t SPIHandle;
int8_t CSPin;
int8_t CS_pre, CS_post, SPI_mode;
};
};

Expand Down Expand Up @@ -125,6 +124,8 @@ struct GDS_Device {
// may provide for optimization
void (*DrawRGB)( struct GDS_Device* Device, uint8_t *Image,int x, int y, int Width, int Height, int RGB_Mode );
void (*ClearWindow)( struct GDS_Device* Device, int x1, int y1, int x2, int y2, int Color );
// may provide for tweaking
void (*SPIParams)(int Speed, uint8_t *mode, uint8_t *CS_pre, uint8_t *CS_post);

// interface-specific methods
WriteCommandProc WriteCommand;
Expand Down
7 changes: 3 additions & 4 deletions components/display/core/ifaces/default_if_spi.c
Original file line number Diff line number Diff line change
Expand Up @@ -51,10 +51,9 @@ bool GDS_SPIAttachDevice( struct GDS_Device* Device, int Width, int Height, int
SPIDeviceConfig.spics_io_num = CSPin;
SPIDeviceConfig.queue_size = 1;
SPIDeviceConfig.flags = SPI_DEVICE_NO_DUMMY;
SPIDeviceConfig.cs_ena_pretrans = Device->CS_pre;
SPIDeviceConfig.cs_ena_posttrans = Device->CS_post;
SPIDeviceConfig.mode = Device->SPI_mode;

if (Device->SPIParams) Device->SPIParams(SPIDeviceConfig.clock_speed_hz, &SPIDeviceConfig.mode,
&SPIDeviceConfig.cs_ena_pretrans, &SPIDeviceConfig.cs_ena_posttrans);

ESP_ERROR_CHECK_NONFATAL( spi_bus_add_device( SPIHost, &SPIDeviceConfig, &SPIDevice ), return false );

Device->WriteCommand = SPIDefaultWriteCommand;
Expand Down

0 comments on commit df777e8

Please sign in to comment.