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); 56d2bb07b7SVasily Khoruzhick 57d2bb07b7SVasily Khoruzhick /** 58d2bb07b7SVasily Khoruzhick * read_edid() - Read information from EDID 59d2bb07b7SVasily Khoruzhick * 60d2bb07b7SVasily Khoruzhick * @dev: Device to read from 61d2bb07b7SVasily Khoruzhick * @buf: Buffer to read into 62d2bb07b7SVasily Khoruzhick * @buf_size: Buffer size 63d2bb07b7SVasily Khoruzhick * @return number of bytes read, <=0 for error 64d2bb07b7SVasily Khoruzhick */ 65d2bb07b7SVasily Khoruzhick int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); 66*75eb6fceSAlgea Cao 67*75eb6fceSAlgea Cao /** 68*75eb6fceSAlgea Cao * get_timing() - Get timing from bridge 69*75eb6fceSAlgea Cao * 70*75eb6fceSAlgea Cao * @dev: Device to get timing 71*75eb6fceSAlgea Cao * @return 0 if OK, -ve on error 72*75eb6fceSAlgea Cao */ 73*75eb6fceSAlgea Cao int (*get_timing)(struct udevice *dev); 74801ab9e9SSimon Glass }; 75801ab9e9SSimon Glass 76801ab9e9SSimon Glass #define video_bridge_get_ops(dev) \ 77801ab9e9SSimon Glass ((struct video_bridge_ops *)(dev)->driver->ops) 78801ab9e9SSimon Glass 79801ab9e9SSimon Glass /** 80801ab9e9SSimon Glass * video_bridge_attach() - attach a video bridge 81801ab9e9SSimon Glass * 82801ab9e9SSimon Glass * @return 0 if OK, -ve on error 83801ab9e9SSimon Glass */ 84801ab9e9SSimon Glass int video_bridge_attach(struct udevice *dev); 85801ab9e9SSimon Glass 86801ab9e9SSimon Glass /** 87801ab9e9SSimon Glass * video_bridge_set_backlight() - Set the backlight brightness 88801ab9e9SSimon Glass * 89801ab9e9SSimon Glass * @percent: brightness percentage (0=off, 100=full brightness) 90801ab9e9SSimon Glass * @return 0 if OK, -ve on error 91801ab9e9SSimon Glass */ 92801ab9e9SSimon Glass int video_bridge_set_backlight(struct udevice *dev, int percent); 93801ab9e9SSimon Glass 94801ab9e9SSimon Glass /** 95801ab9e9SSimon Glass * video_bridge_set_active() - take the bridge in/out of reset/powerdown 96801ab9e9SSimon Glass * 97801ab9e9SSimon Glass * @dev: Device to adjust 98801ab9e9SSimon Glass * @active: true to power up and reset, false to power down 99801ab9e9SSimon Glass */ 100801ab9e9SSimon Glass int video_bridge_set_active(struct udevice *dev, bool active); 101801ab9e9SSimon Glass 102801ab9e9SSimon Glass /** 103801ab9e9SSimon Glass * check_attached() - check if a bridge is correctly attached 104801ab9e9SSimon Glass * 105801ab9e9SSimon Glass * @dev: Device to check 106801ab9e9SSimon Glass * @return 0 if attached, -EENOTCONN if not, or other -ve error 107801ab9e9SSimon Glass */ 108801ab9e9SSimon Glass int video_bridge_check_attached(struct udevice *dev); 109801ab9e9SSimon Glass 110d2bb07b7SVasily Khoruzhick /** 111d2bb07b7SVasily Khoruzhick * video_bridge_read_edid() - Read information from EDID 112d2bb07b7SVasily Khoruzhick * 113d2bb07b7SVasily Khoruzhick * @dev: Device to read from 114d2bb07b7SVasily Khoruzhick * @buf: Buffer to read into 115d2bb07b7SVasily Khoruzhick * @buf_size: Buffer size 116d2bb07b7SVasily Khoruzhick * @return number of bytes read, <=0 for error 117d2bb07b7SVasily Khoruzhick */ 118d2bb07b7SVasily Khoruzhick int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size); 119d2bb07b7SVasily Khoruzhick 120*75eb6fceSAlgea Cao /** 121*75eb6fceSAlgea Cao * video_bridge_get_timing() - Get timing from bridge 122*75eb6fceSAlgea Cao * 123*75eb6fceSAlgea Cao * @dev: Device to get timing 124*75eb6fceSAlgea Cao * @return 0 if OK, -ve on error 125*75eb6fceSAlgea Cao */ 126*75eb6fceSAlgea Cao int video_bridge_get_timing(struct udevice *dev); 127801ab9e9SSimon Glass #endif 128