1147fd3acSPhilipp Tomsich /*
2147fd3acSPhilipp Tomsich  * Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH
3147fd3acSPhilipp Tomsich  *
4147fd3acSPhilipp Tomsich  * SPDX-License-Identifier:	GPL-2.0+
5147fd3acSPhilipp Tomsich  */
6147fd3acSPhilipp Tomsich 
7147fd3acSPhilipp Tomsich #ifndef __RK_HDMI_H__
8147fd3acSPhilipp Tomsich #define __RK_HDMI_H__
9147fd3acSPhilipp Tomsich 
10147fd3acSPhilipp Tomsich struct rkhdmi_driverdata {
11147fd3acSPhilipp Tomsich 	/* configuration */
12147fd3acSPhilipp Tomsich 	u8 i2c_clk_high;
13147fd3acSPhilipp Tomsich 	u8 i2c_clk_low;
14147fd3acSPhilipp Tomsich 	const char * const *regulator_names;
15147fd3acSPhilipp Tomsich 	u32 regulator_names_cnt;
16147fd3acSPhilipp Tomsich 	/* setters/getters */
17147fd3acSPhilipp Tomsich 	int (*set_input_vop)(struct udevice *dev);
18147fd3acSPhilipp Tomsich 	int (*clk_config)(struct udevice *dev);
19147fd3acSPhilipp Tomsich };
20147fd3acSPhilipp Tomsich 
21147fd3acSPhilipp Tomsich struct rk_hdmi_priv {
22147fd3acSPhilipp Tomsich 	struct dw_hdmi hdmi;
23147fd3acSPhilipp Tomsich 	void *grf;
24147fd3acSPhilipp Tomsich };
25147fd3acSPhilipp Tomsich 
26*56c7ba34SPhilipp Tomsich /**
27*56c7ba34SPhilipp Tomsich  * rk_hdmi_read_edid() - read the attached HDMI/DVI monitor's EDID
28*56c7ba34SPhilipp Tomsich  *
29*56c7ba34SPhilipp Tomsich  * N.B.: The buffer should be large enough to hold 2 EDID blocks, as
30*56c7ba34SPhilipp Tomsich  *       this function calls dw_hdmi_read_edid, which ignores buf_size
31*56c7ba34SPhilipp Tomsich  *       argument and assumes that there's always enough space for 2
32*56c7ba34SPhilipp Tomsich  *       EDID blocks.
33*56c7ba34SPhilipp Tomsich  *
34*56c7ba34SPhilipp Tomsich  * @dev:	device
35*56c7ba34SPhilipp Tomsich  * @buf:	output buffer for the EDID
36*56c7ba34SPhilipp Tomsich  * @buf_size:	number of bytes in the buffer
37*56c7ba34SPhilipp Tomsich  * @return number of bytes read if OK, -ve if something went wrong
38*56c7ba34SPhilipp Tomsich  */
39147fd3acSPhilipp Tomsich int rk_hdmi_read_edid(struct udevice *dev, u8 *buf, int buf_size);
40*56c7ba34SPhilipp Tomsich 
41*56c7ba34SPhilipp Tomsich /**
42*56c7ba34SPhilipp Tomsich  * rk_hdmi_probe_regulators() - probe (autoset + enable) regulators
43*56c7ba34SPhilipp Tomsich  *
44*56c7ba34SPhilipp Tomsich  * Probes a list of regulators by performing autoset and enable
45*56c7ba34SPhilipp Tomsich  * operations on them.  The list of regulators is an array of string
46*56c7ba34SPhilipp Tomsich  * pointers and any individual regulator-probe may fail without
47*56c7ba34SPhilipp Tomsich  * counting as an error.
48*56c7ba34SPhilipp Tomsich  *
49*56c7ba34SPhilipp Tomsich  * @dev:	device
50*56c7ba34SPhilipp Tomsich  * @names:	array of string-pointers to regulator names to probe
51*56c7ba34SPhilipp Tomsich  * @cnt:	number of elements in the 'names' array
52*56c7ba34SPhilipp Tomsich  */
53147fd3acSPhilipp Tomsich void rk_hdmi_probe_regulators(struct udevice *dev,
54147fd3acSPhilipp Tomsich 			      const char * const *names, int cnt);
55*56c7ba34SPhilipp Tomsich /**
56*56c7ba34SPhilipp Tomsich  * rk_hdmi_ofdata_to_platdata() - common ofdata_to_platdata implementation
57*56c7ba34SPhilipp Tomsich  *
58*56c7ba34SPhilipp Tomsich  * @dev:	device
59*56c7ba34SPhilipp Tomsich  * @return 0 if OK, -ve if something went wrong
60*56c7ba34SPhilipp Tomsich  */
61147fd3acSPhilipp Tomsich int rk_hdmi_ofdata_to_platdata(struct udevice *dev);
62*56c7ba34SPhilipp Tomsich 
63*56c7ba34SPhilipp Tomsich /**
64*56c7ba34SPhilipp Tomsich  * rk_hdmi_probe() - common probe implementation
65*56c7ba34SPhilipp Tomsich  *
66*56c7ba34SPhilipp Tomsich  * Performs the following, common initialisation steps:
67*56c7ba34SPhilipp Tomsich  * 1. checks for HPD (i.e. a HDMI monitor being attached)
68*56c7ba34SPhilipp Tomsich  * 2. initialises the Designware HDMI core
69*56c7ba34SPhilipp Tomsich  * 3. initialises the Designware HDMI PHY
70*56c7ba34SPhilipp Tomsich  *
71*56c7ba34SPhilipp Tomsich  * @dev:	device
72*56c7ba34SPhilipp Tomsich  * @return 0 if OK, -ve if something went wrong
73*56c7ba34SPhilipp Tomsich  */
74147fd3acSPhilipp Tomsich int rk_hdmi_probe(struct udevice *dev);
75147fd3acSPhilipp Tomsich 
76147fd3acSPhilipp Tomsich #endif
77