Skip to content

Commit e98a136

Browse files
committed
This commit propagates changes in handling of anx7625 USB-C video
and VBUS switching to all the examples and libraries. The anx7625_init function in anx7625.cpp driver has been empowered by including the control of the gpios POWER_EN (video_on) and RESET_N (video_rst) and also the VBUS switching according to anx7625 registers. This has been done for the following reasons - anx driver devel is not yet finished so it's easier when you have a single place to maintain - timing is critical when dealing with anx and doing it in a single function means less confusion for our users.
1 parent 60beb13 commit e98a136

File tree

5 files changed

+48
-91
lines changed

5 files changed

+48
-91
lines changed

libraries/LittleVGL/examples/Portenta_lvgl/Portenta_lvgl.ino

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -124,32 +124,19 @@ static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t
124124
}
125125
}
126126

127-
128127
struct edid recognized_edid;
129-
mbed::DigitalOut video_on(PK_2);
130-
mbed::DigitalOut video_rst(PJ_3);
128+
131129
void setup() {
132130
// put your setup code here, to run once:
133-
delay(1000);
134-
video_on = 1;
135-
delay(10);
136-
video_rst = 1;
137-
delay(10);
138131
int ret = -1;
139-
video_on = 0;
140-
delay(10);
141-
video_rst = 0;
142-
delay(100);
143-
while (ret < 0) {
144-
video_on = 0;
145-
delay(10);
146-
video_rst = 0;
147-
delay(100);
148-
video_on = 1;
149-
delay(100);
150-
video_rst = 1;
151-
ret = anx7625_init(0);
132+
133+
ret = anx7625_init(0);
134+
if(ret < 0) {
135+
printf("Cannot continue, anx7625 init failed.\n");
136+
while(1);
152137
}
138+
139+
anx7625_wait_hpd_event(0);
153140
anx7625_dp_get_edid(0, &recognized_edid);
154141
anx7625_dp_start(0, &recognized_edid, EDID_MODE_720x480_60Hz);
155142
SDRAM.begin(getFramebufferEnd());

libraries/LittleVGL/porting.cpp

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -125,35 +125,19 @@ static void gpu_fill(lv_disp_drv_t * disp_drv, lv_color_t * dest_buf, lv_coord_t
125125
}
126126
}
127127

128-
129128
struct edid recognized_edid;
130-
mbed::DigitalOut video_on(PK_2);
131-
mbed::DigitalOut video_rst(PJ_3);
132129

133130
void portenta_init_video() {
134131
// put your setup code here, to run once:
135-
delay(1000);
136-
video_on = 1;
137-
delay(10);
138-
video_rst = 1;
139-
delay(10);
140132
int ret = -1;
141-
video_on = 0;
142-
delay(10);
143-
video_rst = 0;
144-
delay(100);
145-
146-
while (ret < 0) {
147-
video_on = 0;
148-
delay(10);
149-
video_rst = 0;
150-
delay(100);
151-
video_on = 1;
152-
delay(100);
153-
video_rst = 1;
154-
ret = anx7625_init(0);
133+
134+
ret = anx7625_init(0);
135+
if(ret < 0) {
136+
printf("Cannot continue, anx7625 init failed.\n");
137+
while(1);
155138
}
156139

140+
anx7625_wait_hpd_event(0);
157141
anx7625_dp_get_edid(0, &recognized_edid);
158142
anx7625_dp_start(0, &recognized_edid, EDID_MODE_720x480_60Hz);
159143
SDRAM.begin(getFramebufferEnd());

libraries/Portenta_Video/anx7625.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
#define ANXDEBUG(format, ...) \
3333
printk(BIOS_DEBUG, "%s: " format, __func__, ##__VA_ARGS__)
3434

35-
35+
mbed::DigitalOut video_on(PK_2);
36+
mbed::DigitalOut video_rst(PJ_3);
37+
mbed::DigitalOut otg_on(PJ_6);
3638
mbed::I2C i2cx(I2C_SDA_INTERNAL , I2C_SCL_INTERNAL);
3739

3840
int i2c_writeb(uint8_t bus, uint8_t saddr, uint8_t offset, uint8_t val) {
@@ -1314,7 +1316,25 @@ int anx7625_init(uint8_t bus)
13141316
{
13151317
int retry_power_on = 3;
13161318

1319+
ANXINFO("OTG_ON = 1 -> VBUS OFF\n");
1320+
otg_on = 1;
1321+
1322+
mdelay(1000);
1323+
video_on = 1;
1324+
mdelay(10);
1325+
video_rst = 1;
1326+
mdelay(10);
1327+
1328+
video_on = 0;
1329+
mdelay(10);
1330+
video_rst = 0;
1331+
mdelay(100);
1332+
13171333
ANXINFO("Powering on anx7625...\n");
1334+
video_on = 1;
1335+
mdelay(100);
1336+
video_rst = 1;
1337+
13181338
while (--retry_power_on) {
13191339
if (anx7625_power_on_init(bus) == 0)
13201340
break;
@@ -1325,6 +1345,13 @@ int anx7625_init(uint8_t bus)
13251345
}
13261346
ANXINFO("Powering on anx7625 successfull.\n");
13271347
mdelay(200); // Wait for anx7625 to be stable
1348+
1349+
if(anx7625_is_power_provider(0)) {
1350+
ANXINFO("OTG_ON = 0 -> VBUS ON\n");
1351+
otg_on = 0;
1352+
mdelay(1000); // Wait for powered device to be stable
1353+
}
1354+
13281355
return 0;
13291356
}
13301357

libraries/Portenta_Video/examples/Envie_video_coreboot/Envie_video_coreboot.ino

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,45 +5,17 @@
55

66
struct edid recognized_edid;
77

8-
mbed::DigitalOut video_on(PK_2);
9-
mbed::DigitalOut video_rst(PJ_3);
10-
mbed::DigitalOut otg_on(PJ_6);
11-
128
void setup() {
139
// put your setup code here, to run once:
14-
printf("OTG_ON = 1 -> VBUS OFF\n");
15-
otg_on = 1;
16-
17-
delay(1000);
18-
video_on = 1;
19-
delay(10);
20-
video_rst = 1;
21-
delay(10);
22-
2310
int ret = -1;
24-
video_on = 0;
25-
delay(10);
26-
video_rst = 0;
27-
delay(100);
28-
29-
video_on = 1;
30-
delay(100);
31-
video_rst = 1;
3211

3312
ret = anx7625_init(0);
3413
if(ret < 0) {
3514
printf("Cannot continue, anx7625 init failed.\n");
3615
while(1);
3716
}
3817

39-
if(anx7625_is_power_provider(0)) {
40-
printf("OTG_ON = 0 -> VBUS ON\n");
41-
otg_on = 0;
42-
delay(1000); // Wait for device to be stable
43-
}
44-
4518
anx7625_wait_hpd_event(0);
46-
4719
anx7625_dp_get_edid(0, &recognized_edid);
4820
anx7625_dp_start(0, &recognized_edid, EDID_MODE_640x480_60Hz);
4921

libraries/doom/doomgeneric_arduino.cpp

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -91,9 +91,6 @@ static void addKeyToQueue(int pressed, unsigned char keyCode)
9191

9292
struct edid recognized_edid;
9393

94-
mbed::DigitalOut video_on(PK_2);
95-
mbed::DigitalOut video_rst(PJ_3);
96-
9794
uint32_t LCD_X_Size = 0, LCD_Y_Size = 0;
9895
DMA2D_HandleTypeDef DMA2D_Handle;
9996

@@ -169,23 +166,13 @@ void DG_Init()
169166
{
170167
int ret = -1;
171168

172-
while (ret < 0) {
173-
video_on = 0;
174-
delay(10);
175-
video_rst = 0;
176-
delay(100);
177-
178-
video_on = 1;
179-
delay(100);
180-
video_rst = 1;
181-
182-
ret = anx7625_init(0);
183-
printf("after init\n");
184-
185-
if (ret < 0) {
186-
printf("anx7625_init returned %d\n", ret);
187-
}
169+
ret = anx7625_init(0);
170+
if(ret < 0) {
171+
printf("Cannot continue, anx7625 init failed.\n");
172+
while(1);
188173
}
174+
175+
anx7625_wait_hpd_event(0);
189176
anx7625_dp_get_edid(0, &recognized_edid);
190177
//edid_set_framebuffer_bits_per_pixel(&recognized_edid, 16, 0);
191178
//set_display_mode(&recognized_edid, EDID_MODE_720x480_60Hz);

0 commit comments

Comments
 (0)