blob: 52b9ac9567efacaf08ec4b7e967b31151b0e7d47 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/*
* Copyright (c) 2006-2024, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2024-5-1 GuEe-GUI first version
*/
#include "display-spacemit.h"
static rt_list_t spacemit_connectors = RT_LIST_OBJECT_INIT(spacemit_connectors);
rt_err_t spacemit_display_connector_register(
struct spacemit_display_connector *connector,
struct rt_ofw_node *np,
const struct spacemit_display_connector_ops *ops,
void *priv)
{
struct spacemit_display_connector *entry;
if (!connector || !np || !ops || !ops->get_timing || !ops->enable)
{
return -RT_EINVAL;
}
rt_list_for_each_entry(entry, &spacemit_connectors, list)
{
if (entry->ofw_node == np)
{
return -RT_EBUSY;
}
}
rt_list_init(&connector->list);
connector->ofw_node = rt_ofw_node_get(np);
connector->ops = ops;
connector->priv = priv;
rt_list_insert_before(&spacemit_connectors, &connector->list);
return RT_EOK;
}
void spacemit_display_connector_unregister(
struct spacemit_display_connector *connector)
{
if (!connector || !connector->ofw_node)
{
return;
}
rt_list_remove(&connector->list);
rt_ofw_node_put(connector->ofw_node);
connector->ofw_node = RT_NULL;
connector->ops = RT_NULL;
connector->priv = RT_NULL;
}
struct spacemit_display_connector *spacemit_display_connector_find(
const char *compatible)
{
struct spacemit_display_connector *connector;
if (!compatible)
{
return RT_NULL;
}
rt_list_for_each_entry(connector, &spacemit_connectors, list)
{
if (rt_ofw_node_is_compatible(connector->ofw_node, compatible))
{
return connector;
}
}
return RT_NULL;
}
static int spacemit_display_drivers_init(void)
{
rt_err_t err;
err = spacemit_hdmi_driver_register();
if (err)
{
return err;
}
return spacemit_fb_driver_register();
}
INIT_DEVICE_EXPORT(spacemit_display_drivers_init);
|