diff options
author | Vasily Khoruzhick | 2017-09-20 23:29:07 -0700 |
---|---|---|
committer | Anatolij Gustschin | 2017-10-26 14:17:01 +0200 |
commit | fdb5525572ec7dc240ccc960888ae969253fede4 (patch) | |
tree | 647dfc8451b384d2c1310f2ba883c0f97490a4e0 | |
parent | be5b96f0e4110976a284aefe8b43fe09dee40957 (diff) |
dm: video: bridge: add operation to read EDID
Add an operation to read EDID, since bridge may have ability to read
EDID from the panel that is connected to it, for example LCD<->eDP bridge.
Signed-off-by: Vasily Khoruzhick <anarsoul@gmail.com>
-rw-r--r-- | drivers/video/bridge/video-bridge-uclass.c | 10 | ||||
-rw-r--r-- | include/video_bridge.h | 20 |
2 files changed, 30 insertions, 0 deletions
diff --git a/drivers/video/bridge/video-bridge-uclass.c b/drivers/video/bridge/video-bridge-uclass.c index 07270bac9eb..79facd02a68 100644 --- a/drivers/video/bridge/video-bridge-uclass.c +++ b/drivers/video/bridge/video-bridge-uclass.c @@ -8,6 +8,7 @@ #include <common.h> #include <dm.h> #include <errno.h> +#include <edid.h> #include <video_bridge.h> int video_bridge_set_backlight(struct udevice *dev, int percent) @@ -45,6 +46,15 @@ int video_bridge_check_attached(struct udevice *dev) return ops->check_attached(dev); } +int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size) +{ + struct video_bridge_ops *ops = video_bridge_get_ops(dev); + + if (!ops || !ops->read_edid) + return -ENOSYS; + return ops->read_edid(dev, buf, buf_size); +} + static int video_bridge_pre_probe(struct udevice *dev) { struct video_bridge_priv *uc_priv = dev_get_uclass_priv(dev); diff --git a/include/video_bridge.h b/include/video_bridge.h index c7b8681849c..0699a8dda83 100644 --- a/include/video_bridge.h +++ b/include/video_bridge.h @@ -53,6 +53,16 @@ struct video_bridge_ops { * @return 0 if OK, -ve on error */ int (*set_backlight)(struct udevice *dev, int percent); + + /** + * read_edid() - Read information from EDID + * + * @dev: Device to read from + * @buf: Buffer to read into + * @buf_size: Buffer size + * @return number of bytes read, <=0 for error + */ + int (*read_edid)(struct udevice *dev, u8 *buf, int buf_size); }; #define video_bridge_get_ops(dev) \ @@ -89,4 +99,14 @@ int video_bridge_set_active(struct udevice *dev, bool active); */ int video_bridge_check_attached(struct udevice *dev); +/** + * video_bridge_read_edid() - Read information from EDID + * + * @dev: Device to read from + * @buf: Buffer to read into + * @buf_size: Buffer size + * @return number of bytes read, <=0 for error + */ +int video_bridge_read_edid(struct udevice *dev, u8 *buf, int buf_size); + #endif |