mirror of
https://github.com/AsahiLinux/m1n1
synced 2024-11-14 03:17:05 +00:00
dcp/dpav: Add DPAV endpoint
Signed-off-by: Janne Grunau <j@jannau.net>
This commit is contained in:
parent
b44a862756
commit
f46da8bbbb
3 changed files with 95 additions and 0 deletions
1
Makefile
1
Makefile
|
@ -74,6 +74,7 @@ LIBFDT_OBJECTS := $(patsubst %,libfdt/%, \
|
||||||
fdt_wip.o fdt.o)
|
fdt_wip.o fdt.o)
|
||||||
|
|
||||||
DCP_OBJECTS := $(patsubst %,dcp/%, \
|
DCP_OBJECTS := $(patsubst %,dcp/%, \
|
||||||
|
dpav_ep.o \
|
||||||
dptx_phy.o \
|
dptx_phy.o \
|
||||||
dptx_port_ep.o \
|
dptx_port_ep.o \
|
||||||
parser.o)
|
parser.o)
|
||||||
|
|
78
src/dcp/dpav_ep.c
Normal file
78
src/dcp/dpav_ep.c
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-only OR MIT
|
||||||
|
/* Copyright 2022 Sven Peter <sven@svenpeter.dev> */
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "dpav_ep.h"
|
||||||
|
#include "malloc.h"
|
||||||
|
#include "parser.h"
|
||||||
|
|
||||||
|
#include "../afk.h"
|
||||||
|
#include "../dcp.h"
|
||||||
|
#include "../types.h"
|
||||||
|
#include "../utils.h"
|
||||||
|
|
||||||
|
#define DCP_DPAV_ENDPOINT 0x24
|
||||||
|
#define TXBUF_LEN 0x4000
|
||||||
|
#define RXBUF_LEN 0x4000
|
||||||
|
|
||||||
|
typedef struct dcp_dpav_if {
|
||||||
|
afk_epic_ep_t *epic;
|
||||||
|
dcp_dev_t *dcp;
|
||||||
|
} dcp_dpav_if_t;
|
||||||
|
|
||||||
|
static void dpav_init(afk_epic_service_t *service, const char *name, const char *eclass, s64 unit)
|
||||||
|
{
|
||||||
|
UNUSED(service);
|
||||||
|
UNUSED(name);
|
||||||
|
UNUSED(eclass);
|
||||||
|
UNUSED(unit);
|
||||||
|
// printf("DPAV: init(name='%s', class='%s' unit=%ld:\n", name, eclass, unit);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const afk_epic_service_ops_t dcp_dpav_ops[] = {
|
||||||
|
{
|
||||||
|
.name = "AppleDCPDPTXController",
|
||||||
|
.init = dpav_init,
|
||||||
|
},
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
|
dcp_dpav_if_t *dcp_dpav_init(dcp_dev_t *dcp)
|
||||||
|
{
|
||||||
|
dcp_dpav_if_t *dpav = malloc(sizeof(dcp_dpav_if_t));
|
||||||
|
if (!dpav)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
dpav->dcp = dcp;
|
||||||
|
dpav->epic = afk_epic_start_ep(dcp->afk, DCP_DPAV_ENDPOINT, dcp_dpav_ops, true);
|
||||||
|
if (!dpav->epic) {
|
||||||
|
printf("dpav: failed to initialize EPIC\n");
|
||||||
|
goto err_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
int err = afk_epic_start_interface(dpav->epic, dpav, TXBUF_LEN, RXBUF_LEN);
|
||||||
|
if (err < 0) {
|
||||||
|
printf("dpav: failed to initialize DPAV interface\n");
|
||||||
|
goto err_shutdown;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dpav;
|
||||||
|
|
||||||
|
err_shutdown:
|
||||||
|
afk_epic_shutdown_ep(dpav->epic);
|
||||||
|
err_free:
|
||||||
|
free(dpav);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dcp_dpav_shutdown(dcp_dpav_if_t *dpav)
|
||||||
|
{
|
||||||
|
if (dpav) {
|
||||||
|
afk_epic_shutdown_ep(dpav->epic);
|
||||||
|
free(dpav);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
16
src/dcp/dpav_ep.h
Normal file
16
src/dcp/dpav_ep.h
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-only OR MIT
|
||||||
|
/* Copyright 2023 Janne Grunau <j@jannau.net> */
|
||||||
|
|
||||||
|
#ifndef __APPLE_DCP_DPAV_EP_H__
|
||||||
|
#define __APPLE_DCP_DPAV_EP_H__
|
||||||
|
|
||||||
|
#include "../types.h"
|
||||||
|
|
||||||
|
typedef struct dcp_dev dcp_dev_t;
|
||||||
|
|
||||||
|
typedef struct dcp_dpav_if dcp_dpav_if_t;
|
||||||
|
|
||||||
|
dcp_dpav_if_t *dcp_dpav_init(dcp_dev_t *dcp);
|
||||||
|
int dcp_dpav_shutdown(dcp_dpav_if_t *dpav);
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue