1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2147fd3acSPhilipp Tomsich /*
3147fd3acSPhilipp Tomsich  * Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH
4147fd3acSPhilipp Tomsich  */
5147fd3acSPhilipp Tomsich 
6147fd3acSPhilipp Tomsich #ifndef __RK_HDMI_H__
7147fd3acSPhilipp Tomsich #define __RK_HDMI_H__
8147fd3acSPhilipp Tomsich 
9147fd3acSPhilipp Tomsich struct rkhdmi_driverdata {
10147fd3acSPhilipp Tomsich 	/* configuration */
11147fd3acSPhilipp Tomsich 	u8 i2c_clk_high;
12147fd3acSPhilipp Tomsich 	u8 i2c_clk_low;
13147fd3acSPhilipp Tomsich 	const char * const *regulator_names;
14147fd3acSPhilipp Tomsich 	u32 regulator_names_cnt;
15147fd3acSPhilipp Tomsich 	/* setters/getters */
16147fd3acSPhilipp Tomsich 	int (*set_input_vop)(struct udevice *dev);
17147fd3acSPhilipp Tomsich 	int (*clk_config)(struct udevice *dev);
18147fd3acSPhilipp Tomsich };
19147fd3acSPhilipp Tomsich 
20147fd3acSPhilipp Tomsich struct rk_hdmi_priv {
21147fd3acSPhilipp Tomsich 	struct dw_hdmi hdmi;
22147fd3acSPhilipp Tomsich 	void *grf;
23147fd3acSPhilipp Tomsich };
24147fd3acSPhilipp Tomsich 
2556c7ba34SPhilipp Tomsich /**
2656c7ba34SPhilipp Tomsich  * rk_hdmi_read_edid() - read the attached HDMI/DVI monitor's EDID
2756c7ba34SPhilipp Tomsich  *
2856c7ba34SPhilipp Tomsich  * N.B.: The buffer should be large enough to hold 2 EDID blocks, as
2956c7ba34SPhilipp Tomsich  *       this function calls dw_hdmi_read_edid, which ignores buf_size
3056c7ba34SPhilipp Tomsich  *       argument and assumes that there's always enough space for 2
3156c7ba34SPhilipp Tomsich  *       EDID blocks.
3256c7ba34SPhilipp Tomsich  *
3356c7ba34SPhilipp Tomsich  * @dev:	device
3456c7ba34SPhilipp Tomsich  * @buf:	output buffer for the EDID
3556c7ba34SPhilipp Tomsich  * @buf_size:	number of bytes in the buffer
3656c7ba34SPhilipp Tomsich  * @return number of bytes read if OK, -ve if something went wrong
3756c7ba34SPhilipp Tomsich  */
38147fd3acSPhilipp Tomsich int rk_hdmi_read_edid(struct udevice *dev, u8 *buf, int buf_size);
3956c7ba34SPhilipp Tomsich 
4056c7ba34SPhilipp Tomsich /**
4156c7ba34SPhilipp Tomsich  * rk_hdmi_probe_regulators() - probe (autoset + enable) regulators
4256c7ba34SPhilipp Tomsich  *
4356c7ba34SPhilipp Tomsich  * Probes a list of regulators by performing autoset and enable
4456c7ba34SPhilipp Tomsich  * operations on them.  The list of regulators is an array of string
4556c7ba34SPhilipp Tomsich  * pointers and any individual regulator-probe may fail without
4656c7ba34SPhilipp Tomsich  * counting as an error.
4756c7ba34SPhilipp Tomsich  *
4856c7ba34SPhilipp Tomsich  * @dev:	device
4956c7ba34SPhilipp Tomsich  * @names:	array of string-pointers to regulator names to probe
5056c7ba34SPhilipp Tomsich  * @cnt:	number of elements in the 'names' array
5156c7ba34SPhilipp Tomsich  */
52147fd3acSPhilipp Tomsich void rk_hdmi_probe_regulators(struct udevice *dev,
53147fd3acSPhilipp Tomsich 			      const char * const *names, int cnt);
5456c7ba34SPhilipp Tomsich /**
5556c7ba34SPhilipp Tomsich  * rk_hdmi_ofdata_to_platdata() - common ofdata_to_platdata implementation
5656c7ba34SPhilipp Tomsich  *
5756c7ba34SPhilipp Tomsich  * @dev:	device
5856c7ba34SPhilipp Tomsich  * @return 0 if OK, -ve if something went wrong
5956c7ba34SPhilipp Tomsich  */
60147fd3acSPhilipp Tomsich int rk_hdmi_ofdata_to_platdata(struct udevice *dev);
6156c7ba34SPhilipp Tomsich 
6256c7ba34SPhilipp Tomsich /**
6356c7ba34SPhilipp Tomsich  * rk_hdmi_probe() - common probe implementation
6456c7ba34SPhilipp Tomsich  *
6556c7ba34SPhilipp Tomsich  * Performs the following, common initialisation steps:
6656c7ba34SPhilipp Tomsich  * 1. checks for HPD (i.e. a HDMI monitor being attached)
6756c7ba34SPhilipp Tomsich  * 2. initialises the Designware HDMI core
6856c7ba34SPhilipp Tomsich  * 3. initialises the Designware HDMI PHY
6956c7ba34SPhilipp Tomsich  *
7056c7ba34SPhilipp Tomsich  * @dev:	device
7156c7ba34SPhilipp Tomsich  * @return 0 if OK, -ve if something went wrong
7256c7ba34SPhilipp Tomsich  */
73147fd3acSPhilipp Tomsich int rk_hdmi_probe(struct udevice *dev);
74147fd3acSPhilipp Tomsich 
75147fd3acSPhilipp Tomsich #endif
76