1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2015 Google, Inc 3*4882a593Smuzhiyun * Written by Simon Glass <sjg@chromium.org> 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef __VIDEO_BRIDGE 9*4882a593Smuzhiyun #define __VIDEO_BRIDGE 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <asm/gpio.h> 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /** 14*4882a593Smuzhiyun * struct video_bridge_priv - uclass information for video bridges 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * @sleep: GPIO to assert to power down the bridge 17*4882a593Smuzhiyun * @reset: GPIO to assert to reset the bridge 18*4882a593Smuzhiyun * @hotplug: Optional GPIO to check if bridge is connected 19*4882a593Smuzhiyun */ 20*4882a593Smuzhiyun struct video_bridge_priv { 21*4882a593Smuzhiyun struct gpio_desc sleep; 22*4882a593Smuzhiyun struct gpio_desc reset; 23*4882a593Smuzhiyun struct gpio_desc hotplug; 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun /** 27*4882a593Smuzhiyun * Operations for video bridges 28*4882a593Smuzhiyun */ 29*4882a593Smuzhiyun struct video_bridge_ops { 30*4882a593Smuzhiyun /** 31*4882a593Smuzhiyun * attach() - attach a video bridge 32*4882a593Smuzhiyun * 33*4882a593Smuzhiyun * @return 0 if OK, -ve on error 34*4882a593Smuzhiyun */ 35*4882a593Smuzhiyun int (*attach)(struct udevice *dev); 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /** 38*4882a593Smuzhiyun * check_attached() - check if a bridge is correctly attached 39*4882a593Smuzhiyun * 40*4882a593Smuzhiyun * This method is optional - if not provided then the hotplug GPIO 41*4882a593Smuzhiyun * will be checked instead. 42*4882a593Smuzhiyun * 43*4882a593Smuzhiyun * @dev: Device to check 44*4882a593Smuzhiyun * @return 0 if attached, -EENOTCONN if not, or other -ve error 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun int (*check_attached)(struct udevice *dev); 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun /** 49*4882a593Smuzhiyun * set_backlight() - Set the backlight brightness 50*4882a593Smuzhiyun * 51*4882a593Smuzhiyun * @dev: device to adjust 52*4882a593Smuzhiyun * @percent: brightness percentage (0=off, 100=full brightness) 53*4882a593Smuzhiyun * @return 0 if OK, -ve on error 54*4882a593Smuzhiyun */ 55*4882a593Smuzhiyun int (*set_backlight)(struct udevice *dev, int percent); 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /** 58*4882a593Smuzhiyun * read_edid() - Read information from EDID 59*4882a593Smuzhiyun * 60*4882a593Smuzhiyun * @dev: Device to read from 61*4882a593Smuzhiyun * @buf: Buffer to read into 62*4882a593Smuzhiyun * @buf_size: Buffer size 63*4882a593Smuzhiyun * @return number of bytes read, <=0 for error 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /** 68*4882a593Smuzhiyun * get_timing() - Get timing from bridge 69*4882a593Smuzhiyun * 70*4882a593Smuzhiyun * @dev: Device to get timing 71*4882a593Smuzhiyun * @return 0 if OK, -ve on error 72*4882a593Smuzhiyun */ 73*4882a593Smuzhiyun int (*get_timing)(struct udevice *dev); 74*4882a593Smuzhiyun }; 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun #define video_bridge_get_ops(dev) \ 77*4882a593Smuzhiyun ((struct video_bridge_ops *)(dev)->driver->ops) 78*4882a593Smuzhiyun 79*4882a593Smuzhiyun /** 80*4882a593Smuzhiyun * video_bridge_attach() - attach a video bridge 81*4882a593Smuzhiyun * 82*4882a593Smuzhiyun * @return 0 if OK, -ve on error 83*4882a593Smuzhiyun */ 84*4882a593Smuzhiyun int video_bridge_attach(struct udevice *dev); 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun /** 87*4882a593Smuzhiyun * video_bridge_set_backlight() - Set the backlight brightness 88*4882a593Smuzhiyun * 89*4882a593Smuzhiyun * @percent: brightness percentage (0=off, 100=full brightness) 90*4882a593Smuzhiyun * @return 0 if OK, -ve on error 91*4882a593Smuzhiyun */ 92*4882a593Smuzhiyun int video_bridge_set_backlight(struct udevice *dev, int percent); 93*4882a593Smuzhiyun 94*4882a593Smuzhiyun /** 95*4882a593Smuzhiyun * video_bridge_set_active() - take the bridge in/out of reset/powerdown 96*4882a593Smuzhiyun * 97*4882a593Smuzhiyun * @dev: Device to adjust 98*4882a593Smuzhiyun * @active: true to power up and reset, false to power down 99*4882a593Smuzhiyun */ 100*4882a593Smuzhiyun int video_bridge_set_active(struct udevice *dev, bool active); 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun /** 103*4882a593Smuzhiyun * check_attached() - check if a bridge is correctly attached 104*4882a593Smuzhiyun * 105*4882a593Smuzhiyun * @dev: Device to check 106*4882a593Smuzhiyun * @return 0 if attached, -EENOTCONN if not, or other -ve error 107*4882a593Smuzhiyun */ 108*4882a593Smuzhiyun int video_bridge_check_attached(struct udevice *dev); 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /** 111*4882a593Smuzhiyun * video_bridge_read_edid() - Read information from EDID 112*4882a593Smuzhiyun * 113*4882a593Smuzhiyun * @dev: Device to read from 114*4882a593Smuzhiyun * @buf: Buffer to read into 115*4882a593Smuzhiyun * @buf_size: Buffer size 116*4882a593Smuzhiyun * @return number of bytes read, <=0 for error 117*4882a593Smuzhiyun */ 118*4882a593Smuzhiyun int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size); 119*4882a593Smuzhiyun 120*4882a593Smuzhiyun /** 121*4882a593Smuzhiyun * video_bridge_get_timing() - Get timing from bridge 122*4882a593Smuzhiyun * 123*4882a593Smuzhiyun * @dev: Device to get timing 124*4882a593Smuzhiyun * @return 0 if OK, -ve on error 125*4882a593Smuzhiyun */ 126*4882a593Smuzhiyun int video_bridge_get_timing(struct udevice *dev); 127*4882a593Smuzhiyun #endif 128