Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: target/dartuinoP0/memory_lcd.c

Issue 1777653003: [display] Fix corruption in color lcd update. (Closed) Base URL: https://github.com/littlekernel/lk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2015 Gurjant Kalsi <me@gurjantkalsi.com> 2 * Copyright (c) 2015 Gurjant Kalsi <me@gurjantkalsi.com>
3 * 3 *
4 * Permission is hereby granted, free of charge, to any person obtaining 4 * Permission is hereby granted, free of charge, to any person obtaining
5 * a copy of this software and associated documentation files 5 * a copy of this software and associated documentation files
6 * (the "Software"), to deal in the Software without restriction, 6 * (the "Software"), to deal in the Software without restriction,
7 * including without limitation the rights to use, copy, modify, merge, 7 * including without limitation the rights to use, copy, modify, merge,
8 * publish, distribute, sublicense, and/or sell copies of the Software, 8 * publish, distribute, sublicense, and/or sell copies of the Software,
9 * and to permit persons to whom the Software is furnished to do so, 9 * and to permit persons to whom the Software is furnished to do so,
10 * subject to the following conditions: 10 * subject to the following conditions:
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 } 115 }
116 116
117 117
118 118
119 static void mlcd_flush(uint starty, uint endy) 119 static void mlcd_flush(uint starty, uint endy)
120 { 120 {
121 chip_select(true); 121 chip_select(true);
122 122
123 static uint8_t localbuf[MLCD_BUF_SIZE]; 123 static uint8_t localbuf[MLCD_BUF_SIZE];
124 uint8_t *bufptr = localbuf; 124 uint8_t *bufptr = localbuf;
125 uint8_t trailer = 0;
125 126
126 // The first line is preceeded with a write command. 127 // The first line is preceeded with a write command.
127 *bufptr++ = MLCD_WR | vcom_state; 128 *bufptr++ = MLCD_WR | vcom_state;
128 129
129 vcom_state = vcom_state == VCOM_HI ? VCOM_LO : VCOM_HI; 130 vcom_state = vcom_state == VCOM_HI ? VCOM_LO : VCOM_HI;
130 131
131 // Send the image data. 132 // Send the image data.
132 for (uint j = starty; j <= endy; ++j) { 133 for (uint j = starty; j <= endy; ++j) {
133 *bufptr++ = (j + 1); 134 *bufptr++ = (j + 1);
134 135
135 bufptr += lcd_get_line(framebuffer, j, bufptr); 136 bufptr += lcd_get_line(framebuffer, j, bufptr);
136 137
138 // 8 bit trailer per line
139 *bufptr++ = trailer;
140 if (j == endy) {
141 // 16 bit trailer on the last line
142 *bufptr++ = trailer;
143 }
144
137 if (HAL_SPI_Transmit(&SpiHandle, localbuf, bufptr - localbuf, HAL_MAX_DE LAY) != HAL_OK) { 145 if (HAL_SPI_Transmit(&SpiHandle, localbuf, bufptr - localbuf, HAL_MAX_DE LAY) != HAL_OK) {
138 goto finish; 146 goto finish;
139 } 147 }
140 148
141 bufptr = localbuf; 149 bufptr = localbuf;
142
143 *bufptr++ = (j + 1);
144 } 150 }
145 151
146 uint8_t trailer = 0;
147 if (HAL_SPI_Transmit(&SpiHandle, &trailer, 1, HAL_MAX_DELAY) != HAL_OK) {
148 goto finish;
149 }
150
151
152 finish: 152 finish:
153 chip_select(false); 153 chip_select(false);
154 } 154 }
155 155
156 status_t display_get_info(struct display_info *info) 156 status_t display_get_info(struct display_info *info)
157 { 157 {
158 LTRACEF("display_info %p\n", info); 158 LTRACEF("display_info %p\n", info);
159 159
160 info->framebuffer = (void *)framebuffer; 160 info->framebuffer = (void *)framebuffer;
161 info->format = FB_FORMAT; 161 info->format = FB_FORMAT;
162 info->width = MLCD_WIDTH; 162 info->width = MLCD_WIDTH;
163 info->height = MLCD_HEIGHT; 163 info->height = MLCD_HEIGHT;
164 info->stride = FB_STRIDE; 164 info->stride = FB_STRIDE;
165 info->flush = mlcd_flush; 165 info->flush = mlcd_flush;
166 166
167 return NO_ERROR; 167 return NO_ERROR;
168 } 168 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698