1d46d4047SPhilipp Tomsich /* 2d46d4047SPhilipp Tomsich * Copyright (c) 2017 Theobroma Systems Design und Consulting GmbH 3d46d4047SPhilipp Tomsich * 4d46d4047SPhilipp Tomsich * SPDX-License-Identifier: GPL-2.0+ 5d46d4047SPhilipp Tomsich */ 6d46d4047SPhilipp Tomsich 7d46d4047SPhilipp Tomsich #ifndef __RK_VOP_H__ 8d46d4047SPhilipp Tomsich #define __RK_VOP_H__ 9d46d4047SPhilipp Tomsich 10d46d4047SPhilipp Tomsich #include <asm/arch/vop_rk3288.h> 11d46d4047SPhilipp Tomsich 12d46d4047SPhilipp Tomsich struct rk_vop_priv { 1364199d4eSPhilipp Tomsich void *grf; 14d46d4047SPhilipp Tomsich void *regs; 15d46d4047SPhilipp Tomsich }; 16d46d4047SPhilipp Tomsich 17d46d4047SPhilipp Tomsich enum vop_features { 18d46d4047SPhilipp Tomsich VOP_FEATURE_OUTPUT_10BIT = (1 << 0), 19d46d4047SPhilipp Tomsich }; 20d46d4047SPhilipp Tomsich 21d46d4047SPhilipp Tomsich struct rkvop_driverdata { 22d46d4047SPhilipp Tomsich /* configuration */ 23d46d4047SPhilipp Tomsich u32 features; 24d46d4047SPhilipp Tomsich /* block-specific setters/getters */ 25d46d4047SPhilipp Tomsich void (*set_pin_polarity)(struct udevice *, enum vop_modes, u32); 26d46d4047SPhilipp Tomsich }; 27d46d4047SPhilipp Tomsich 28*76a5e1b7SPhilipp Tomsich /** 29*76a5e1b7SPhilipp Tomsich * rk_vop_probe() - common probe implementation 30*76a5e1b7SPhilipp Tomsich * 31*76a5e1b7SPhilipp Tomsich * Performs the rk_display_init on each port-subnode until finding a 32*76a5e1b7SPhilipp Tomsich * working port (or returning an error if none of the ports could be 33*76a5e1b7SPhilipp Tomsich * successfully initialised). 34*76a5e1b7SPhilipp Tomsich * 35*76a5e1b7SPhilipp Tomsich * @dev: device 36*76a5e1b7SPhilipp Tomsich * @return 0 if OK, -ve if something went wrong 37*76a5e1b7SPhilipp Tomsich */ 38d46d4047SPhilipp Tomsich int rk_vop_probe(struct udevice *dev); 39*76a5e1b7SPhilipp Tomsich 40*76a5e1b7SPhilipp Tomsich /** 41*76a5e1b7SPhilipp Tomsich * rk_vop_bind() - common bind implementation 42*76a5e1b7SPhilipp Tomsich * 43*76a5e1b7SPhilipp Tomsich * Sets the plat->size field to the amount of memory to be reserved for 44*76a5e1b7SPhilipp Tomsich * the framebuffer: this is always 45*76a5e1b7SPhilipp Tomsich * (32 BPP) x VIDEO_ROCKCHIP_MAX_XRES x VIDEO_ROCKCHIP_MAX_YRES 46*76a5e1b7SPhilipp Tomsich * 47*76a5e1b7SPhilipp Tomsich * @dev: device 48*76a5e1b7SPhilipp Tomsich * @return 0 (always OK) 49*76a5e1b7SPhilipp Tomsich */ 50d46d4047SPhilipp Tomsich int rk_vop_bind(struct udevice *dev); 51*76a5e1b7SPhilipp Tomsich 52*76a5e1b7SPhilipp Tomsich /** 53*76a5e1b7SPhilipp Tomsich * rk_vop_probe_regulators() - probe (autoset + enable) regulators 54*76a5e1b7SPhilipp Tomsich * 55*76a5e1b7SPhilipp Tomsich * Probes a list of regulators by performing autoset and enable 56*76a5e1b7SPhilipp Tomsich * operations on them. The list of regulators is an array of string 57*76a5e1b7SPhilipp Tomsich * pointers and any individual regulator-probe may fail without 58*76a5e1b7SPhilipp Tomsich * counting as an error. 59*76a5e1b7SPhilipp Tomsich * 60*76a5e1b7SPhilipp Tomsich * @dev: device 61*76a5e1b7SPhilipp Tomsich * @names: array of string-pointers to regulator names to probe 62*76a5e1b7SPhilipp Tomsich * @cnt: number of elements in the 'names' array 63*76a5e1b7SPhilipp Tomsich */ 64d46d4047SPhilipp Tomsich void rk_vop_probe_regulators(struct udevice *dev, 65d46d4047SPhilipp Tomsich const char * const *names, int cnt); 66d46d4047SPhilipp Tomsich 67d46d4047SPhilipp Tomsich #endif 68