diff options
author | Corey Tabaka <corey.tabaka@gmail.com> | 2013-05-27 16:31:33 -0700 |
---|---|---|
committer | Corey Tabaka <corey.tabaka@gmail.com> | 2013-07-18 02:30:41 -0700 |
commit | de8c78df508abd75461d1399eecb6f18e0232f26 (patch) | |
tree | 7f7c6b3d7d71725f140287031c25b4b03972c460 | |
parent | 561c6c2df606b90fe5ce3f9bbcbf33826a9726f4 (diff) | |
download | lk-de8c78df508abd75461d1399eecb6f18e0232f26.tar.gz |
[dev] Add basic framebuffer device class.
-rw-r--r-- | dev/class/fb_api.c | 74 | ||||
-rw-r--r-- | dev/rules.mk | 1 | ||||
-rw-r--r-- | include/dev/class/fb.h | 53 |
3 files changed, 128 insertions, 0 deletions
diff --git a/dev/class/fb_api.c b/dev/class/fb_api.c new file mode 100644 index 00000000..314442ef --- /dev/null +++ b/dev/class/fb_api.c @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2013 Corey Tabaka + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <err.h> +#include <dev/class/fb.h> + +status_t class_fb_set_mode(struct device *dev, size_t width, size_t height, size_t bpp) +{ + struct fb_ops *ops = device_get_driver_ops(dev, struct fb_ops, std); + if (!ops) + return ERR_NOT_CONFIGURED; + + if (ops->set_mode) + return ops->set_mode(dev, width, height, bpp); + else + return ERR_NOT_SUPPORTED; +} + +status_t class_fb_get_info(struct device *dev, struct fb_info *info) +{ + struct fb_ops *ops = device_get_driver_ops(dev, struct fb_ops, std); + if (!ops) + return ERR_NOT_CONFIGURED; + + if (ops->get_info) + return ops->get_info(dev, info); + else + return ERR_NOT_SUPPORTED; +} + +status_t class_fb_update(struct device *dev) +{ + struct fb_ops *ops = device_get_driver_ops(dev, struct fb_ops, std); + if (!ops) + return ERR_NOT_CONFIGURED; + + if (ops->update) + return ops->update(dev); + else + return ERR_NOT_SUPPORTED; +} + +status_t class_fb_update_region(struct device *dev, size_t x, size_t y, size_t width, size_t height) +{ + struct fb_ops *ops = device_get_driver_ops(dev, struct fb_ops, std); + if (!ops) + return ERR_NOT_CONFIGURED; + + if (ops->update_region) + return ops->update_region(dev, x, y, width, height); + else + return ERR_NOT_SUPPORTED; +} + diff --git a/dev/rules.mk b/dev/rules.mk index 2987625a..b8555652 100644 --- a/dev/rules.mk +++ b/dev/rules.mk @@ -9,5 +9,6 @@ MODULE_SRCS += \ $(LOCAL_DIR)/class/i2c_api.c \ $(LOCAL_DIR)/class/spi_api.c \ $(LOCAL_DIR)/class/uart_api.c \ + $(LOCAL_DIR)/class/fb_api.c \ include make/module.mk diff --git a/include/dev/class/fb.h b/include/dev/class/fb.h new file mode 100644 index 00000000..8a1f5600 --- /dev/null +++ b/include/dev/class/fb.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2013 Corey Tabaka + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files + * (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, + * publish, distribute, sublicense, and/or sell copies of the Software, + * and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef __DEV_CLASS_FB_H +#define __DEV_CLASS_FB_H + +#include <dev/driver.h> + +struct fb_info { + void *addr; + size_t line_width; + size_t width; + size_t height; + size_t bpp; +}; + +/* fb interface */ +struct fb_ops { + struct driver_ops std; + + status_t (*set_mode)(struct device *dev, size_t width, size_t height, size_t bpp); + status_t (*get_info)(struct device *dev, struct fb_info *info); + status_t (*update)(struct device *dev); + status_t (*update_region)(struct device *dev, size_t x, size_t y, size_t width, size_t height); +}; + +status_t class_fb_set_mode(struct device *dev, size_t width, size_t height, size_t bpp); +status_t class_fb_get_info(struct device *dev, struct fb_info *info); +status_t class_fb_update(struct device *dev); +status_t class_fb_update_region(struct device *dev, size_t x, size_t y, size_t width, size_t height); + +#endif + + |