1801ab9e9SSimon Glass /* 2801ab9e9SSimon Glass * Copyright (C) 2015 Google, Inc 3801ab9e9SSimon Glass * Written by Simon Glass <sjg@chromium.org> 4801ab9e9SSimon Glass * 5801ab9e9SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 6801ab9e9SSimon Glass */ 7801ab9e9SSimon Glass 8801ab9e9SSimon Glass #ifndef __VIDEO_BRIDGE 9801ab9e9SSimon Glass #define __VIDEO_BRIDGE 10801ab9e9SSimon Glass 11801ab9e9SSimon Glass #include <asm/gpio.h> 12801ab9e9SSimon Glass 13801ab9e9SSimon Glass /** 14801ab9e9SSimon Glass * struct video_bridge_priv - uclass information for video bridges 15801ab9e9SSimon Glass * 16801ab9e9SSimon Glass * @sleep: GPIO to assert to power down the bridge 17801ab9e9SSimon Glass * @reset: GPIO to assert to reset the bridge 18801ab9e9SSimon Glass * @hotplug: Optional GPIO to check if bridge is connected 19801ab9e9SSimon Glass */ 20801ab9e9SSimon Glass struct video_bridge_priv { 21801ab9e9SSimon Glass struct gpio_desc sleep; 22801ab9e9SSimon Glass struct gpio_desc reset; 23801ab9e9SSimon Glass struct gpio_desc hotplug; 24801ab9e9SSimon Glass }; 25801ab9e9SSimon Glass 26801ab9e9SSimon Glass /** 27801ab9e9SSimon Glass * Operations for video bridges 28801ab9e9SSimon Glass */ 29801ab9e9SSimon Glass struct video_bridge_ops { 30801ab9e9SSimon Glass /** 31801ab9e9SSimon Glass * attach() - attach a video bridge 32801ab9e9SSimon Glass * 33801ab9e9SSimon Glass * @return 0 if OK, -ve on error 34801ab9e9SSimon Glass */ 35801ab9e9SSimon Glass int (*attach)(struct udevice *dev); 36801ab9e9SSimon Glass 37801ab9e9SSimon Glass /** 38801ab9e9SSimon Glass * check_attached() - check if a bridge is correctly attached 39801ab9e9SSimon Glass * 40801ab9e9SSimon Glass * This method is optional - if not provided then the hotplug GPIO 41801ab9e9SSimon Glass * will be checked instead. 42801ab9e9SSimon Glass * 43801ab9e9SSimon Glass * @dev: Device to check 44801ab9e9SSimon Glass * @return 0 if attached, -EENOTCONN if not, or other -ve error 45801ab9e9SSimon Glass */ 46801ab9e9SSimon Glass int (*check_attached)(struct udevice *dev); 47801ab9e9SSimon Glass 48801ab9e9SSimon Glass /** 49801ab9e9SSimon Glass * set_backlight() - Set the backlight brightness 50801ab9e9SSimon Glass * 51801ab9e9SSimon Glass * @dev: device to adjust 52801ab9e9SSimon Glass * @percent: brightness percentage (0=off, 100=full brightness) 53801ab9e9SSimon Glass * @return 0 if OK, -ve on error 54801ab9e9SSimon Glass */ 55801ab9e9SSimon Glass int (*set_backlight)(struct udevice *dev, int percent); 56*d2bb07b7SVasily Khoruzhick 57*d2bb07b7SVasily Khoruzhick /** 58*d2bb07b7SVasily Khoruzhick * read_edid() - Read information from EDID 59*d2bb07b7SVasily Khoruzhick * 60*d2bb07b7SVasily Khoruzhick * @dev: Device to read from 61*d2bb07b7SVasily Khoruzhick * @buf: Buffer to read into 62*d2bb07b7SVasily Khoruzhick * @buf_size: Buffer size 63*d2bb07b7SVasily Khoruzhick * @return number of bytes read, <=0 for error 64*d2bb07b7SVasily Khoruzhick */ 65*d2bb07b7SVasily Khoruzhick int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); 66801ab9e9SSimon Glass }; 67801ab9e9SSimon Glass 68801ab9e9SSimon Glass #define video_bridge_get_ops(dev) \ 69801ab9e9SSimon Glass ((struct video_bridge_ops *)(dev)->driver->ops) 70801ab9e9SSimon Glass 71801ab9e9SSimon Glass /** 72801ab9e9SSimon Glass * video_bridge_attach() - attach a video bridge 73801ab9e9SSimon Glass * 74801ab9e9SSimon Glass * @return 0 if OK, -ve on error 75801ab9e9SSimon Glass */ 76801ab9e9SSimon Glass int video_bridge_attach(struct udevice *dev); 77801ab9e9SSimon Glass 78801ab9e9SSimon Glass /** 79801ab9e9SSimon Glass * video_bridge_set_backlight() - Set the backlight brightness 80801ab9e9SSimon Glass * 81801ab9e9SSimon Glass * @percent: brightness percentage (0=off, 100=full brightness) 82801ab9e9SSimon Glass * @return 0 if OK, -ve on error 83801ab9e9SSimon Glass */ 84801ab9e9SSimon Glass int video_bridge_set_backlight(struct udevice *dev, int percent); 85801ab9e9SSimon Glass 86801ab9e9SSimon Glass /** 87801ab9e9SSimon Glass * video_bridge_set_active() - take the bridge in/out of reset/powerdown 88801ab9e9SSimon Glass * 89801ab9e9SSimon Glass * @dev: Device to adjust 90801ab9e9SSimon Glass * @active: true to power up and reset, false to power down 91801ab9e9SSimon Glass */ 92801ab9e9SSimon Glass int video_bridge_set_active(struct udevice *dev, bool active); 93801ab9e9SSimon Glass 94801ab9e9SSimon Glass /** 95801ab9e9SSimon Glass * check_attached() - check if a bridge is correctly attached 96801ab9e9SSimon Glass * 97801ab9e9SSimon Glass * @dev: Device to check 98801ab9e9SSimon Glass * @return 0 if attached, -EENOTCONN if not, or other -ve error 99801ab9e9SSimon Glass */ 100801ab9e9SSimon Glass int video_bridge_check_attached(struct udevice *dev); 101801ab9e9SSimon Glass 102*d2bb07b7SVasily Khoruzhick /** 103*d2bb07b7SVasily Khoruzhick * video_bridge_read_edid() - Read information from EDID 104*d2bb07b7SVasily Khoruzhick * 105*d2bb07b7SVasily Khoruzhick * @dev: Device to read from 106*d2bb07b7SVasily Khoruzhick * @buf: Buffer to read into 107*d2bb07b7SVasily Khoruzhick * @buf_size: Buffer size 108*d2bb07b7SVasily Khoruzhick * @return number of bytes read, <=0 for error 109*d2bb07b7SVasily Khoruzhick */ 110*d2bb07b7SVasily Khoruzhick int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size); 111*d2bb07b7SVasily Khoruzhick 112801ab9e9SSimon Glass #endif 113