| /* |
| * drivers/amlogic/media/osd_ext/osd_fb.h |
| * |
| * Copyright (C) 2017 Amlogic, Inc. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| * |
| */ |
| |
| #ifndef _OSD_FB_H_ |
| #define _OSD_FB_H_ |
| |
| /* Linux Headers */ |
| #include <linux/list.h> |
| #include <linux/fb.h> |
| |
| /* Amlogic Headers */ |
| |
| /* Local Headers */ |
| #include <osd/osd.h> |
| |
| #define OSD_COUNT 2 /* enable two OSD layers */ |
| |
| #define INVALID_BPP_ITEM {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} |
| static const struct color_bit_define_s default_color_format_array[] = { |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| { |
| COLOR_INDEX_02_PAL4, 0, 0, |
| 0, 2, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0, |
| FB_VISUAL_PSEUDOCOLOR, 2, |
| }, |
| INVALID_BPP_ITEM, |
| { |
| COLOR_INDEX_04_PAL16, 0, 1, |
| 0, 4, 0, 0, 4, 0, 0, 4, 0, 0, 0, 0, |
| FB_VISUAL_PSEUDOCOLOR, 4, |
| }, |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| { |
| COLOR_INDEX_08_PAL256, 0, 2, |
| 0, 8, 0, 0, 8, 0, 0, 8, 0, 0, 0, 0, |
| FB_VISUAL_PSEUDOCOLOR, 8, |
| }, |
| /*16 bit color*/ |
| { |
| COLOR_INDEX_16_655, 0, 4, |
| 10, 6, 0, 5, 5, 0, 0, 5, 0, 0, 0, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_844, 1, 4, |
| 8, 8, 0, 4, 4, 0, 0, 4, 0, 0, 0, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_6442, 2, 4, |
| 10, 6, 0, 6, 4, 0, 2, 4, 0, 0, 2, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_4444_R, 3, 4, |
| 12, 4, 0, 8, 4, 0, 4, 4, 0, 0, 4, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_4642_R, 7, 4, |
| 12, 4, 0, 6, 6, 0, 2, 4, 0, 0, 2, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_1555_A, 6, 4, |
| 10, 5, 0, 5, 5, 0, 0, 5, 0, 15, 1, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_4444_A, 5, 4, |
| 8, 4, 0, 4, 4, 0, 0, 4, 0, 12, 4, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| { |
| COLOR_INDEX_16_565, 4, 4, |
| 11, 5, 0, 5, 6, 0, 0, 5, 0, 0, 0, 0, |
| FB_VISUAL_TRUECOLOR, 16 |
| }, |
| /*24 bit color*/ |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| { |
| COLOR_INDEX_24_6666_A, 4, 7, |
| 12, 6, 0, 6, 6, 0, 0, 6, 0, 18, 6, 0, |
| FB_VISUAL_TRUECOLOR, 24 |
| }, |
| { |
| COLOR_INDEX_24_6666_R, 3, 7, |
| 18, 6, 0, 12, 6, 0, 6, 6, 0, 0, 6, 0, |
| FB_VISUAL_TRUECOLOR, 24 |
| }, |
| { |
| COLOR_INDEX_24_8565, 2, 7, |
| 11, 5, 0, 5, 6, 0, 0, 5, 0, 16, 8, 0, |
| FB_VISUAL_TRUECOLOR, 24 |
| }, |
| { |
| COLOR_INDEX_24_5658, 1, 7, |
| 19, 5, 0, 13, 6, 0, 8, 5, 0, 0, 8, 0, |
| FB_VISUAL_TRUECOLOR, 24 |
| }, |
| { |
| COLOR_INDEX_24_888_B, 5, 7, |
| 0, 8, 0, 8, 8, 0, 16, 8, 0, 0, 0, 0, |
| FB_VISUAL_TRUECOLOR, 24 |
| }, |
| { |
| COLOR_INDEX_24_RGB, 0, 7, |
| 16, 8, 0, 8, 8, 0, 0, 8, 0, 0, 0, 0, |
| FB_VISUAL_TRUECOLOR, 24 |
| }, |
| /*32 bit color*/ |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| INVALID_BPP_ITEM, |
| { |
| COLOR_INDEX_32_BGRA, 3, 5, |
| 8, 8, 0, 16, 8, 0, 24, 8, 0, 0, 8, 0, |
| FB_VISUAL_TRUECOLOR, 32 |
| }, |
| { |
| COLOR_INDEX_32_ABGR, 2, 5, |
| 0, 8, 0, 8, 8, 0, 16, 8, 0, 24, 8, 0, |
| FB_VISUAL_TRUECOLOR, 32 |
| }, |
| { |
| COLOR_INDEX_32_RGBA, 0, 5, |
| 24, 8, 0, 16, 8, 0, 8, 8, 0, 0, 8, 0, |
| FB_VISUAL_TRUECOLOR, 32 |
| }, |
| { |
| COLOR_INDEX_32_ARGB, 1, 5, |
| 16, 8, 0, 8, 8, 0, 0, 8, 0, 24, 8, 0, |
| FB_VISUAL_TRUECOLOR, 32 |
| }, |
| /*YUV color*/ |
| {COLOR_INDEX_YUV_422, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16}, |
| }; |
| |
| static __u32 var_screeninfo[5]; |
| |
| static struct fb_var_screeninfo fb_def_var[] = { |
| { |
| .xres = 768, |
| .yres = 1024, |
| .xres_virtual = 768, |
| .yres_virtual = 2048, |
| .xoffset = 0, |
| .yoffset = 0, |
| .bits_per_pixel = 32, |
| .grayscale = 0, |
| .red = {0, 0, 0}, |
| .green = {0, 0, 0}, |
| .blue = {0, 0, 0}, |
| .transp = {0, 0, 0}, |
| .nonstd = 0, |
| .activate = FB_ACTIVATE_NOW, |
| .height = -1, |
| .width = -1, |
| .accel_flags = 0, |
| .pixclock = 0, |
| .left_margin = 0, |
| .right_margin = 0, |
| .upper_margin = 0, |
| .lower_margin = 0, |
| .hsync_len = 0, |
| .vsync_len = 0, |
| .sync = 0, |
| .vmode = FB_VMODE_NONINTERLACED, |
| .rotate = 0, |
| |
| } |
| |
| #ifdef CONFIG_AMLOGIC_MEDIA_FB_OSD2_ENABLE |
| , |
| { |
| #if defined(CONFIG_FB_OSD2_DEFAULT_WIDTH) |
| .xres = CONFIG_FB_OSD2_DEFAULT_WIDTH, |
| #else |
| .xres = 32, |
| #endif |
| #if defined(CONFIG_FB_OSD2_DEFAULT_HEIGHT) |
| .yres = CONFIG_FB_OSD2_DEFAULT_HEIGHT, |
| #else |
| .yres = 32, |
| #endif |
| #if defined(CONFIG_FB_OSD2_DEFAULT_WIDTH_VIRTUAL) |
| .xres_virtual = CONFIG_FB_OSD2_DEFAULT_WIDTH_VIRTUAL, |
| #else |
| .xres_virtual = 32, |
| #endif |
| #if defined(CONFIG_FB_OSD2_DEFAULT_HEIGHT_VIRTUAL) |
| .yres_virtual = CONFIG_FB_OSD2_DEFAULT_HEIGHT_VIRTUAL, |
| #else |
| .yres_virtual = 32, |
| #endif |
| .xoffset = 0, |
| .yoffset = 0, |
| #if defined(CONFIG_FB_OSD2_DEFAULT_BITS_PER_PIXEL) |
| .bits_per_pixel = CONFIG_FB_OSD2_DEFAULT_BITS_PER_PIXEL, |
| #else |
| .bits_per_pixel = 32, |
| #endif |
| .grayscale = 0, |
| .red = {0, 0, 0}, |
| .green = {0, 0, 0}, |
| .blue = {0, 0, 0}, |
| .transp = {0, 0, 0}, |
| .nonstd = 0, |
| .activate = FB_ACTIVATE_NOW, |
| .height = -1, |
| .width = -1, |
| .accel_flags = 0, |
| .pixclock = 0, |
| .left_margin = 0, |
| .right_margin = 0, |
| .upper_margin = 0, |
| .lower_margin = 0, |
| .hsync_len = 0, |
| .vsync_len = 0, |
| .sync = 0, |
| .vmode = FB_VMODE_NONINTERLACED, |
| .rotate = 0, |
| } |
| #endif |
| }; |
| |
| static struct fb_fix_screeninfo fb_def_fix = { |
| .id = "OSD FB EXT", |
| .xpanstep = 1, |
| .ypanstep = 1, |
| .type = FB_TYPE_PACKED_PIXELS, |
| .visual = FB_VISUAL_TRUECOLOR, |
| .accel = FB_ACCEL_NONE, |
| }; |
| |
| struct osd_fb_dev_s { |
| struct mutex lock; |
| struct fb_info *fb_info; |
| struct platform_device *dev; |
| u32 fb_mem_paddr; |
| void __iomem *fb_mem_vaddr; |
| u32 fb_len; |
| const struct color_bit_define_s *color; |
| enum vmode_e vmode; |
| struct osd_ctl_s osd_ctl; |
| u32 order; |
| u32 scale; |
| u32 enable_3d; |
| u32 preblend_enable; |
| u32 enable_key_flag; |
| u32 color_key; |
| }; |
| |
| #endif /* _OSD_FB_H_ */ |