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