[WIP] ec/system76/ec: Implement USB-C DP HPD
Change-Id: I0487b761a5a83b0a1897c92416d0d81219303341 Signed-off-by: Tim Crawford <tcrawford@system76.com>
This commit is contained in:
parent
3a205fc0bf
commit
f615ba1c4e
@ -4,6 +4,7 @@
|
|||||||
#include <console/console.h>
|
#include <console/console.h>
|
||||||
#include <delay.h>
|
#include <delay.h>
|
||||||
#include <device/usbc_mux.h>
|
#include <device/usbc_mux.h>
|
||||||
|
#include <timer.h>
|
||||||
#include <types.h>
|
#include <types.h>
|
||||||
|
|
||||||
#define CMD_USBC_MUX_INFO 23
|
#define CMD_USBC_MUX_INFO 23
|
||||||
@ -60,25 +61,57 @@ static int system76_ec_get_mux_info(int port, struct usbc_mux_info *info)
|
|||||||
static int system76_ec_wait_for_connection(long timeout_ms)
|
static int system76_ec_wait_for_connection(long timeout_ms)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int system76_ec_enter_dp_mode(int port)
|
static int system76_ec_enter_dp_mode(int port)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
return -1;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int system76_ec_wait_for_dp_mode_entry(int port, long timeout_ms)
|
static int system76_ec_wait_for_dp_mode_entry(int port, long timeout_ms)
|
||||||
{
|
{
|
||||||
// TODO
|
struct usbc_mux_info info;
|
||||||
return -1;
|
|
||||||
|
if (system76_ec_get_mux_info(port, &info) < 0) {
|
||||||
|
printk(BIOS_WARNING, "%s: could not get usbc mux info\n", __func__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!info.dp) {
|
||||||
|
printk(BIOS_WARNING, "DP mode not ready\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int system76_ec_wait_for_hpd(int port, long timeout_ms)
|
static int system76_ec_wait_for_hpd(int port, long timeout_ms)
|
||||||
{
|
{
|
||||||
// TODO
|
struct usbc_mux_info info;
|
||||||
return -1;
|
struct stopwatch sw;
|
||||||
|
|
||||||
|
stopwatch_init_msecs_expire(&sw, timeout_ms);
|
||||||
|
while (1) {
|
||||||
|
if (system76_ec_get_mux_info(port, &info) < 0) {
|
||||||
|
printk(BIOS_WARNING, "%s: could not get usbc mux info\n", __func__);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (info.hpd_lvl)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (stopwatch_expired(&sw)) {
|
||||||
|
printk(BIOS_WARNING, "HPD not ready after %ldms\n", timeout_ms);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mdelay(100);
|
||||||
|
}
|
||||||
|
|
||||||
|
printk(BIOS_INFO, "HPD ready after %lldms\n", stopwatch_duration_msecs(&sw));
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct usbc_ops system76_ec_usbc_ops = {
|
static const struct usbc_ops system76_ec_usbc_ops = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user