Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/media/cec-notifier.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* cec-notifier.h - notify CEC drivers of physical address changes
4
*
5
* Copyright 2016 Russell King.
6
* Copyright 2016-2017 Cisco Systems, Inc. and/or its affiliates. All rights reserved.
7
*/
8
9
#ifndef LINUX_CEC_NOTIFIER_H
10
#define LINUX_CEC_NOTIFIER_H
11
12
#include <linux/err.h>
13
#include <media/cec.h>
14
15
struct device;
16
struct edid;
17
struct cec_adapter;
18
struct cec_notifier;
19
20
#if IS_REACHABLE(CONFIG_CEC_CORE) && IS_ENABLED(CONFIG_CEC_NOTIFIER)
21
22
/**
23
* cec_notifier_conn_register - find or create a new cec_notifier for the given
24
* HDMI device and connector tuple.
25
* @hdmi_dev: HDMI device that sends the events.
26
* @port_name: the connector name from which the event occurs. May be NULL
27
* if there is always only one HDMI connector created by the HDMI device.
28
* @conn_info: the connector info from which the event occurs (may be NULL)
29
*
30
* If a notifier for device @dev and connector @port_name already exists, then
31
* increase the refcount and return that notifier.
32
*
33
* If it doesn't exist, then allocate a new notifier struct and return a
34
* pointer to that new struct.
35
*
36
* Return NULL if the memory could not be allocated.
37
*/
38
struct cec_notifier *
39
cec_notifier_conn_register(struct device *hdmi_dev, const char *port_name,
40
const struct cec_connector_info *conn_info);
41
42
/**
43
* cec_notifier_conn_unregister - decrease refcount and delete when the
44
* refcount reaches 0.
45
* @n: notifier. If NULL, then this function does nothing.
46
*/
47
void cec_notifier_conn_unregister(struct cec_notifier *n);
48
49
/**
50
* cec_notifier_cec_adap_register - find or create a new cec_notifier for the
51
* given device.
52
* @hdmi_dev: HDMI device that sends the events.
53
* @port_name: the connector name from which the event occurs. May be NULL
54
* if there is always only one HDMI connector created by the HDMI device.
55
* @adap: the cec adapter that registered this notifier.
56
*
57
* If a notifier for device @dev and connector @port_name already exists, then
58
* increase the refcount and return that notifier.
59
*
60
* If it doesn't exist, then allocate a new notifier struct and return a
61
* pointer to that new struct.
62
*
63
* Return NULL if the memory could not be allocated.
64
*/
65
struct cec_notifier *
66
cec_notifier_cec_adap_register(struct device *hdmi_dev, const char *port_name,
67
struct cec_adapter *adap);
68
69
/**
70
* cec_notifier_cec_adap_unregister - decrease refcount and delete when the
71
* refcount reaches 0.
72
* @n: notifier. If NULL, then this function does nothing.
73
* @adap: the cec adapter that registered this notifier.
74
*/
75
void cec_notifier_cec_adap_unregister(struct cec_notifier *n,
76
struct cec_adapter *adap);
77
78
/**
79
* cec_notifier_set_phys_addr - set a new physical address.
80
* @n: the CEC notifier
81
* @pa: the CEC physical address
82
*
83
* Set a new CEC physical address.
84
* Does nothing if @n == NULL.
85
*/
86
void cec_notifier_set_phys_addr(struct cec_notifier *n, u16 pa);
87
88
/**
89
* cec_notifier_set_phys_addr_from_edid - set parse the PA from the EDID.
90
* @n: the CEC notifier
91
* @edid: the struct edid pointer
92
*
93
* Parses the EDID to obtain the new CEC physical address and set it.
94
* Does nothing if @n == NULL.
95
*/
96
void cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n,
97
const struct edid *edid);
98
99
/**
100
* cec_notifier_parse_hdmi_phandle - find the hdmi device from "hdmi-phandle"
101
* @dev: the device with the "hdmi-phandle" device tree property
102
*
103
* Returns the device pointer referenced by the "hdmi-phandle" property.
104
* Note that the refcount of the returned device is not incremented.
105
* This device pointer is only used as a key value in the notifier
106
* list, but it is never accessed by the CEC driver.
107
*/
108
struct device *cec_notifier_parse_hdmi_phandle(struct device *dev);
109
110
#else
111
112
static inline struct cec_notifier *
113
cec_notifier_conn_register(struct device *hdmi_dev, const char *port_name,
114
const struct cec_connector_info *conn_info)
115
{
116
/* A non-NULL pointer is expected on success */
117
return (struct cec_notifier *)0xdeadfeed;
118
}
119
120
static inline void cec_notifier_conn_unregister(struct cec_notifier *n)
121
{
122
}
123
124
static inline struct cec_notifier *
125
cec_notifier_cec_adap_register(struct device *hdmi_dev, const char *port_name,
126
struct cec_adapter *adap)
127
{
128
/* A non-NULL pointer is expected on success */
129
return (struct cec_notifier *)0xdeadfeed;
130
}
131
132
static inline void cec_notifier_cec_adap_unregister(struct cec_notifier *n,
133
struct cec_adapter *adap)
134
{
135
}
136
137
static inline void cec_notifier_set_phys_addr(struct cec_notifier *n, u16 pa)
138
{
139
}
140
141
static inline void cec_notifier_set_phys_addr_from_edid(struct cec_notifier *n,
142
const struct edid *edid)
143
{
144
}
145
146
static inline struct device *cec_notifier_parse_hdmi_phandle(struct device *dev)
147
{
148
return ERR_PTR(-ENODEV);
149
}
150
151
#endif
152
153
/**
154
* cec_notifier_phys_addr_invalidate() - set the physical address to INVALID
155
*
156
* @n: the CEC notifier
157
*
158
* This is a simple helper function to invalidate the physical
159
* address. Does nothing if @n == NULL.
160
*/
161
static inline void cec_notifier_phys_addr_invalidate(struct cec_notifier *n)
162
{
163
cec_notifier_set_phys_addr(n, CEC_PHYS_ADDR_INVALID);
164
}
165
166
#endif
167
168