diff options
Diffstat (limited to 'drivers/video/samsung_duallcd/extension')
-rw-r--r-- | drivers/video/samsung_duallcd/extension/Makefile | 6 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/cmc623.h | 725 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/mdnie.c | 729 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/mdnie.h | 134 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/regs-mdnie.h | 166 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/regs_fimd_lite.h | 396 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/s5p_fimd_ext.c | 209 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/s5p_fimd_ext.h | 30 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/s5p_fimd_lite.c | 502 | ||||
-rw-r--r-- | drivers/video/samsung_duallcd/extension/s5p_fimd_lite.h | 37 |
10 files changed, 0 insertions, 2934 deletions
diff --git a/drivers/video/samsung_duallcd/extension/Makefile b/drivers/video/samsung_duallcd/extension/Makefile deleted file mode 100644 index 190c9cd..0000000 --- a/drivers/video/samsung_duallcd/extension/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -# -# Makefile for fimd extension driver. -# -obj-$(CONFIG_FIMD_EXT_SUPPORT) += s5p_fimd_ext.o -obj-$(CONFIG_FIMD_LITE_SUPPORT) += s5p_fimd_lite.o -obj-$(CONFIG_MDNIE_SUPPORT) += mdnie.o diff --git a/drivers/video/samsung_duallcd/extension/cmc623.h b/drivers/video/samsung_duallcd/extension/cmc623.h deleted file mode 100644 index 8da2e79..0000000 --- a/drivers/video/samsung_duallcd/extension/cmc623.h +++ /dev/null @@ -1,725 +0,0 @@ -/* - * CMC623 Setting table for SLP7 Machine. - * - * Author: InKi Dae <inki.dae@samsung.com> - * Eunchul Kim <chulspro.kim@samsung.com> - * - * 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. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include "mdnie.h" - -static const unsigned short dynamic_ui[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x008c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0040, /*DE pe*/ - 0x0093, 0x0040, /*DE pf*/ - 0x0094, 0x0040, /*DE pb*/ - 0x0095, 0x0040, /*DE ne*/ - 0x0096, 0x0040, /*DE nf*/ - 0x0097, 0x0040, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1804, /*CS weight grayTH*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0080, /*CC chsel strength*/ - 0x0020, 0x0000, /*CC lut r 0*/ - 0x0021, 0x0d93, /*CC lut r 16 144*/ - 0x0022, 0x1aa5, /*CC lut r 32 160*/ - 0x0023, 0x29b7, /*CC lut r 48 176*/ - 0x0024, 0x39c8, /*CC lut r 64 192*/ - 0x0025, 0x4bd8, /*CC lut r 80 208*/ - 0x0026, 0x5de6, /*CC lut r 96 224*/ - 0x0027, 0x6ff4, /*CC lut r 112 240*/ - 0x0028, 0x81ff, /*CC lut r 128 255*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short dynamic_gallery[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x008c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0080, /*DE pe*/ - 0x0093, 0x0080, /*DE pf*/ - 0x0094, 0x0080, /*DE pb*/ - 0x0095, 0x0080, /*DE ne*/ - 0x0096, 0x0080, /*DE nf*/ - 0x0097, 0x0080, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1404, /*CS weight grayTH*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0080, /*CC chsel strength*/ - 0x0020, 0x0000, /*CC lut r 0*/ - 0x0021, 0x0d93, /*CC lut r 16 144*/ - 0x0022, 0x1aa5, /*CC lut r 32 160*/ - 0x0023, 0x29b7, /*CC lut r 48 176*/ - 0x0024, 0x39c8, /*CC lut r 64 192*/ - 0x0025, 0x4bd8, /*CC lut r 80 208*/ - 0x0026, 0x5de6, /*CC lut r 96 224*/ - 0x0027, 0x6ff4, /*CC lut r 112 240*/ - 0x0028, 0x81ff, /*CC lut r 128 255*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short dynamic_video[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x008c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0080, /*DE pe*/ - 0x0093, 0x0080, /*DE pf*/ - 0x0094, 0x0080, /*DE pb*/ - 0x0095, 0x0080, /*DE ne*/ - 0x0096, 0x0080, /*DE nf*/ - 0x0097, 0x0080, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1404, /*CS weight grayTH*/ - 0x00e1, 0xff00, /*SCR RrCr*/ - 0x00e2, 0x00ff, /*SCR RgCg*/ - 0x00e3, 0x00ff, /*SCR RbCb*/ - 0x00e4, 0x00ff, /*SCR GrMr*/ - 0x00e5, 0xff00, /*SCR GgMg*/ - 0x00e6, 0x00ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00ff, /*SCR BgYg*/ - 0x00e9, 0xff00, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00ff, /*SCR KgWg*/ - 0x00ec, 0x00ff, /*SCR KbWb*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0080, /*CC chsel strength*/ - 0x0020, 0x0000, /*CC lut r 0*/ - 0x0021, 0x0d93, /*CC lut r 16 144*/ - 0x0022, 0x1aa5, /*CC lut r 32 160*/ - 0x0023, 0x29b7, /*CC lut r 48 176*/ - 0x0024, 0x39c8, /*CC lut r 64 192*/ - 0x0025, 0x4bd8, /*CC lut r 80 208*/ - 0x0026, 0x5de6, /*CC lut r 96 224*/ - 0x0027, 0x6ff4, /*CC lut r 112 240*/ - 0x0028, 0x81ff, /*CC lut r 128 255*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short dynamic_vtcall[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x008e, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0005, /*FA cs1 | de8 dnr4 hdr2 fa1*/ - 0x0039, 0x0080, /*FA dnrWeight*/ - 0x0080, 0x0fff, /*DNR dirTh*/ - 0x0081, 0x19ff, /*DNR dirnumTh decon7Th*/ - 0x0082, 0xff16, /*DNR decon5Th maskTh*/ - 0x0083, 0x0000, /*DNR blTh*/ - 0x0092, 0x00e0, /*DE pe*/ - 0x0093, 0x00e0, /*DE pf*/ - 0x0094, 0x00e0, /*DE pb*/ - 0x0095, 0x00e0, /*DE ne*/ - 0x0096, 0x00e0, /*DE nf*/ - 0x0097, 0x00e0, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0010, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1a04, /*CS weight grayTH*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0080, /*CC chsel strength*/ - 0x0020, 0x0000, /*CC lut r 0*/ - 0x0021, 0x0d93, /*CC lut r 16 144*/ - 0x0022, 0x1aa5, /*CC lut r 32 160*/ - 0x0023, 0x29b7, /*CC lut r 48 176*/ - 0x0024, 0x39c8, /*CC lut r 64 192*/ - 0x0025, 0x4bd8, /*CC lut r 80 208*/ - 0x0026, 0x5de6, /*CC lut r 96 224*/ - 0x0027, 0x6ff4, /*CC lut r 112 240*/ - 0x0028, 0x81ff, /*CC lut r 128 255*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short movie_ui[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00f8, /*SCR KgWg*/ - 0x00ec, 0x00f1, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short movie_gallery[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00f8, /*SCR KgWg*/ - 0x00ec, 0x00f1, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short movie_video[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0000, /*DE pe*/ - 0x0093, 0x0000, /*DE pf*/ - 0x0094, 0x0000, /*DE pb*/ - 0x0095, 0x0000, /*DE ne*/ - 0x0096, 0x0000, /*DE nf*/ - 0x0097, 0x0000, /*DE nb*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1004, /*CS weight grayTH*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00f8, /*SCR KgWg*/ - 0x00ec, 0x00f1, /*SCR KbWb*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0000, /*CC chsel strength*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short movie_vtcall[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x002e, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0005, /*FA cs1 | de8 dnr4 hdr2 fa1*/ - 0x0039, 0x0080, /*FA dnrWeight*/ - 0x0080, 0x0fff, /*DNR dirTh*/ - 0x0081, 0x19ff, /*DNR dirnumTh decon7Th*/ - 0x0082, 0xff16, /*DNR decon5Th maskTh*/ - 0x0083, 0x0000, /*DNR blTh*/ - 0x0092, 0x0040, /*DE pe*/ - 0x0093, 0x0040, /*DE pf*/ - 0x0094, 0x0040, /*DE pb*/ - 0x0095, 0x0040, /*DE ne*/ - 0x0096, 0x0040, /*DE nf*/ - 0x0097, 0x0040, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0010, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1204, /*CS weight grayTH*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00f8, /*SCR KgWg*/ - 0x00ec, 0x00f1, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short natural_ui[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x002c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0020, /*DE pe*/ - 0x0093, 0x0020, /*DE pf*/ - 0x0094, 0x0020, /*DE pb*/ - 0x0095, 0x0020, /*DE ne*/ - 0x0096, 0x0020, /*DE nf*/ - 0x0097, 0x0020, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1804, /*CS weight grayTH*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00fa, /*SCR KgWg*/ - 0x00ec, 0x00f8, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short natural_gallery[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x002c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0060, /*DE pe*/ - 0x0093, 0x0060, /*DE pf*/ - 0x0094, 0x0060, /*DE pb*/ - 0x0095, 0x0060, /*DE ne*/ - 0x0096, 0x0060, /*DE nf*/ - 0x0097, 0x0060, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1804, /*CS weight grayTH*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00fa, /*SCR KgWg*/ - 0x00ec, 0x00f8, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short natural_video[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x002c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0060, /*DE pe*/ - 0x0093, 0x0060, /*DE pf*/ - 0x0094, 0x0060, /*DE pb*/ - 0x0095, 0x0060, /*DE ne*/ - 0x0096, 0x0060, /*DE nf*/ - 0x0097, 0x0060, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1804, /*CS weight grayTH*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00fa, /*SCR KgWg*/ - 0x00ec, 0x00f8, /*SCR KbWb*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0000, /*CC chsel strength*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short natural_vtcall[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x002e, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0005, /*FA cs1 | de8 dnr4 hdr2 fa1*/ - 0x0039, 0x0080, /*FA dnrWeight*/ - 0x0080, 0x0fff, /*DNR dirTh*/ - 0x0081, 0x19ff, /*DNR dirnumTh decon7Th*/ - 0x0082, 0xff16, /*DNR decon5Th maskTh*/ - 0x0083, 0x0000, /*DNR blTh*/ - 0x0092, 0x00c0, /*DE pe*/ - 0x0093, 0x00c0, /*DE pf*/ - 0x0094, 0x00c0, /*DE pb*/ - 0x0095, 0x00c0, /*DE ne*/ - 0x0096, 0x00c0, /*DE nf*/ - 0x0097, 0x00c0, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0010, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1804, /*CS weight grayTH*/ - 0x00e1, 0xd6ac, /*SCR RrCr*/ - 0x00e2, 0x32ff, /*SCR RgCg*/ - 0x00e3, 0x2ef0, /*SCR RbCb*/ - 0x00e4, 0xa5fa, /*SCR GrMr*/ - 0x00e5, 0xff4d, /*SCR GgMg*/ - 0x00e6, 0x59ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00fb, /*SCR BgYg*/ - 0x00e9, 0xff61, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00fa, /*SCR KgWg*/ - 0x00ec, 0x00f8, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short standard_ui[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x000c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0020, /*DE pe*/ - 0x0093, 0x0020, /*DE pf*/ - 0x0094, 0x0020, /*DE pb*/ - 0x0095, 0x0020, /*DE ne*/ - 0x0096, 0x0020, /*DE nf*/ - 0x0097, 0x0020, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1604, /*CS weight grayTH*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short standard_gallery[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x000c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0060, /*DE pe*/ - 0x0093, 0x0060, /*DE pf*/ - 0x0094, 0x0060, /*DE pb*/ - 0x0095, 0x0060, /*DE ne*/ - 0x0096, 0x0060, /*DE nf*/ - 0x0097, 0x0060, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1204, /*CS weight grayTH*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short standard_video[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x000c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0060, /*DE pe*/ - 0x0093, 0x0060, /*DE pf*/ - 0x0094, 0x0060, /*DE pb*/ - 0x0095, 0x0060, /*DE ne*/ - 0x0096, 0x0060, /*DE nf*/ - 0x0097, 0x0060, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1204, /*CS weight grayTH*/ - 0x00e1, 0xff00, /*SCR RrCr*/ - 0x00e2, 0x00ff, /*SCR RgCg*/ - 0x00e3, 0x00ff, /*SCR RbCb*/ - 0x00e4, 0x00ff, /*SCR GrMr*/ - 0x00e5, 0xff00, /*SCR GgMg*/ - 0x00e6, 0x00ff, /*SCR GbMb*/ - 0x00e7, 0x00ff, /*SCR BrYr*/ - 0x00e8, 0x00ff, /*SCR BgYg*/ - 0x00e9, 0xff00, /*SCR BbYb*/ - 0x00ea, 0x00ff, /*SCR KrWr*/ - 0x00eb, 0x00ff, /*SCR KgWg*/ - 0x00ec, 0x00ff, /*SCR KbWb*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x001f, 0x0000, /*CC chsel strength*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short standard_vtcall[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x000e, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0005, /*FA cs1 | de8 dnr4 hdr2 fa1*/ - 0x0039, 0x0080, /*FA dnrWeight*/ - 0x0080, 0x0fff, /*DNR dirTh*/ - 0x0081, 0x19ff, /*DNR dirnumTh decon7Th*/ - 0x0082, 0xff16, /*DNR decon5Th maskTh*/ - 0x0083, 0x0000, /*DNR blTh*/ - 0x0092, 0x00c0, /*DE pe*/ - 0x0093, 0x00c0, /*DE pf*/ - 0x0094, 0x00c0, /*DE pb*/ - 0x0095, 0x00c0, /*DE ne*/ - 0x0096, 0x00c0, /*DE nf*/ - 0x0097, 0x00c0, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0010, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1804, /*CS weight grayTH*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short camera[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x000c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0060, /*DE pe*/ - 0x0093, 0x0060, /*DE pf*/ - 0x0094, 0x0060, /*DE pb*/ - 0x0095, 0x0060, /*DE ne*/ - 0x0096, 0x0060, /*DE nf*/ - 0x0097, 0x0060, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg ry*/ - 0x00b1, 0x1010, /*CS hg gc*/ - 0x00b2, 0x1010, /*CS hg bm*/ - 0x00b3, 0x1204, /*CS weight grayTH*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short camera_outdoor[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x040c, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x0092, 0x0060, /*DE pe*/ - 0x0093, 0x0060, /*DE pf*/ - 0x0094, 0x0060, /*DE pb*/ - 0x0095, 0x0060, /*DE ne*/ - 0x0096, 0x0060, /*DE nf*/ - 0x0097, 0x0060, /*DE nb*/ - 0x0098, 0x1000, /*DE max ratio*/ - 0x0099, 0x0100, /*DE min ratio*/ - 0x00b0, 0x1010, /*CS hg RY*/ - 0x00b1, 0x1010, /*CS hg GC*/ - 0x00b2, 0x1010, /*CS hg BM*/ - 0x00b3, 0x1204, /*CS weight grayTH*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x00d0, 0x01c0, /*UC y*/ - 0x00d1, 0x01ff, /*UC cs*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short browser_tone1[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x00e1, 0xaf00, /*SCR RrCr*/ - 0x00e2, 0x00b7, /*SCR RgCg*/ - 0x00e3, 0x00bc, /*SCR RbCb*/ - 0x00e4, 0x00af, /*SCR GrMr*/ - 0x00e5, 0xb700, /*SCR GgMg*/ - 0x00e6, 0x00bc, /*SCR GbMb*/ - 0x00e7, 0x00af, /*SCR BrYr*/ - 0x00e8, 0x00b7, /*SCR BgYg*/ - 0x00e9, 0xbc00, /*SCR BbYb*/ - 0x00ea, 0x00af, /*SCR KrWr*/ - 0x00eb, 0x00b7, /*SCR KgWg*/ - 0x00ec, 0x00bc, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short browser_tone2[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x00e1, 0xa000, /*SCR RrCr*/ - 0x00e2, 0x00a8, /*SCR RgCg*/ - 0x00e3, 0x00b2, /*SCR RbCb*/ - 0x00e4, 0x00a0, /*SCR GrMr*/ - 0x00e5, 0xa800, /*SCR GgMg*/ - 0x00e6, 0x00b2, /*SCR GbMb*/ - 0x00e7, 0x00a0, /*SCR BrYr*/ - 0x00e8, 0x00a8, /*SCR BgYg*/ - 0x00e9, 0xb200, /*SCR BbYb*/ - 0x00ea, 0x00a0, /*SCR KrWr*/ - 0x00eb, 0x00a8, /*SCR KgWg*/ - 0x00ec, 0x00b2, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short browser_tone3[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 de8 hdr2 fa1*/ - 0x00e1, 0x9100, /*SCR RrCr*/ - 0x00e2, 0x0099, /*SCR RgCg*/ - 0x00e3, 0x00a3, /*SCR RbCb*/ - 0x00e4, 0x0091, /*SCR GrMr*/ - 0x00e5, 0x9900, /*SCR GgMg*/ - 0x00e6, 0x00a3, /*SCR GbMb*/ - 0x00e7, 0x0091, /*SCR BrYr*/ - 0x00e8, 0x0099, /*SCR BgYg*/ - 0x00e9, 0xa300, /*SCR BbYb*/ - 0x00ea, 0x0091, /*SCR KrWr*/ - 0x00eb, 0x0099, /*SCR KgWg*/ - 0x00ec, 0x00a3, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short bypass[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0000, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0030, 0x0000, /*FA cs1 | de8 hdr2 fa1*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short negative[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x0020, /*SCR*/ - 0x00e1, 0x00ff, /*SCR RrCr*/ - 0x00e2, 0xff00, /*SCR RgCg*/ - 0x00e3, 0xff00, /*SCR RbCb*/ - 0x00e4, 0xff00, /*SCR GrMr*/ - 0x00e5, 0x00ff, /*SCR GgMg*/ - 0x00e6, 0xff00, /*SCR GbMb*/ - 0x00e7, 0xff00, /*SCR BrYr*/ - 0x00e8, 0xff00, /*SCR BgYg*/ - 0x00e9, 0x00ff, /*SCR BbYb*/ - 0x00ea, 0xff00, /*SCR KrWr*/ - 0x00eb, 0xff00, /*SCR KgWg*/ - 0x00ec, 0xff00, /*SCR KbWb*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short outdoor[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x04ac, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x00d0, 0x01c0, /*UC y*/ - 0x00d1, 0x01ff, /*UC cs*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short cold[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x00ec, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x0001, 0x0064, /*MCM 10000K*/ - 0x0009, 0xa08b, /*MCM 5cb 1cr W*/ - 0x000b, 0x7a7a, /*MCM 4cr 5cr W*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short cold_outdoor[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x04ec, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x0001, 0x0064, /*MCM 10000K*/ - 0x0009, 0xa08b, /*MCM 5cb 1cr W*/ - 0x000b, 0x7a7a, /*MCM 4cr 5cr W*/ - 0x00d0, 0x01c0, /*UC y*/ - 0x00d1, 0x01ff, /*UC cs*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short warm[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x00ec, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x0001, 0x0028, /*MCM 4000K*/ - 0x0007, 0x7878, /*MCM 1cb 2cb W*/ - 0x0009, 0xa08b, /*MCM 5cb 1cr W*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -static const unsigned short warm_outdoor[] = { - 0x0000, 0x0000, /*BANK 0*/ - 0x0008, 0x04ec, /*Dither8 UC4 ABC2 CP1 | - CC8 MCM4 SCR2 SCC1 | CS8 DE4 DNR2 HDR1*/ - 0x0000, 0x0001, /*BANK 1*/ - 0x0001, 0x0028, /*MCM 4000K*/ - 0x0007, 0x7878, /*MCM 1cb 2cb W*/ - 0x0009, 0xa08b, /*MCM 5cb 1cr W*/ - 0x00d0, 0x01c0, /*UC y*/ - 0x00d1, 0x01ff, /*UC cs*/ - 0x00ff, 0x0000, /*Mask Release*/ -}; - -const struct mdnie_tables mdnie_main_tables[] = { - { "dynamic_ui", dynamic_ui, ARRAY_SIZE(dynamic_ui) }, - { "dynamic_gallery", dynamic_gallery, ARRAY_SIZE(dynamic_gallery) }, - { "dynamic_video", dynamic_video, ARRAY_SIZE(dynamic_video) }, - { "dynamic_vtcall", dynamic_vtcall, ARRAY_SIZE(dynamic_vtcall) }, - { "standard_ui", standard_ui, ARRAY_SIZE(standard_ui) }, - { "standard_gallery", standard_gallery, ARRAY_SIZE(standard_gallery) }, - { "standard_video", standard_video, ARRAY_SIZE(standard_video) }, - { "standard_vtcall", standard_vtcall, ARRAY_SIZE(standard_vtcall) }, - { "natural_ui", natural_ui, ARRAY_SIZE(natural_ui) }, - { "natural_gallery", natural_gallery, ARRAY_SIZE(natural_gallery) }, - { "natural_video", natural_video, ARRAY_SIZE(natural_video) }, - { "natural_vtcall", natural_vtcall, ARRAY_SIZE(natural_vtcall) }, - { "movie_ui", movie_ui, ARRAY_SIZE(movie_ui) }, - { "movie_gallery", movie_gallery, ARRAY_SIZE(movie_gallery) }, - { "movie_video", movie_video, ARRAY_SIZE(movie_video) }, - { "movie_vtcall", movie_vtcall, ARRAY_SIZE(movie_vtcall) }, - { "camera", camera, ARRAY_SIZE(camera) }, - { "camera_outdoor", camera_outdoor, ARRAY_SIZE(camera_outdoor) }, - { "browser_tone1", browser_tone1, ARRAY_SIZE(browser_tone1) }, - { "browser_tone2", browser_tone2, ARRAY_SIZE(browser_tone2) }, - { "browser_tone3", browser_tone3, ARRAY_SIZE(browser_tone3) }, - { "negative", negative, ARRAY_SIZE(negative) }, - { "bypass", bypass, ARRAY_SIZE(bypass) }, - { "outdoor", outdoor, ARRAY_SIZE(outdoor) }, - { "warm", warm, ARRAY_SIZE(warm) }, - { "warm_outdoor", warm_outdoor, ARRAY_SIZE(warm_outdoor) }, - { "cold", cold, ARRAY_SIZE(cold) }, - { "cold_outdoor", cold_outdoor, ARRAY_SIZE(cold_outdoor) }, -}; - diff --git a/drivers/video/samsung_duallcd/extension/mdnie.c b/drivers/video/samsung_duallcd/extension/mdnie.c deleted file mode 100644 index e2ad4cc..0000000 --- a/drivers/video/samsung_duallcd/extension/mdnie.c +++ /dev/null @@ -1,729 +0,0 @@ -/* /linux/driver/video/samsung/mdnie.c - * - * Samsung SoC mDNIe driver. - * - * Copyright (c) 2011 Samsung Electronics. - * Author: InKi Dae <inki.dae@samsung.com> - * Eunchul Kim <chulspro.kim@samsung.com> - * - * 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. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/err.h> -#include <linux/io.h> -#include <linux/slab.h> -#include <linux/platform_device.h> -#include <linux/firmware.h> - -#include <plat/fimd_lite_ext.h> -#include <mach/map.h> - -#include "regs-mdnie.h" -#include "mdnie.h" -#include "s5p_fimd_ext.h" -#include "cmc623.h" - -/* FIXME:!! need to change chip id dynamically */ -#define MDNIE_CHIP_ID "cmc623p" - -static const char *mode_name[MODE_MAX] = { - "dynamic", - "standard", - "natural", - "movie" -}; - -static const char *scenario_name[SCENARIO_MAX] = { - "ui", - "gallery", - "video", - "vtcall", - "camera", - "browser", - "negative", - "bypass" -}; - -static const char *tone_name[TONE_MAX] = { - "", - "warm", - "cold", -}; - -static const char *tone_browser_name[TONE_BR_MAX] = { - "tone1", - "tone2", - "tone3" -}; - -static const char *outdoor_name[OUTDOOR_MAX] = { - "", - "outdoor" -}; - -#if defined(DEBUG) -#define mdnie_info(fmt, args...) \ - do { \ - printk(KERN_NOTICE"%s:"fmt"\n", __func__, ##args); \ - } while (0); -#else -#define mdnie_info(fmt, args...) -#endif - -static struct mdnie_platform_data - *to_mdnie_platform_data(struct s5p_fimd_ext_device *fx_dev) -{ - return fx_dev->dev.platform_data ? - (struct mdnie_platform_data *)fx_dev->dev.platform_data : NULL; -} - -static void mdnie_write_tune(struct s5p_mdnie *mdnie, - const unsigned short *tune, - unsigned int size) -{ - unsigned int i = 0; - - mdnie_info("size[%d]", size); - while (i < size) { - writel(tune[i + 1], mdnie->regs + tune[i] * 4); - i += 2; - } -} - -static int mdnie_request_fw(struct s5p_mdnie *mdnie, const char *name) -{ - const struct firmware *fw; - char fw_path[MDNIE_MAX_STR+1]; - int ret; - - snprintf(fw_path, MDNIE_MAX_STR, MDNIE_FW_PATH, MDNIE_CHIP_ID, name); - mdnie_info("fw_path[%s]", fw_path); - mutex_lock(&mdnie->lock); - - ret = request_firmware(&fw, fw_path, mdnie->dev); - if (ret) { - dev_err(mdnie->dev, "failed to request firmware.\n"); - mutex_unlock(&mdnie->lock); - return ret; - } - - mdnie_write_tune(mdnie, (const unsigned short *)fw->data, - fw->size / sizeof(const unsigned short)); - release_firmware(fw); - - mutex_unlock(&mdnie->lock); - - return 0; -} - -static int mdnie_request_tables(struct s5p_mdnie *mdnie, const char *name) -{ - struct mdnie_tables *tables; - int i; - - mdnie_info("name[%s]", name); - tables = (struct mdnie_tables *)&mdnie_main_tables; - if (!tables) { - dev_err(mdnie->dev, "mode mdnie tables is NULL.\n"); - return -EINVAL; - } - - for (i = 0; i < ARRAY_SIZE(mdnie_main_tables); i++) { - if (strcmp(name , tables[i].name) == 0) { - mdnie_info("tune_id[%d]name[%s]", i, tables[i].name); - mdnie_write_tune(mdnie, tables[i].value, - tables[i].size); - break; - } - } - - return 0; -} - -static int mdnie_get_name(struct s5p_mdnie *mdnie, char *name, - enum mdnie_set set) -{ - enum mdnie_mode mode = mdnie->mode; - enum mdnie_scenario scenario = mdnie->scenario; - int tone = mdnie->tone; - enum mdnie_outdoor outdoor = mdnie->outdoor; - - mdnie_info("set[%d]:mode[%d]scenario[%d]tone[%d]outdoor[%d]", - set, mode, scenario, tone, outdoor); - switch (scenario) { - case SCENARIO_CAMERA: - strcat(name, scenario_name[scenario]); - if (outdoor == OUTDOOR_ON) { - strcat(name, "_"); - strcat(name , outdoor_name[outdoor]); - } - break; - case SCENARIO_BROWSER: - strcat(name, scenario_name[scenario]); - strcat(name, "_"); - strcat(name, tone_browser_name[tone]); - break; - default: - if (set == SET_MAIN || - (tone == TONE_NORMAL && outdoor == OUTDOOR_OFF)) { - if (scenario < SCENARIO_MODE_MAX) { - if (mode < MODE_MAX) - strcat(name, mode_name[mode]); - - strcat(name, "_"); - - if (scenario < SCENARIO_MODE_MAX) - strcat(name, - scenario_name[scenario]); - } else - strcat(name, scenario_name[scenario]); - } else { - if (tone < TONE_MAX) - strcat(name, tone_name[tone]); - - if (tone != TONE_NORMAL && outdoor == OUTDOOR_ON) - strcat(name, "_"); - - if (outdoor < OUTDOOR_MAX) - strcat(name , outdoor_name[outdoor]); - } - break; - } - - return strlen(name); -} - -static int mdnie_set_commit(struct s5p_mdnie *mdnie, - enum mdnie_set set) -{ - struct mdnie_manager_ops *mops = mdnie->mops; - char name[MDNIE_MAX_STR+1]; - int ret = 0, len = 0; - - memset(name, 0, MDNIE_MAX_STR+1); - len = mdnie_get_name(mdnie, name, set); - if (len == 0) { - dev_err(mdnie->dev, "failed to find tune.\n"); - return ret; - } - - if (mops && mops->tune) { - ret = mops->tune(mdnie, name); - if (ret) { - dev_err(mdnie->dev, "failed to set tune.\n"); - return ret; - } - } else { - dev_err(mdnie->dev, "invalid mdnie mops.\n"); - return -EINVAL; - } - - return ret; -} - -static int mdnie_check_tone(struct s5p_mdnie *mdnie, int tone) -{ - unsigned long max_tone; - - if (mdnie->scenario == SCENARIO_BROWSER) - max_tone = TONE_BR_MAX; - else - max_tone = TONE_MAX; - - if (tone >= max_tone) { - dev_err(mdnie->dev, "invalid mdnie tone.\n"); - return -EINVAL; - } - - if (mdnie->scenario != SCENARIO_VIDEO - && mdnie->scenario != SCENARIO_BROWSER) { - /* Set to default */ - mdnie->tone = 0; - dev_err(mdnie->dev, "invalid mdnie scenario.\n"); - return -EIO; - } - - return 0; -} - -struct mdnie_manager_ops mdnie_set_mops = { - .tune = mdnie_request_tables, - .commit = mdnie_set_commit, - .check_tone = mdnie_check_tone, -}; - -static void mdnie_set_size(struct s5p_mdnie *mdnie, - unsigned int width, unsigned int height) -{ - unsigned int size; - - writel(0x0, mdnie->regs + MDNIE_R0); - - /* Input Data Unmask */ - writel(0x077, mdnie->regs + MDNIE_R1); - - /* LCD width */ - size = readl(mdnie->regs + MDNIE_R3); - size &= ~MDNIE_R34_WIDTH_MASK; - size |= width; - writel(size, mdnie->regs + MDNIE_R3); - - /* LCD height */ - size = readl(mdnie->regs + MDNIE_R4); - size &= ~MDNIE_R35_HEIGHT_MASK; - size |= height; - writel(size, mdnie->regs + MDNIE_R4); - - /* unmask all */ - writel(0, mdnie->regs + MDNIE_R28); -} - -static void mdnie_init_hardware(struct s5p_mdnie *mdnie) -{ - struct mdnie_platform_data *pdata = NULL; - - pdata = mdnie->pdata; - - /* set display size. */ - mdnie_set_size(mdnie, pdata->width, pdata->height); -} - -static int mdnie_setup(struct s5p_fimd_ext_device *fx_dev, unsigned int enable) -{ - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - struct mdnie_manager_ops *mops = mdnie->mops; - int ret = 0; - - mdnie_info("enable[%d]", enable); - if (enable) { - int i; - mdnie_init_hardware(mdnie); - if (mops && mops->commit) { - for (i = 0; i < SET_MAX; i++) { - ret = mops->commit(mdnie, i); - if (ret) { - dev_err(mdnie->dev, "invalid mdnie set.\n"); - goto error; - } - } - } else { - dev_err(mdnie->dev, "invalid mdnie mops.\n"); - goto error; - } - } - - return 0; - -error: - return ret; -} - -static ssize_t store_mdnie_mode(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - struct mdnie_manager_ops *mops = mdnie->mops; - unsigned long prev_mode; - unsigned long mode; - int ret; - - ret = kstrtoul(buf, 0, &mode); - if (ret) { - dev_err(&fx_dev->dev, "invalid mode value.\n"); - return -EINVAL; - } - - if (mode >= MODE_MAX) { - dev_err(&fx_dev->dev, "invalid mdnie mode.\n"); - return -EINVAL; - } - - if (mdnie->scenario >= SCENARIO_MODE_MAX) { - dev_err(&fx_dev->dev, "invalid mdnie scenario.\n"); - mdnie->scenario = SCENARIO_UI; - } - - prev_mode = mdnie->mode; - mdnie->mode = mode; - mdnie_info("mode[%d]", mdnie->mode); - if (mops && mops->commit) { - ret = mops->commit(mdnie, SET_MAIN); - if (ret) { - dev_err(&fx_dev->dev, "failed to set mode.\n"); - goto error_restore; - } - } else { - dev_err(&fx_dev->dev, "invalid mdnie mops.\n"); - ret = -EINVAL; - goto error_restore; - } - - return count; - -error_restore: - mdnie->mode = prev_mode; - return ret; -} - -static ssize_t show_mdnie_mode(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - - mdnie_info("mode[%d]", mdnie->mode); - return snprintf(buf, PAGE_SIZE, "%d\n", mdnie->mode); -} - -static ssize_t store_mdnie_scenario(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - struct mdnie_manager_ops *mops = mdnie->mops; - unsigned long prev_scenario; - unsigned long scenario; - int ret; - - ret = kstrtoul(buf, 0, &scenario); - if (ret) { - dev_err(&fx_dev->dev, "invalid scenario value.\n"); - return -EINVAL; - } - - if (scenario >= SCENARIO_MAX) { - dev_err(&fx_dev->dev, "invalid mdnie scenario.\n"); - return -EINVAL; - } - - prev_scenario = mdnie->scenario; - mdnie->scenario = scenario; - mdnie_info("scenario[%d]", mdnie->scenario); - if (mops && mops->commit) { - ret = mops->commit(mdnie, SET_MAIN); - if (ret) { - dev_err(&fx_dev->dev, "failed to set scenario.\n"); - goto error_restore; - } - } else { - dev_err(&fx_dev->dev, "invalid mdnie mops.\n"); - ret = -EINVAL; - goto error_restore; - } - - return count; - -error_restore: - mdnie->scenario = prev_scenario; - return ret; -} - -static ssize_t show_mdnie_scenario(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - - mdnie_info("scenario[%d]", mdnie->scenario); - return snprintf(buf, PAGE_SIZE, "%d\n", mdnie->scenario); -} - -static ssize_t store_mdnie_tone(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - struct mdnie_manager_ops *mops = mdnie->mops; - unsigned long prev_tone; - unsigned long tone; - int ret; - - ret = kstrtoul(buf, 0, &tone); - if (ret) { - dev_err(&fx_dev->dev, "invalid tone value.\n"); - return -EINVAL; - } - - if (mops && mops->check_tone) { - ret = mops->check_tone(mdnie, tone); - if (ret) { - dev_err(&fx_dev->dev, "failed to set tone.\n"); - return ret; - } - } else { - dev_err(&fx_dev->dev, "invalid mdnie mops.\n"); - ret = -EINVAL; - goto error_mops; - } - - prev_tone = mdnie->tone; - mdnie->tone = tone; - mdnie_info("tone[%d]", mdnie->tone); - if (mops && mops->commit) { - ret = mops->commit(mdnie, SET_OPTIONAL); - if (ret) { - dev_err(&fx_dev->dev, "failed to set tone.\n"); - goto error_restore; - } - } else { - dev_err(&fx_dev->dev, "invalid mdnie mops.\n"); - ret = -EINVAL; - goto error_restore; - } - - return count; - -error_restore: - mdnie->tone = prev_tone; -error_mops: - return ret; -} - -static ssize_t show_mdnie_tone(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - - mdnie_info("tone[%d]", mdnie->tone); - return snprintf(buf, PAGE_SIZE, "%d\n", mdnie->tone); -} - -static ssize_t store_mdnie_outdoor(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - struct mdnie_manager_ops *mops = mdnie->mops; - unsigned long prev_outdoor; - unsigned long outdoor; - int ret; - - ret = kstrtoul(buf, 0, &outdoor); - if (ret) { - dev_err(&fx_dev->dev, "invalid outdoor value.\n"); - return -EINVAL; - } - - if (outdoor >= OUTDOOR_MAX) { - dev_err(&fx_dev->dev, "invalid mdnie outdoor.\n"); - return -EINVAL; - } - - if (mdnie->scenario != SCENARIO_VIDEO - && mdnie->scenario != SCENARIO_CAMERA) { - /* Set to default */ - mdnie->outdoor = OUTDOOR_OFF; - dev_err(&fx_dev->dev, "invalid mdnie scenario.\n"); - return -EIO; - } - - prev_outdoor = mdnie->outdoor; - mdnie->outdoor = outdoor; - mdnie_info("outdoor[%d]", mdnie->outdoor); - if (mops && mops->commit) { - ret = mops->commit(mdnie, SET_OPTIONAL); - if (ret) { - dev_err(&fx_dev->dev, "failed to set outdoor.\n"); - goto error_restore; - } - } else { - dev_err(&fx_dev->dev, "invalid mdnie mops.\n"); - ret = -EINVAL; - goto error_restore; - } - - return count; - -error_restore: - mdnie->outdoor = prev_outdoor; - return ret; -} - -static ssize_t show_mdnie_outdoor(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - - mdnie_info("outdoor[%d]", mdnie->outdoor); - return snprintf(buf, PAGE_SIZE, "%d\n", mdnie->outdoor); -} - -static ssize_t store_mdnie_tune(struct device *dev, - struct device_attribute *attr, - const char *buf, size_t count) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - struct mdnie_manager_ops *mops = mdnie->mops; - unsigned long prev_tune; - unsigned long tune; - int ret; - - ret = kstrtoul(buf, 0, &tune); - if (ret) { - dev_err(&fx_dev->dev, "invalid tune value.\n"); - return -EINVAL; - } - - if (tune >= TUNE_MAX) { - dev_err(&fx_dev->dev, "invalid mdnie tune.\n"); - return -EINVAL; - } - - prev_tune = mdnie->tune; - mdnie->tune = tune; - mdnie_info("tune[%d]", mdnie->tune); - if (mops) { - if (mdnie->tune == TUNE_FW) - mops->tune = mdnie_request_fw; - else - mops->tune = mdnie_request_tables; - } else { - dev_err(&fx_dev->dev, "invalid mdnie mops.\n"); - ret = -EINVAL; - goto error_restore; - } - - return count; - -error_restore: - mdnie->tune = prev_tune; - return ret; -} - -static ssize_t show_mdnie_tune(struct device *dev, - struct device_attribute *attr, - char *buf) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - struct s5p_mdnie *mdnie = fimd_ext_get_drvdata(fx_dev); - - mdnie_info("tune[%d]", mdnie->tune); - return snprintf(buf, PAGE_SIZE, "%d\n", mdnie->tune); -} - -/* sys/devices/platform/mdnie */ -static struct device_attribute mdnie_device_attrs[] = { - __ATTR(mode, S_IRUGO|S_IWUSR, show_mdnie_mode, - store_mdnie_mode), - __ATTR(scenario, S_IRUGO|S_IWUSR, show_mdnie_scenario, - store_mdnie_scenario), - __ATTR(tone, S_IRUGO|S_IWUSR, show_mdnie_tone, - store_mdnie_tone), - __ATTR(outdoor, S_IRUGO|S_IWUSR, show_mdnie_outdoor, - store_mdnie_outdoor), - __ATTR(tune, S_IRUGO|S_IWUSR, show_mdnie_tune, - store_mdnie_tune), -}; - -static int mdnie_probe(struct s5p_fimd_ext_device *fx_dev) -{ - struct resource *res; - struct s5p_mdnie *mdnie; - int ret = -EINVAL; - int i; - - mdnie = kzalloc(sizeof(struct s5p_mdnie), GFP_KERNEL); - if (!mdnie) { - dev_err(&fx_dev->dev, "failed to alloc mdnie object.\n"); - return -EFAULT; - } - - mdnie->dev = &fx_dev->dev; - - mdnie->pdata = to_mdnie_platform_data(fx_dev); - if (mdnie->pdata == NULL) { - dev_err(&fx_dev->dev, "platform_data is NULL.\n"); - return -EFAULT; - } - - res = s5p_fimd_ext_get_resource(fx_dev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&fx_dev->dev, "failed to get io memory region.\n"); - return -EINVAL; - } - - mdnie->regs = ioremap(res->start, resource_size(res)); - if (!mdnie->regs) { - dev_err(&fx_dev->dev, "failed to remap io region.\n'"); - return -EFAULT; - } - - mdnie->mode = MODE_STANDARD; - mdnie->scenario = SCENARIO_UI; - mdnie->tone = TONE_NORMAL; - mdnie->outdoor = OUTDOOR_OFF; - mdnie->tune = TUNE_TBL; - mdnie->mops = &mdnie_set_mops; - - mutex_init(&mdnie->lock); - - fimd_ext_set_drvdata(fx_dev, mdnie); - - for (i = 0; i < ARRAY_SIZE(mdnie_device_attrs); i++) { - ret = device_create_file(&fx_dev->dev, - &mdnie_device_attrs[i]); - if (ret) - break; - } - - if (ret < 0) - dev_err(&fx_dev->dev, "failed to add sysfs entries\n"); - - dev_info(&fx_dev->dev, "mDNIe driver has been probed.\n"); - - return 0; -} - -static struct s5p_fimd_ext_driver fimd_ext_driver = { - .driver = { - .name = "mdnie", - .owner = THIS_MODULE, - }, - .probe = mdnie_probe, - .setup = mdnie_setup, -}; - -static int __init mdnie_init(void) -{ - return s5p_fimd_ext_driver_register(&fimd_ext_driver); -} - -static void __exit mdnie_exit(void) -{ -} - -arch_initcall(mdnie_init); -module_exit(mdnie_exit); - -MODULE_AUTHOR("InKi Dae <inki.dae@samsung.com>"); -MODULE_AUTHOR("Eunchul Kim <chulspro.kim@samsung.com>"); -MODULE_DESCRIPTION("mDNIe Driver"); -MODULE_LICENSE("GPL"); - diff --git a/drivers/video/samsung_duallcd/extension/mdnie.h b/drivers/video/samsung_duallcd/extension/mdnie.h deleted file mode 100644 index 145efc1..0000000 --- a/drivers/video/samsung_duallcd/extension/mdnie.h +++ /dev/null @@ -1,134 +0,0 @@ -/* linux/arch/arm/plat-s5p/mdnie.h - * - * mDNIe Platform Specific Header Definitions. - * - * Copyright (c) 2011 Samsung Electronics - * InKi Dae <inki.dae@samsung.com> - * Eunchul Kim <chulspro.kim@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef _MDNIE_H_ -#define _MDNIE_H_ - -#define MDNIE_MAX_STR 255 -#define MDNIE_FW_PATH "mdnie/%s/%s.bin" - -/* set - main, optional */ -enum mdnie_set { - SET_MAIN = 0, - SET_OPTIONAL, - SET_MAX -}; - -/* mode - dynamic, standard, natural, movie */ -enum mdnie_mode { - MODE_DYNAMIC = 0, - MODE_STANDARD, - MODE_NATURAL, - MODE_MOVIE, - MODE_MAX -}; - -/* scenario - ui, gallery, video, vtcall, camera, browser, negative, bypass */ -enum mdnie_scenario { - SCENARIO_UI = 0, - SCENARIO_GALLERY, - SCENARIO_VIDEO, - SCENARIO_VTCALL, - SCENARIO_MODE_MAX, - SCENARIO_CAMERA = SCENARIO_MODE_MAX, - SCENARIO_BROWSER, - SCENARIO_NEGATIVE, - SCENARIO_BYPASS, - SCENARIO_MAX -}; - -/* tone - normal, warm, cold */ -enum mdnie_tone { - TONE_NORMAL = 0, - TONE_WARM, - TONE_COLD, - TONE_MAX -}; - -/* tone browser - tone1, tone2, tone3 */ -enum mdnie_tone_br { - TONE_1 = 0, - TONE_2, - TONE_3, - TONE_BR_MAX -}; - -/* outdoor - off, on */ -enum mdnie_outdoor { - OUTDOOR_OFF = 0, - OUTDOOR_ON, - OUTDOOR_MAX -}; - -/* tune - tables, fw */ -enum mdnie_tune { - TUNE_TBL = 0, - TUNE_FW, - TUNE_MAX -}; - -/* - * A main structure for mDNIe. - * - * @dev: pointer to device object for sysfs - * @regs: memory mapped register map - * @mode: mdnie mode value - * @scenario: mdnie scenario value - * @tone: mdnie tone value - * @outdoor: mdnie outdoor value - * @lock: lock for request firmware waiting - * @pdata: platform data of width, height - * @mops: manager ops - */ -struct s5p_mdnie { - struct device *dev; - void __iomem *regs; - - enum mdnie_mode mode; - enum mdnie_scenario scenario; - int tone; - enum mdnie_outdoor outdoor; - enum mdnie_tune tune; - - struct mutex lock; - struct mdnie_platform_data *pdata; - struct mdnie_manager_ops *mops; -}; - -/** - * A structure for data tables. - * - * @name: table name - * @value: table value - * @size: table size - */ -struct mdnie_tables { - const char *name; - const unsigned short *value; - unsigned int size; -}; - -/* - * mDNIe manager ops. - * - * @tune: api of tune settings - * @commit: api of main,optional settings - * @check_tone: api of check tone - */ -struct mdnie_manager_ops { - int (*tune)(struct s5p_mdnie *mdnie, const char *name); - int (*commit)(struct s5p_mdnie *mdnie, enum mdnie_set set); - int (*check_tone)(struct s5p_mdnie *mdnie, int tone); -}; - -#endif /* _MDNIE_H_ */ diff --git a/drivers/video/samsung_duallcd/extension/regs-mdnie.h b/drivers/video/samsung_duallcd/extension/regs-mdnie.h deleted file mode 100644 index a0ec8d7..0000000 --- a/drivers/video/samsung_duallcd/extension/regs-mdnie.h +++ /dev/null @@ -1,166 +0,0 @@ -/* linux/arch/arm/plat-s5p/include/plat/regs-mdnie.h - * - * Header file for Samsung SoC mDNIe device. - * - * Copyright (c) 2010 Samsung Electronics - * - * Author : Inki Dae <inki.dae@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef _REGS_MDNIE_H -#define _REGS_MDNIE_H - -#define MDNIE_R0 0x0000 -#define MDNIE_R1 0x0004 -#define MDNIE_R2 0x0008 -#define MDNIE_R3 0x000C -#define MDNIE_R4 0x0010 -#define MDNIE_R5 0x0014 -#define MDNIE_R28 0x00A0 - -/* R1 */ -#define MDNIE_R1_MCM_BYPASS_MODE (1 << 2) -#define MDNIE_R1_ALG_DNR_HDTR_MASK (0x3 << 0) -#define MDNIE_R1_ALG_DNR_HDTR(x) (((x) & 0x3) << 0) -#define MDNIE_R1_ROI_PCA_OVE (1 << 10) -#define MDNIE_R1_ROI_HDTR (1 << 9) -#define MDNIE_R1_ROI_DNR (1 << 8) -#define MDNIE_R1_ROI_OUTSIDE (1 << 7) -#define MDNIE_R1_ABC_SEL_MASK (0x3 << 4) -#define MDNIE_R1_ABC_SEL(x) (((x) & 0x3) << 4) - -/* R2 */ -#define MDNIE_R2_H_START_MASK (0x7ff << 0) -#define MDNIE_R2_H_START(x) (((x) & 0x7ff) << 0) - -/* R3 */ -#define MDNIE_R3_WIDTH_MASK (0x7ff << 0) - -/* R4 */ -#define MDNIE_R4_HEIGHT_MASK (0x7ff << 0) - -/* R5 */ -#define MDNIE_R5_V_END_MASK (0x7ff << 0) -#define MDNIE_R5_V_END(x) (((x) & 0x7ff) << 0) - -/* R6 */ -#define MDNIE_R6_DITHER_ENABLE (1 << 4) - -/* R34 */ -#define MDNIE_R34_WIDTH_MASK (0x7ff << 0) -#define MDNIE_R34_WIDTH(x) (((x) & 0x7ff) << 0) - -/* R35 */ -#define MDNIE_R35_HEIGHT_MASK (0x7ff << 0) -#define MDNIE_R35_HEIGHT(x) (((x) & 0x7ff) << 0) - -/* R44 */ -#define MDNIE_R44_DNR_BYPASS_MODE (1 << 14) - -/* R58 */ -#define MDNIE_R58_HDTR_BYPASS_MODE (0x1f << 0) - -/* R73 */ -#define MDNIE_R73_SN_LVL_MASK (0x3 << 10) -#define MDNIE_R73_SN_LVL(x) (((x) & 0x3) << 10) -#define MDNIE_R73_SY_LVL_MASK (0x3 << 8) -#define MDNIE_R73_SY_LVL(x) (((x) & 0x3) << 8) -#define MDNIE_R73_GR_LVL_MASK (0x3 << 6) -#define MDNIE_R73_GR_LVL(x) (((x) & 0x3) << 6) -#define MDNIE_R73_RD_LVL_MASK (0x3 << 4) -#define MDNIE_R73_RD_LVL(x) (((x) & 0x3) << 4) -#define MDNIE_R73_YE_LVL_MASK (0x3 << 2) -#define MDNIE_R73_YE_LVL(x) (((x) & 0x3) << 2) -#define MDNIE_R73_PU_LVL_MASK (0x3 << 0) -#define MDNIE_R73_PU_LVL(x) (((x) & 0x3) << 0) - -/* R82 */ -#define MDNIE_R82_SN_CC_OFF (1 << 5) -#define MDNIE_R82_SY_CC_OFF (1 << 4) -#define MDNIE_R82_GR_CC_OFF (1 << 3) -#define MDNIE_R82_RD_CC_OFF (1 << 2) -#define MDNIE_R82_YE_CC_OFF (1 << 1) -#define MDNIE_R82_PU_CC_OFF (1 << 0) - -/* R84 */ -#define MDNIE_R84_LIGHT_P_MASK (0xff << 8) -#define MDNIE_R84_LIGHT_P(x) (((x) & 0xff) << 8) -#define MDNIE_R84_CHROMA_P_MASK (0xff << 0) -#define MDNIE_R84_CHROMA_P(x) (((x) & 0xff) << 0) - -/* R91 */ -#define MDNIE_R91_QUADRANT_ON (1 << 8) -#define MDNIE_R91_COLOR_TEMP_DEST_MASK (0xff << 0) -#define MDNIE_R91_COLOR_TEMP_DEST(x) (((x) & 0xff) << 0) - -/* R106 */ -#define MDNIE_R106_QUADRANT_TMP1_MASK (0xff << 8) -#define MDNIE_R106_QUADRANT_TMP1(x) (((x) & 0xff) << 8) -#define MDNIE_R106_QUADRANT_TMP2_MASK (0xff << 0) -#define MDNIE_R106_QUADRANT_TMP2(x) (((x) & 0xff) << 0) - -/* R107 */ -#define MDNIE_R107_QUADRANT_TMP3_MASK (0xff << 8) -#define MDNIE_R107_QUADRANT_TMP3(x) (((x) & 0xff) << 8) -#define MDNIE_R107_QUADRANT_TMP4_MASK (0xff << 0) -#define MDNIE_R107_QUADRANT_TMP4(x) (((x) & 0xff) << 0) - -/* R124 */ -#define MDNIE_R124_CABC_BLU_ENABLE (1 << 1) -#define MDNIE_R124_DISPLAY_SEL_OLED (1 << 0) - -/* R125 */ -#define MDNIE_R125_ALS_FLAG_UPDATED (1 << 0) - -/* R126 */ -#define MDNIE_R126_ALS_DATA_MASK (0xffff << 0) -#define MDNIE_R126_ALS_DATA(x) (((x) & 0xffff) << 0) - -/* R127 */ -#define MDNIE_R127_WIN_SIZE_MASK (0xf << 4) -#define MDNIE_R127_WIN_SIZE(x) (((x) & 0xf) << 4) -#define MDNIE_R127_ALS_MODE_MASK (0x3 << 0) -#define MDNIE_R127_ALS_MODE(x) (((x) & 0x3) << 0) - -/* R130 */ -#define MDNIE_R130_AMB_LVL_MASK (0x4 << 0) -#define MDNIE_R130_AMB_LVL(x) (((x) & 0x4) << 0) - -/* R179 */ -#define MDNIE_R179_UP_SL_MASK (0xff << 8) -#define MDNIE_R179_UP_SL(x) (((x) & 0xff) << 8) -#define MDNIE_R179_DOWN_SL_MASK (0xff << 0) -#define MDNIE_R179_DOWN_SL(x) (((x) & 0xff) << 0) - -/* R180 */ -#define MDNIE_R180_PWM_CE_PWM_COEFF (1 << 15) -#define MDNIE_R180_POLARITY_HIGH_ACTIVE (1 << 14) -#define MDNIE_R180_LABC_MODE_MASK (0x3 << 12) -#define MDNIE_R180_LABC_MODE(x) (((x) & 0x3) << 12) -#define MDNIE_R180_ALC_EN (1 << 11) -#define MDNIE_R180_PWM_COEFF_COUNT_MASK (0x7ff << 0) -#define MDNIE_R180_PWM_COEFF_COUNT(x) (((x) & 0x7ff) << 0) - -/* R238 */ -#define MDNIE_R238_ROI_DITHER (1 << 15) -#define MDNIE_R238_ROI_OUTSIDE (1 << 14) -#define MDNIE_R238_H_START_MASK (0x7ff << 0) -#define MDNIE_R238_H_START(x) (((x) & 0x7ff) << 0) - -/* R239 */ -#define MDNIE_R239_H_END_MASK (0x7ff << 0) -#define MDNIE_R239_H_END(x) (((x) & 0x7ff) << 0) - -/* R240 */ -#define MDNIE_R240_V_START_MASK (0x7ff << 0) -#define MDNIE_R240_V_START(x) (((x) & 0x7ff) << 0) - -/* R241 */ -#define MDNIE_R241_V_END_MASK (0x7ff << 0) -#define MDNIE_R241_V_END(x) (((x) & 0x7ff) << 0) - -#endif diff --git a/drivers/video/samsung_duallcd/extension/regs_fimd_lite.h b/drivers/video/samsung_duallcd/extension/regs_fimd_lite.h deleted file mode 100644 index fda0d2a..0000000 --- a/drivers/video/samsung_duallcd/extension/regs_fimd_lite.h +++ /dev/null @@ -1,396 +0,0 @@ -/* linux/asm/arch/regs-ielcd.h - * - * Register definition file for Samsung Display Controller (FIMD-lite) driver - * - * InKi Dae, <inki.dae@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef _REGS_IELCD_H -#define _REGS_IELCD_H - -#define S5P_LCDREG(x) (x) -#define S5P_WINCON(x) S5P_LCDREG(0x0020 + (x * 0x04)) -#define S5P_VIDOSD_A(x) S5P_LCDREG(0x0040 + (x * 0x10)) -#define S5P_VIDOSD_B(x) S5P_LCDREG(0x0044 + (x * 0x10)) -#define S5P_VIDOSD_C(x) S5P_LCDREG(0x0048 + (x * 0x10)) -#define S5P_VIDOSD_D(x) S5P_LCDREG(0x004C + (x * 0x10)) -#define S5P_VIDADDR_START0(x) S5P_LCDREG(0x00A0 + (x * 0x08)) -#define S5P_VIDADDR_START1(x) S5P_LCDREG(0x00A4 + (x * 0x08)) -#define S5P_VIDADDR_END0(x) S5P_LCDREG(0x00D0 + (x * 0x08)) -#define S5P_VIDADDR_END1(x) S5P_LCDREG(0x00D4 + (x * 0x08)) -#define S5P_VIDADDR_SIZE(x) S5P_LCDREG(0x0100 + (x * 0x04)) -#define S5P_KEYCON(x) S5P_LCDREG(0x0140 + ((x - 1) * 0x08)) -#define S5P_KEYVAL(x) S5P_LCDREG(0x0144 + ((x - 1) * 0x08)) - -/* - * Register Map -*/ -#define S5P_VIDCON0 S5P_LCDREG(0x0000) -#define S5P_VIDCON1 S5P_LCDREG(0x0004) -#define S5P_VIDCON2 S5P_LCDREG(0x0008) -#define S5P_PRTCON S5P_LCDREG(0x000C) - -#define S5P_VIDTCON0 S5P_LCDREG(0x0010) -#define S5P_VIDTCON1 S5P_LCDREG(0x0014) -#define S5P_VIDTCON2 S5P_LCDREG(0x0018) -#define S5P_VIDTCON3 S5P_LCDREG(0x001C) - -#define S5P_WINCON0 S5P_LCDREG(0x0020) -#define S5P_WINCON1 S5P_LCDREG(0x0024) -#define S5P_WINCON2 S5P_LCDREG(0x0028) -#define S5P_WINCON3 S5P_LCDREG(0x002C) -#define S5P_WINCON4 S5P_LCDREG(0x0030) - -#define S5P_VIDOSD0A S5P_LCDREG(0x0040) -#define S5P_VIDOSD0B S5P_LCDREG(0x0044) -#define S5P_VIDOSD0C S5P_LCDREG(0x0048) - -#define S5P_VIDOSD1A S5P_LCDREG(0x0050) -#define S5P_VIDOSD1B S5P_LCDREG(0x0054) -#define S5P_VIDOSD1C S5P_LCDREG(0x0058) -#define S5P_VIDOSD1D S5P_LCDREG(0x005C) - -#define S5P_VIDOSD2A S5P_LCDREG(0x0060) -#define S5P_VIDOSD2B S5P_LCDREG(0x0064) -#define S5P_VIDOSD2C S5P_LCDREG(0x0068) -#define S5P_VIDOSD2D S5P_LCDREG(0x006C) - -#define S5P_VIDOSD3A S5P_LCDREG(0x0070) -#define S5P_VIDOSD3B S5P_LCDREG(0x0074) -#define S5P_VIDOSD3C S5P_LCDREG(0x0078) - -#define S5P_VIDOSD4A S5P_LCDREG(0x0080) -#define S5P_VIDOSD4B S5P_LCDREG(0x0084) -#define S5P_VIDOSD4C S5P_LCDREG(0x0088) - -#define S5P_VIDW00ADD0B0 S5P_LCDREG(0x00A0) -#define S5P_VIDW00ADD0B1 S5P_LCDREG(0x00A4) -#define S5P_VIDW01ADD0B0 S5P_LCDREG(0x00A8) -#define S5P_VIDW01ADD0B1 S5P_LCDREG(0x00AC) -#define S5P_VIDW02ADD0 S5P_LCDREG(0x00B0) -#define S5P_VIDW03ADD0 S5P_LCDREG(0x00B8) -#define S5P_VIDW04ADD0 S5P_LCDREG(0x00C0) -#define S5P_VIDW00ADD1B0 S5P_LCDREG(0x00D0) -#define S5P_VIDW00ADD1B1 S5P_LCDREG(0x00D4) -#define S5P_VIDW01ADD1B0 S5P_LCDREG(0x00D8) -#define S5P_VIDW01ADD1B1 S5P_LCDREG(0x00DC) -#define S5P_VIDW02ADD1 S5P_LCDREG(0x00E0) -#define S5P_VIDW03ADD1 S5P_LCDREG(0x00E8) -#define S5P_VIDW04ADD1 S5P_LCDREG(0x00F0) -#define S5P_VIDW00ADD2 S5P_LCDREG(0x0100) -#define S5P_VIDW01ADD2 S5P_LCDREG(0x0104) -#define S5P_VIDW02ADD2 S5P_LCDREG(0x0108) -#define S5P_VIDW03ADD2 S5P_LCDREG(0x010C) -#define S5P_VIDW04ADD2 S5P_LCDREG(0x0110) - -#define S5P_VP1TCON0 S5P_LCDREG(0x0118) -#define S5P_VP1TCON1 S5P_LCDREG(0x011C) - -#define S5P_VIDINTCON0 S5P_LCDREG(0x0130) -#define S5P_VIDINTCON1 S5P_LCDREG(0x0134) - -#define S5P_W1KEYCON0 S5P_LCDREG(0x0140) /* Color key control */ -#define S5P_W1KEYCON1 S5P_LCDREG(0x0144) -#define S5P_W2KEYCON0 S5P_LCDREG(0x0148) -#define S5P_W2KEYCON1 S5P_LCDREG(0x014C) -#define S5P_W3KEYCON0 S5P_LCDREG(0x0150) -#define S5P_W3KEYCON1 S5P_LCDREG(0x0154) -#define S5P_W4KEYCON0 S5P_LCDREG(0x0158) -#define S5P_W4KEYCON1 S5P_LCDREG(0x015C) - -#define S5P_W1KEYALPHA S5P_LCDREG(0x0160) -#define S5P_W2KEYALPHA S5P_LCDREG(0x0164) -#define S5P_W3KEYALPHA S5P_LCDREG(0x0168) -#define S5P_W4KEYALPHA S5P_LCDREG(0x016C) - -#define S5P_DITHMODE S5P_LCDREG(0x0170) - -#define S5P_WIN0MAP S5P_LCDREG(0x0180) -#define S5P_WIN1MAP S5P_LCDREG(0x0184) -#define S5P_WIN2MAP S5P_LCDREG(0x0188) -#define S5P_WIN3MAP S5P_LCDREG(0x018C) -#define S5P_WIN4MAP S5P_LCDREG(0x0190) - -#define S5P_WPALCON_H S5P_LCDREG(0x019C) -#define S5P_WPALCON_L S5P_LCDREG(0x01A0) - -#define S5P_VIDW0ALPHA0 S5P_LCDREG(0x0200) -#define S5P_VIDW0ALPHA1 S5P_LCDREG(0x0204) -#define S5P_VIDW1ALPHA0 S5P_LCDREG(0x0208) -#define S5P_VIDW1ALPHA1 S5P_LCDREG(0x020C) -#define S5P_VIDW2ALPHA0 S5P_LCDREG(0x0210) -#define S5P_VIDW2ALPHA1 S5P_LCDREG(0x0214) -#define S5P_VIDW3ALPHA0 S5P_LCDREG(0x0218) -#define S5P_VIDW3ALPHA1 S5P_LCDREG(0x021C) -#define S5P_VIDW4ALPHA0 S5P_LCDREG(0x0220) -#define S5P_VIDW4ALPHA1 S5P_LCDREG(0x0224) - -#define S5P_BLENDEQ1 S5P_LCDREG(0x0244) -#define S5P_BLENDEQ2 S5P_LCDREG(0x0248) -#define S5P_BLENDEQ3 S5P_LCDREG(0x024C) -#define S5P_BLENDEQ4 S5P_LCDREG(0x0250) -#define S5P_BLENDCON S5P_LCDREG(0x0260) /* Blending control */ -#define S5P_GPOUTCON0 S5P_LCDREG(0x0278) /* mDNIe */ -#define S5P_DUALRGB S5P_LCDREG(0x027C) /* DUALRGB Register */ - -/* - * Bit Definitions -*/ - -/* VIDCON0 */ -#define S5P_VIDCON0_DSI_DISABLE (0 << 30) -#define S5P_VIDCON0_DSI_ENABLE (1 << 30) -#define S5P_VIDCON0_SCAN_PROGRESSIVE (0 << 29) -#define S5P_VIDCON0_SCAN_INTERLACE (1 << 29) -#define S5P_VIDCON0_SCAN_MASK (1 << 29) -#define S5P_VIDCON0_VIDOUT_RGB (0 << 26) -#define S5P_VIDCON0_VIDOUT_ITU (1 << 26) -#define S5P_VIDCON0_VIDOUT_I80LDI0 (2 << 26) -#define S5P_VIDCON0_VIDOUT_I80LDI1 (3 << 26) -#define S5P_VIDCON0_VIDOUT_MASK (3 << 26) -#define S5P_VIDCON0_PNRMODE_RGB_P (0 << 17) -#define S5P_VIDCON0_PNRMODE_BGR_P (1 << 17) -#define S5P_VIDCON0_PNRMODE_RGB_S (2 << 17) -#define S5P_VIDCON0_PNRMODE_BGR_S (3 << 17) -#define S5P_VIDCON0_PNRMODE_MASK (3 << 17) -#define S5P_VIDCON0_PNRMODE_SHIFT (17) -#define S5P_VIDCON0_CLKVALUP_ALWAYS (0 << 16) -#define S5P_VIDCON0_CLKVALUP_START_FRAME (1 << 16) -#define S5P_VIDCON0_CLKVALUP_MASK (1 << 16) -#define S5P_VIDCON0_CLKVAL_F(x) (((x) & 0xff) << 6) -#define S5P_VIDCON0_VCLKEN_NORMAL (0 << 5) -#define S5P_VIDCON0_VCLKEN_FREERUN (1 << 5) -#define S5P_VIDCON0_VCLKEN_MASK (1 << 5) -#define S5P_VIDCON0_CLKDIR_DIRECTED (0 << 4) -#define S5P_VIDCON0_CLKDIR_DIVIDED (1 << 4) -#define S5P_VIDCON0_CLKDIR_MASK (1 << 4) -#define S5P_VIDCON0_CLKSEL_HCLK (0 << 2) -#define S5P_VIDCON0_CLKSEL_SCLK (1 << 2) -#define S5P_VIDCON0_CLKSEL_MASK (1 << 2) -#define S5P_VIDCON0_ENVID_ENABLE (1 << 1) -#define S5P_VIDCON0_ENVID_DISABLE (0 << 1) -#define S5P_VIDCON0_ENVID_F_ENABLE (1 << 0) -#define S5P_VIDCON0_ENVID_F_DISABLE (0 << 0) - -/* VIDCON1 */ - -#define S5P_VIDCON1_VSTATUS_VSYNC 0x0 -#define S5P_VIDCON1_VSTATUS_BACKPORCH 0x1 -#define S5P_VIDCON1_VSTATUS_ACTIVE 0x2 -#define S5P_VIDCON1_VSTATUS_FRONTPORCH 0x3 -#define S5P_VIDCON1_VSTATUS_MASK 0x3 - -#define S5P_VIDCON1_FIXVCLK_VDEN_DISABLE (3 << 9) -#define S5P_VIDCON1_FIXVCLK_RUNNING (1 << 9) -#define S5P_VIDCON1_FIXVCLK_HOLD (0 << 9) -#define S5P_VIDCON1_IVCLK_FALLING_EDGE (0 << 7) -#define S5P_VIDCON1_IVCLK_RISING_EDGE (1 << 7) -#define S5P_VIDCON1_IHSYNC_NORMAL (0 << 6) -#define S5P_VIDCON1_IHSYNC_INVERT (1 << 6) -#define S5P_VIDCON1_IVSYNC_NORMAL (0 << 5) -#define S5P_VIDCON1_IVSYNC_INVERT (1 << 5) -#define S5P_VIDCON1_IVDEN_NORMAL (0 << 4) -#define S5P_VIDCON1_IVDEN_INVERT (1 << 4) - -/* VIDCON2 */ -#define S5P_VIDCON2_EN601_DISABLE (0 << 23) -#define S5P_VIDCON2_EN601_ENABLE (1 << 23) -#define S5P_VIDCON2_EN601_MASK (1 << 23) -#define S5P_VIDCON2_ORGYUV_YCBCR (0 << 8) -#define S5P_VIDCON2_ORGYUV_CBCRY (1 << 8) -#define S5P_VIDCON2_ORGYUV_MASK (1 << 8) -#define S5P_VIDCON2_YUVORD_CBCR (0 << 7) -#define S5P_VIDCON2_YUVORD_CRCB (1 << 7) -#define S5P_VIDCON2_YUVORD_MASK (1 << 7) - -/* PRTCON */ -#define S5P_PRTCON_UPDATABLE (0 << 11) -#define S5P_PRTCON_PROTECT (1 << 11) - -/* VIDTCON0 */ -#define S5P_VIDTCON0_VBPDE(x) (((x) & 0xff) << 24) -#define S5P_VIDTCON0_VBPD(x) (((x) & 0xff) << 16) -#define S5P_VIDTCON0_VFPD(x) (((x) & 0xff) << 8) -#define S5P_VIDTCON0_VSPW(x) (((x) & 0xff) << 0) - -/* VIDTCON1 */ -#define S5P_VIDTCON1_VFPDE(x) (((x) & 0xff) << 24) -#define S5P_VIDTCON1_HBPD(x) (((x) & 0xff) << 16) -#define S5P_VIDTCON1_HFPD(x) (((x) & 0xff) << 8) -#define S5P_VIDTCON1_HSPW(x) (((x) & 0xff) << 0) - -/* VIDTCON2 */ -#define S5P_VIDTCON2_LINEVAL(x) (((x) & 0x7ff) << 11) -#define S5P_VIDTCON2_HOZVAL(x) (((x) & 0x7ff) << 0) - -/* VIDTCON3 */ -#define S5P_VIDTCON3_VSYNCEN (1 << 31) -#define S5P_VIDTCON3_FRMEN (1 << 29) -#define S5P_VIDTCON3_FRMVRATE(x) ((x) << 24) - -/* Window 0~4 Control - WINCONx */ -#define S5P_WINCON_DATAPATH_DMA (0 << 22) -#define S5P_WINCON_DATAPATH_LOCAL (1 << 22) -#define S5P_WINCON_DATAPATH_MASK (1 << 22) -#define S5P_WINCON_BUFSEL_0 (0 << 20) -#define S5P_WINCON_BUFSEL_1 (1 << 20) -#define S5P_WINCON_BUFSEL_MASK (1 << 20) -#define S5P_WINCON_BUFSEL_SHIFT (20) -#define S5P_WINCON_BUFAUTO_DISABLE (0 << 19) -#define S5P_WINCON_BUFAUTO_ENABLE (1 << 19) -#define S5P_WINCON_BUFAUTO_MASK (1 << 19) -#define S5P_WINCON_BITSWP_DISABLE (0 << 18) -#define S5P_WINCON_BITSWP_ENABLE (1 << 18) -#define S5P_WINCON_BITSWP_SHIFT (18) -#define S5P_WINCON_BYTESWP_DISABLE (0 << 17) -#define S5P_WINCON_BYTESWP_ENABLE (1 << 17) -#define S5P_WINCON_BYTESWP_SHIFT (17) -#define S5P_WINCON_HAWSWP_DISABLE (0 << 16) -#define S5P_WINCON_HAWSWP_ENABLE (1 << 16) -#define S5P_WINCON_HAWSWP_SHIFT (16) -#define S5P_WINCON_WSWP_DISABLE (0 << 15) -#define S5P_WINCON_WSWP_ENABLE (1 << 15) -#define S5P_WINCON_WSWP_SHIFT (15) -#define S5P_WINCON_INRGB_RGB (0 << 13) -#define S5P_WINCON_INRGB_YUV (1 << 13) -#define S5P_WINCON_INRGB_MASK (1 << 13) -#define S5P_WINCON_BURSTLEN_16WORD (0 << 9) -#define S5P_WINCON_BURSTLEN_8WORD (1 << 9) -#define S5P_WINCON_BURSTLEN_4WORD (2 << 9) -#define S5P_WINCON_BURSTLEN_MASK (3 << 9) -#define S5P_WINCON_ALPHA_MULTI_DISABLE (0 << 7) -#define S5P_WINCON_ALPHA_MULTI_ENABLE (1 << 7) -#define S5P_WINCON_BLD_PLANE (0 << 6) -#define S5P_WINCON_BLD_PIXEL (1 << 6) -#define S5P_WINCON_BLD_MASK (1 << 6) -#define S5P_WINCON_BPPMODE_1BPP (0 << 2) -#define S5P_WINCON_BPPMODE_2BPP (1 << 2) -#define S5P_WINCON_BPPMODE_4BPP (2 << 2) -#define S5P_WINCON_BPPMODE_8BPP_PAL (3 << 2) -#define S5P_WINCON_BPPMODE_8BPP (4 << 2) -#define S5P_WINCON_BPPMODE_16BPP_565 (5 << 2) -#define S5P_WINCON_BPPMODE_16BPP_A555 (6 << 2) -#define S5P_WINCON_BPPMODE_18BPP_666 (8 << 2) -#define S5P_WINCON_BPPMODE_18BPP_A665 (9 << 2) -#define S5P_WINCON_BPPMODE_24BPP_888 (0xb << 2) -#define S5P_WINCON_BPPMODE_24BPP_A887 (0xc << 2) -#define S5P_WINCON_BPPMODE_32BPP (0xd << 2) -#define S5P_WINCON_BPPMODE_16BPP_A444 (0xe << 2) -#define S5P_WINCON_BPPMODE_15BPP_555 (0xf << 2) -#define S5P_WINCON_BPPMODE_MASK (0xf << 2) -#define S5P_WINCON_BPPMODE_SHIFT (2) -#define S5P_WINCON_ALPHA0_SEL (0 << 1) -#define S5P_WINCON_ALPHA1_SEL (1 << 1) -#define S5P_WINCON_ALPHA_SEL_MASK (1 << 1) -#define S5P_WINCON_ENWIN_DISABLE (0 << 0) -#define S5P_WINCON_ENWIN_ENABLE (1 << 0) - -/* WINCON1 special */ -#define S5P_WINCON1_VP_DISABLE (0 << 24) -#define S5P_WINCON1_VP_ENABLE (1 << 24) -#define S5P_WINCON1_LOCALSEL_FIMC1 (0 << 23) -#define S5P_WINCON1_LOCALSEL_VP (1 << 23) -#define S5P_WINCON1_LOCALSEL_MASK (1 << 23) - -/* VIDOSDxA, VIDOSDxB */ -#define S5P_VIDOSD_LEFT_X(x) (((x) & 0x7ff) << 11) -#define S5P_VIDOSD_TOP_Y(x) (((x) & 0x7ff) << 0) -#define S5P_VIDOSD_RIGHT_X(x) (((x) & 0x7ff) << 11) -#define S5P_VIDOSD_BOTTOM_Y(x) (((x) & 0x7ff) << 0) - -/* VIDOSD0C, VIDOSDxD */ -#define S5P_VIDOSD_SIZE(x) (((x) & 0xffffff) << 0) - -/* VIDOSDxC (1~4) */ -#define S5P_VIDOSD_ALPHA0_R(x) (((x) & 0xf) << 20) -#define S5P_VIDOSD_ALPHA0_G(x) (((x) & 0xf) << 16) -#define S5P_VIDOSD_ALPHA0_B(x) (((x) & 0xf) << 12) -#define S5P_VIDOSD_ALPHA1_R(x) (((x) & 0xf) << 8) -#define S5P_VIDOSD_ALPHA1_G(x) (((x) & 0xf) << 4) -#define S5P_VIDOSD_ALPHA1_B(x) (((x) & 0xf) << 0) -#define S5P_VIDOSD_ALPHA0_SHIFT (12) -#define S5P_VIDOSD_ALPHA1_SHIFT (0) - -/* Start Address */ -#define S5P_VIDADDR_START_VBANK(x) (((x) & 0xff) << 24) -#define S5P_VIDADDR_START_VBASEU(x) (((x) & 0xffffff) << 0) - -/* End Address */ -#define S5P_VIDADDR_END_VBASEL(x) (((x) & 0xffffff) << 0) - -/* Buffer Size */ -#define S5P_VIDADDR_OFFSIZE(x) (((x) & 0x1fff) << 13) -#define S5P_VIDADDR_PAGEWIDTH(x) (((x) & 0x1fff) << 0) - -/* VIDINTCON0 */ -#define S5P_VIDINTCON0_SYSMAINCON_DISABLE (0 << 19) -#define S5P_VIDINTCON0_SYSMAINCON_ENABLE (1 << 19) -#define S5P_VIDINTCON0_SYSSUBCON_DISABLE (0 << 18) -#define S5P_VIDINTCON0_SYSSUBCON_ENABLE (1 << 18) -#define S5P_VIDINTCON0_SYSIFDONE_DISABLE (0 << 17) -#define S5P_VIDINTCON0_SYSIFDONE_ENABLE (1 << 17) -#define S5P_VIDINTCON0_FRAMESEL0_BACK (0 << 15) -#define S5P_VIDINTCON0_FRAMESEL0_VSYNC (1 << 15) -#define S5P_VIDINTCON0_FRAMESEL0_ACTIVE (2 << 15) -#define S5P_VIDINTCON0_FRAMESEL0_FRONT (3 << 15) -#define S5P_VIDINTCON0_FRAMESEL0_MASK (3 << 15) -#define S5P_VIDINTCON0_FRAMESEL1_NONE (0 << 13) -#define S5P_VIDINTCON0_FRAMESEL1_BACK (1 << 13) -#define S5P_VIDINTCON0_FRAMESEL1_VSYNC (2 << 13) -#define S5P_VIDINTCON0_FRAMESEL1_FRONT (3 << 13) -#define S5P_VIDINTCON0_INTFRMEN_DISABLE (0 << 12) -#define S5P_VIDINTCON0_INTFRMEN_ENABLE (1 << 12) -#define S5P_VIDINTCON0_FIFOSEL_WIN4 (1 << 11) -#define S5P_VIDINTCON0_FIFOSEL_WIN3 (1 << 10) -#define S5P_VIDINTCON0_FIFOSEL_WIN2 (1 << 9) -#define S5P_VIDINTCON0_FIFOSEL_WIN1 (1 << 6) -#define S5P_VIDINTCON0_FIFOSEL_WIN0 (1 << 5) -#define S5P_VIDINTCON0_FIFOSEL_ALL (0x73 << 5) -#define S5P_VIDINTCON0_FIFOSEL_MASK (0x73 << 5) -#define S5P_VIDINTCON0_FIFOLEVEL_25 (0 << 2) -#define S5P_VIDINTCON0_FIFOLEVEL_50 (1 << 2) -#define S5P_VIDINTCON0_FIFOLEVEL_75 (2 << 2) -#define S5P_VIDINTCON0_FIFOLEVEL_EMPTY (3 << 2) -#define S5P_VIDINTCON0_FIFOLEVEL_FULL (4 << 2) -#define S5P_VIDINTCON0_FIFOLEVEL_MASK (7 << 2) -#define S5P_VIDINTCON0_INTFIFO_DISABLE (0 << 1) -#define S5P_VIDINTCON0_INTFIFO_ENABLE (1 << 1) -#define S5P_VIDINTCON0_INT_DISABLE (0 << 0) -#define S5P_VIDINTCON0_INT_ENABLE (1 << 0) -#define S5P_VIDINTCON0_INT_MASK (1 << 0) - -/* VIDINTCON1 */ -#define S5P_VIDINTCON1_INTVPPEND (1 << 5) -#define S5P_VIDINTCON1_INTI80PEND (1 << 2) -#define S5P_VIDINTCON1_INTFRMPEND (1 << 1) -#define S5P_VIDINTCON1_INTFIFOPEND (1 << 0) - -/* WxKEYCON0 (1~4) */ -#define S5P_KEYCON0_KEYBLEN_DISABLE (0 << 26) -#define S5P_KEYCON0_KEYBLEN_ENABLE (1 << 26) -#define S5P_KEYCON0_KEY_DISABLEi (0 << 25) -#define S5P_KEYCON0_KEY_ENABLE (1 << 25) -#define S5P_KEYCON0_DIRCON_MATCH_FG (0 << 24) -#define S5P_KEYCON0_DIRCON_MATCH_BG (1 << 24) -#define S5P_KEYCON0_COMPKEY(x) (((x) & 0xffffff) << 0) - -/* WxKEYCON1 (1~4) */ -#define S5P_KEYCON1_COLVAL(x) (((x) & 0xffffff) << 0) - -/* DUALRGB */ -#define S5P_DUALRGB_BYPASS_SINGLE (0x00 << 0) -#define S5P_DUALRGB_BYPASS_DUAL (0x01 << 0) -#define S5P_DUALRGB_MIE_DUAL (0x10 << 0) -#define S5P_DUALRGB_MIE_SINGLE (0x11 << 0) -#define S5P_DUALRGB_LINESPLIT (0x0 << 2) -#define S5P_DUALRGB_FRAMESPLIT (0x1 << 2) -#define S5P_DUALRGB_SUB_CNT(x) ((x & 0xfff) << 4) -#define S5P_DUALRGB_VDEN_EN_DISABLE (0x0 << 16) -#define S5P_DUALRGB_VDEN_EN_ENABLE (0x1 << 16) -#define S5P_DUALRGB_MAIN_CNT(x) ((x & 0xfff) << 18) - -#endif /* _REGS_IELCD_H */ diff --git a/drivers/video/samsung_duallcd/extension/s5p_fimd_ext.c b/drivers/video/samsung_duallcd/extension/s5p_fimd_ext.c deleted file mode 100644 index 0c197b6..0000000 --- a/drivers/video/samsung_duallcd/extension/s5p_fimd_ext.c +++ /dev/null @@ -1,209 +0,0 @@ -/* linux/drivers/video/samsung/s5p_fimd_ext.c - * - * Samsung SoC FIMD Extension Device Framework. - * - * Inki Dae <inki.dae@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/types.h> -#include <linux/mutex.h> -#include <linux/slab.h> -#include <linux/platform_device.h> - -#include <plat/fimd_lite_ext.h> - -#include "s5p_fimd_ext.h" - -struct s5p_fimd_ext { - struct list_head list; - struct device *dev; -}; - -static LIST_HEAD(fimd_ext_list); -static DEFINE_MUTEX(fimd_ext_lock); - -struct s5p_fimd_ext_device *to_fimd_ext_device(struct device *dev) -{ - return dev ? container_of(dev, struct s5p_fimd_ext_device, dev) : NULL; -} -EXPORT_SYMBOL(to_fimd_ext_device); - -struct s5p_fimd_ext_driver *to_fimd_ext_driver(struct device_driver *drv) -{ - return drv ? container_of(drv, struct s5p_fimd_ext_driver, driver) : - NULL; -} -EXPORT_SYMBOL(to_fimd_ext_driver); - -static ssize_t modalias_show(struct device *dev, struct device_attribute *a, - char *buf) -{ - struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - int len = snprintf(buf, PAGE_SIZE, "platform:%s\n", fx_dev->name); - - return (len >= PAGE_SIZE) ? (PAGE_SIZE - 1) : len; -} - -static struct device_attribute s5p_fimd_ext_dev_attrs[] = { - __ATTR_RO(modalias), - __ATTR_NULL, -}; - -static int s5p_fimd_ext_match_device(struct device *dev, - struct device_driver *drv) -{ - const struct s5p_fimd_ext_device *fx_dev = to_fimd_ext_device(dev); - const struct s5p_fimd_ext_driver *fx_drv = to_fimd_ext_driver(drv); - - return strcmp(fx_dev->name, fx_drv->driver.name) == 0; -} - -struct bus_type s5p_fimd_ext_bus_type = { - .name = "fimd_ext", - .dev_attrs = s5p_fimd_ext_dev_attrs, - .match = s5p_fimd_ext_match_device, -}; - -static int s5p_fimd_ext_drv_probe(struct device *dev) -{ - const struct s5p_fimd_ext_driver *fx_drv = - to_fimd_ext_driver(dev->driver); - - return fx_drv->probe(to_fimd_ext_device(dev)); -} - -struct resource *s5p_fimd_ext_get_resource(struct s5p_fimd_ext_device *fx_dev, - unsigned int type, unsigned int num) -{ - int i; - - for (i = 0; i < fx_dev->num_resources; i++) { - struct resource *r = &fx_dev->resource[i]; - - if (type == resource_type(r) && num-- == 0) - return r; - } - - return NULL; -} - -int s5p_fimd_ext_get_irq(struct s5p_fimd_ext_device *fx_dev, unsigned int num) -{ - struct resource *r = s5p_fimd_ext_get_resource(fx_dev, - IORESOURCE_IRQ, num); - - return r ? r->start : -ENXIO; -} - -int s5p_fimd_ext_device_register(struct s5p_fimd_ext_device *fx_dev) -{ - struct s5p_fimd_ext *fimd_ext; - int i, ret = 0; - - fimd_ext = kzalloc(sizeof(struct s5p_fimd_ext), GFP_KERNEL); - if (!fimd_ext) { - printk(KERN_ERR "failed to allocate fimd_ext object.\n"); - return -EFAULT; - } - - fimd_ext->dev = &fx_dev->dev; - - device_initialize(&fx_dev->dev); - - if (!fx_dev->dev.parent) - fx_dev->dev.parent = &platform_bus; - - fx_dev->dev.bus = &s5p_fimd_ext_bus_type; - - if (fx_dev->id != -1) - dev_set_name(&fx_dev->dev, "%s.%d", fx_dev->name, fx_dev->id); - else - dev_set_name(&fx_dev->dev, "%s", fx_dev->name); - - for (i = 0; i < fx_dev->num_resources; i++) { - struct resource *r = &fx_dev->resource[i]; - - if (r->name == NULL) - r->name = dev_name(&fx_dev->dev); - } - - ret = device_add(&fx_dev->dev); - if (ret == 0) { - mutex_lock(&fimd_ext_lock); - list_add_tail(&fimd_ext->list, &fimd_ext_list); - mutex_unlock(&fimd_ext_lock); - - return ret; - } - - kfree(fimd_ext); - - return ret; -} -EXPORT_SYMBOL(s5p_fimd_ext_device_register); - -int s5p_fimd_ext_driver_register(struct s5p_fimd_ext_driver *fx_drv) -{ - fx_drv->driver.bus = &s5p_fimd_ext_bus_type; - if (fx_drv->probe) - fx_drv->driver.probe = s5p_fimd_ext_drv_probe; - - /* add some callbacks here. */ - - printk(KERN_DEBUG "registered a driver(%s) to fimd_ext driver.\n", - fx_drv->driver.name); - - return driver_register(&fx_drv->driver); -} -EXPORT_SYMBOL(s5p_fimd_ext_driver_register); - -struct s5p_fimd_ext_device *s5p_fimd_ext_find_device(const char *name) -{ - struct s5p_fimd_ext *fimd_ext; - struct s5p_fimd_ext_device *fx_dev; - struct device *dev; - - mutex_lock(&fimd_ext_lock); - - printk(KERN_DEBUG "find ext driver (%s).\n", name); - - list_for_each_entry(fimd_ext, &fimd_ext_list, list) { - dev = fimd_ext->dev; - fx_dev = to_fimd_ext_device(dev); - - if ((strcmp(fx_dev->name, name)) == 0) { - mutex_unlock(&fimd_ext_lock); - printk(KERN_DEBUG "found!!!(%s).\n", fx_dev->name); - return fx_dev; - } - } - - printk(KERN_WARNING "failed to find ext device(%s).\n", name); - - mutex_unlock(&fimd_ext_lock); - - return NULL; -} - -static int __init s5p_fimd_ext_init(void) -{ - return bus_register(&s5p_fimd_ext_bus_type); -} - -static void __exit s5p_fimd_ext_exit(void) -{ -} - -early_initcall(s5p_fimd_ext_init); -module_exit(s5p_fimd_ext_exit); - -MODULE_AUTHOR("InKi Dae <inki.dae@samsung.com>"); -MODULE_DESCRIPTION("Samsung SoC FIMD Extension Framework"); -MODULE_LICENSE("GPL"); diff --git a/drivers/video/samsung_duallcd/extension/s5p_fimd_ext.h b/drivers/video/samsung_duallcd/extension/s5p_fimd_ext.h deleted file mode 100644 index 3a4dc3a..0000000 --- a/drivers/video/samsung_duallcd/extension/s5p_fimd_ext.h +++ /dev/null @@ -1,30 +0,0 @@ -/* linux/driver/video/samsung/s5p_fimd_ext.h - * - * Samsung SoC FIMD Extension Framework Header. - * - * InKi Dae <inki.dae@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef _S5P_FIMD_EXT_H -#define _S5P_FIMD_EXT_H - -#include <linux/device.h> - -struct s5p_fimd_ext_device - *to_fimd_ext_device(struct device *dev); - -struct resource *s5p_fimd_ext_get_resource(struct s5p_fimd_ext_device *fx_dev, - unsigned int type, unsigned int num); - -int s5p_fimd_ext_get_irq(struct s5p_fimd_ext_device *fx_dev, - unsigned int num); - -int s5p_fimd_ext_device_register(struct s5p_fimd_ext_device *fx_dev); - -int s5p_fimd_ext_driver_register(struct s5p_fimd_ext_driver *fx_drv); - -#endif /* _S5P_FIMD_EXT_H */ diff --git a/drivers/video/samsung_duallcd/extension/s5p_fimd_lite.c b/drivers/video/samsung_duallcd/extension/s5p_fimd_lite.c deleted file mode 100644 index 3e128b8..0000000 --- a/drivers/video/samsung_duallcd/extension/s5p_fimd_lite.c +++ /dev/null @@ -1,502 +0,0 @@ -/* /linux/driver/video/samsung/s5p_fimd_lite.c - * - * Samsung SoC FIMD Lite driver. - * - * Author: InKi Dae <inki.dae@samsung.com> - * - * 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. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - */ - -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/errno.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/irq.h> -#include <linux/slab.h> -#include <linux/interrupt.h> -#include <linux/fb.h> - -#include <plat/clock.h> -#include <plat/fb.h> -#include <plat/cpu.h> -#include <plat/fimd_lite_ext.h> -#include <plat/regs-fb.h> - -#include <mach/map.h> - -#include "s5p_fimd_ext.h" -#include "s5p_fimd_lite.h" -#include "regs_fimd_lite.h" - -static void *to_fimd_lite_platform_data(struct s5p_fimd_ext_device *fx_dev) -{ - return fx_dev->dev.platform_data ? (void *)fx_dev->dev.platform_data : - NULL; -} - -static void s5p_fimd_lite_set_par(struct s5p_fimd_lite *fimd_lite, - unsigned int win_id) -{ - struct exynos_drm_fimd_pdata *lcd; - struct fb_videomode timing; - unsigned int cfg; - - lcd = fimd_lite->lcd; - timing = lcd->panel.timing; - - /* set window control */ - cfg = readl(fimd_lite->iomem_base + S5P_WINCON(win_id)); - - cfg &= ~(S5P_WINCON_BITSWP_ENABLE | S5P_WINCON_BYTESWP_ENABLE | \ - S5P_WINCON_HAWSWP_ENABLE | S5P_WINCON_WSWP_ENABLE | \ - S5P_WINCON_BURSTLEN_MASK | S5P_WINCON_BPPMODE_MASK | \ - S5P_WINCON_INRGB_MASK | S5P_WINCON_DATAPATH_MASK); - - /* DATAPATH is LOCAL */ - cfg |= S5P_WINCON_DATAPATH_LOCAL; - - /* pixel format is unpacked RGB888 */ - cfg |= S5P_WINCON_INRGB_RGB | S5P_WINCON_BPPMODE_32BPP; - - writel(cfg, fimd_lite->iomem_base + S5P_WINCON(win_id)); - - /* set window position to x=0, y=0*/ - cfg = S5P_VIDOSD_LEFT_X(0) | S5P_VIDOSD_TOP_Y(0); - writel(cfg, fimd_lite->iomem_base + S5P_VIDOSD_A(win_id)); - - cfg = S5P_VIDOSD_RIGHT_X(timing.xres - 1) | - S5P_VIDOSD_BOTTOM_Y(timing.yres - 1); - writel(cfg, fimd_lite->iomem_base + S5P_VIDOSD_B(win_id)); - - /* set window size for window0*/ - cfg = S5P_VIDOSD_SIZE(timing.xres * timing.yres); - writel(cfg, fimd_lite->iomem_base + S5P_VIDOSD_C(win_id)); - - return; -} - -static void s5p_fimd_lite_set_clock(struct s5p_fimd_lite *fimd_lite) -{ - unsigned int cfg = 0, div = 0; - unsigned int pixel_clock, src_clock, max_clock; - struct clk *clk; - struct exynos_drm_fimd_pdata *lcd; - struct fb_videomode timing; - - lcd = fimd_lite->lcd; - timing = lcd->panel.timing; - - clk = fimd_lite->clk; - - max_clock = 86 * 1000000; - - pixel_clock = timing.refresh * - (timing.left_margin + timing.right_margin + - timing.hsync_len + timing.xres) * (timing.upper_margin + - timing.lower_margin + timing.vsync_len + timing.yres); - - src_clock = clk_get_rate(clk->parent); - - cfg = readl(fimd_lite->iomem_base + S5P_VIDCON0); - cfg &= ~(S5P_VIDCON0_VCLKEN_MASK | S5P_VIDCON0_CLKVALUP_MASK | - S5P_VIDCON0_CLKVAL_F(0xFF)); - cfg |= (S5P_VIDCON0_CLKVALUP_ALWAYS | S5P_VIDCON0_VCLKEN_NORMAL); - - cfg |= S5P_VIDCON0_CLKSEL_HCLK; - - if (pixel_clock > max_clock) - pixel_clock = max_clock; - - div = (unsigned int)(src_clock / pixel_clock); - if (src_clock % pixel_clock) - div++; - - cfg |= S5P_VIDCON0_CLKVAL_F(div - 1); - writel(cfg, fimd_lite->iomem_base + S5P_VIDCON0); - - return; -} - -static void s5p_fimd_lite_window_on(struct s5p_fimd_lite *fimd_lite, - unsigned int win_id, unsigned int enable) -{ - unsigned int cfg; - - /* enable window */ - cfg = readl(fimd_lite->iomem_base + S5P_WINCON(win_id)); - - cfg &= ~S5P_WINCON_ENWIN_ENABLE; - - if (enable) - cfg |= S5P_WINCON_ENWIN_ENABLE; - - writel(cfg, fimd_lite->iomem_base + S5P_WINCON(win_id)); -} - -static void s5p_fimd_lite_lcd_on(struct s5p_fimd_lite *fimd_lite, - unsigned int enable) -{ - unsigned int cfg; - - cfg = readl(fimd_lite->iomem_base + S5P_VIDCON0); - - cfg &= ~(S5P_VIDCON0_ENVID_ENABLE | S5P_VIDCON0_ENVID_F_ENABLE); - - if (enable) - cfg |= (S5P_VIDCON0_ENVID_ENABLE | S5P_VIDCON0_ENVID_F_ENABLE); - - writel(cfg, fimd_lite->iomem_base + S5P_VIDCON0); -} - -void s5p_fimd_lite_get_vsync_interrupt(struct s5p_fimd_lite *fimd_lite, - unsigned int enable) -{ - unsigned int cfg; - - cfg = readl(fimd_lite->iomem_base + S5P_VIDINTCON0); - cfg &= ~(S5P_VIDINTCON0_INTFRMEN_ENABLE | S5P_VIDINTCON0_INT_ENABLE | - S5P_VIDINTCON0_FRAMESEL0_VSYNC); - - if (enable) { - cfg |= (S5P_VIDINTCON0_INTFRMEN_ENABLE | - S5P_VIDINTCON0_INT_ENABLE | - S5P_VIDINTCON0_FRAMESEL0_VSYNC); - } else { - cfg |= (S5P_VIDINTCON0_INTFRMEN_DISABLE | - S5P_VIDINTCON0_INT_DISABLE); - - cfg &= ~S5P_VIDINTCON0_FRAMESEL0_VSYNC; - } - - writel(cfg, fimd_lite->iomem_base + S5P_VIDINTCON0); -} - -static void s5p_change_dynamic_refresh(struct s5p_fimd_dynamic_refresh - *fimd_refresh, struct s5p_fimd_ext_device *fx_dev) -{ - unsigned int cfg = 0, ret = 0; - struct s5p_fimd_lite *fimd_lite = fimd_ext_get_drvdata(fx_dev); - struct exynos_drm_fimd_pdata *lcd; - struct fb_videomode timing; - unsigned long flags; - u32 vclk, src_clk, refresh; - - lcd = fimd_lite->lcd; - timing = lcd->panel.timing; - - cfg = readl(fimd_lite->iomem_base + S5P_VIDCON0); - cfg &= ~(S5P_VIDCON0_CLKVALUP_START_FRAME | S5P_VIDCON0_CLKVAL_F(0xFF)); - cfg |= (S5P_VIDCON0_CLKVALUP_ALWAYS | S5P_VIDCON0_VCLKEN_NORMAL); - cfg |= S5P_VIDCON0_CLKVAL_F(fimd_refresh->clkdiv - 1); - - if (!irqs_disabled()) - local_irq_save(flags); - - if (timing.refresh == 60) { - while (1) { - ret = (__raw_readl(fimd_lite->iomem_base + - S5P_VIDCON1) >> 13) & - S5P_VIDCON1_VSTATUS_MASK; - if (ret == S5P_VIDCON1_VSTATUS_BACKPORCH) { - __raw_writel(cfg, fimd_lite->iomem_base + - S5P_VIDCON0); - ret = (__raw_readl(fimd_refresh->regs + - VIDCON1) >> 13) & - S5P_VIDCON1_VSTATUS_MASK; - if (ret == S5P_VIDCON1_VSTATUS_ACTIVE) { - __raw_writel(cfg, - fimd_refresh->regs + VIDCON0); - break; - } - } - } - } else { - while (1) { - ret = (__raw_readl(fimd_refresh->regs + VIDCON1) >> 13) - & S5P_VIDCON1_VSTATUS_MASK; - if (ret == S5P_VIDCON1_VSTATUS_ACTIVE) { - ret = (__raw_readl(fimd_lite->iomem_base + - S5P_VIDCON1) >> 13) & - S5P_VIDCON1_VSTATUS_MASK; - if (ret == S5P_VIDCON1_VSTATUS_FRONTPORCH) { - __raw_writel(cfg, - fimd_refresh->regs + VIDCON0); - __raw_writel(cfg, - fimd_lite->iomem_base + - S5P_VIDCON0); - break; - } - } - } - } - if (irqs_disabled()) - local_irq_restore(flags); - - src_clk = clk_get_rate(fimd_lite->clk->parent); - vclk = timing.refresh * (timing.left_margin + timing.hsync_len + - timing.right_margin + timing.xres) * - (timing.upper_margin + timing.vsync_len + - timing.lower_margin + timing.yres); - - refresh = timing.refresh - - ((vclk - (src_clk / fimd_refresh->clkdiv)) / MHZ); - dev_dbg(fimd_lite->dev, "expected refresh rate: %d fps\n", refresh); -} - -static irqreturn_t s5p_fimd_lite_irq_frame(int irq, void *dev_id) -{ - struct s5p_fimd_lite *fimd_lite; - - fimd_lite = (struct s5p_fimd_lite *)dev_id; - - disable_irq_nosync(fimd_lite->irq); - - enable_irq(fimd_lite->irq); - - return IRQ_HANDLED; -} - -static void s5p_fimd_lite_logic_start(struct s5p_fimd_lite *fimd_lite, - unsigned int enable) -{ - unsigned int cfg; - - cfg = 0x2ff47; - - if (enable) - writel(cfg, fimd_lite->iomem_base + S5P_GPOUTCON0); - else - writel(0, fimd_lite->iomem_base + S5P_GPOUTCON0); -} - -static void s5p_fimd_lite_lcd_init(struct s5p_fimd_lite *fimd_lite) -{ - unsigned int cfg, rgb_mode, win_id = 0; - struct exynos_drm_fimd_pdata *lcd; - struct fb_videomode timing; - - lcd = fimd_lite->lcd; - timing = lcd->panel.timing; - - cfg = 0; - cfg |= lcd->vidcon1; - - writel(cfg, fimd_lite->iomem_base + S5P_VIDCON1); - - /* set timing */ - cfg = 0; - cfg |= S5P_VIDTCON0_VBPD(timing.upper_margin - 1); - cfg |= S5P_VIDTCON0_VFPD(timing.lower_margin - 1); - cfg |= S5P_VIDTCON0_VSPW(timing.vsync_len - 1); - writel(cfg, fimd_lite->iomem_base + S5P_VIDTCON0); - - cfg = 0; - cfg |= S5P_VIDTCON1_HBPD(timing.left_margin - 1); - cfg |= S5P_VIDTCON1_HFPD(timing.right_margin - 1); - cfg |= S5P_VIDTCON1_HSPW(timing.hsync_len - 1); - - writel(cfg, fimd_lite->iomem_base + S5P_VIDTCON1); - - /* set lcd size */ - cfg = 0; - cfg |= S5P_VIDTCON2_HOZVAL(timing.xres - 1); - cfg |= S5P_VIDTCON2_LINEVAL(timing.yres - 1); - - writel(cfg, fimd_lite->iomem_base + S5P_VIDTCON2); - - writel(0, fimd_lite->iomem_base + S5P_DITHMODE); - - /* set output to RGB */ - rgb_mode = 0; /* MODE_RGB_P */ - cfg = readl(fimd_lite->iomem_base + S5P_VIDCON0); - cfg &= ~S5P_VIDCON0_VIDOUT_MASK; - - cfg |= S5P_VIDCON0_VIDOUT_RGB; - writel(cfg, fimd_lite->iomem_base + S5P_VIDCON0); - - /* set display mode */ - cfg = readl(fimd_lite->iomem_base + S5P_VIDCON0); - cfg &= ~S5P_VIDCON0_PNRMODE_MASK; - cfg |= (rgb_mode << S5P_VIDCON0_PNRMODE_SHIFT); - writel(cfg, fimd_lite->iomem_base + S5P_VIDCON0); - - s5p_fimd_lite_get_vsync_interrupt(fimd_lite, 0); - - /* set par */ - s5p_fimd_lite_set_par(fimd_lite, win_id); - - /* set buffer size */ - cfg = S5P_VIDADDR_PAGEWIDTH(timing.xres * lcd->bpp / 8); - writel(cfg, fimd_lite->iomem_base + S5P_VIDADDR_SIZE(win_id)); - - /* set clock */ - s5p_fimd_lite_set_clock(fimd_lite); - - return; -} - -static int s5p_fimd_lite_setup(struct s5p_fimd_ext_device *fx_dev, - unsigned int enable) -{ - struct s5p_fimd_lite *fimd_lite = fimd_ext_get_drvdata(fx_dev); - - s5p_fimd_lite_logic_start(fimd_lite, enable); - - s5p_fimd_lite_lcd_init(fimd_lite); - - - s5p_fimd_lite_window_on(fimd_lite, 0, 1); - - return 0; -} - -static int s5p_fimd_lite_start(struct s5p_fimd_ext_device *fx_dev) -{ - struct s5p_fimd_lite *fimd_lite = fimd_ext_get_drvdata(fx_dev); - - s5p_fimd_lite_lcd_on(fimd_lite, 1); - - return 0; -} - -static void s5p_fimd_lite_stop(struct s5p_fimd_ext_device *fx_dev) -{ - struct s5p_fimd_lite *fimd_lite = fimd_ext_get_drvdata(fx_dev); - - s5p_fimd_lite_lcd_on(fimd_lite, 0); -} - -static void s5p_fimd_lite_power_on(struct s5p_fimd_ext_device *fx_dev) -{ - struct s5p_fimd_lite *fimd_lite = fimd_ext_get_drvdata(fx_dev); - - clk_enable(fimd_lite->clk); -} - -static void s5p_fimd_lite_power_off(struct s5p_fimd_ext_device *fx_dev) -{ - struct s5p_fimd_lite *fimd_lite = fimd_ext_get_drvdata(fx_dev); - - clk_disable(fimd_lite->clk); -} - -static int s5p_fimd_lite_probe(struct s5p_fimd_ext_device *fx_dev) -{ - struct clk *sclk = NULL; - struct resource *res; - struct s5p_fimd_lite *fimd_lite; - int ret = -1; - - fimd_lite = kzalloc(sizeof(struct s5p_fimd_lite), GFP_KERNEL); - if (!fimd_lite) { - dev_err(&fx_dev->dev, "failed to alloc fimd_lite object.\n"); - return -EFAULT; - } - - fimd_lite->dev = &fx_dev->dev; - fimd_lite->lcd = (struct exynos_drm_fimd_pdata *) - to_fimd_lite_platform_data(fx_dev); - - res = s5p_fimd_ext_get_resource(fx_dev, IORESOURCE_MEM, 0); - if (!res) { - dev_err(&fx_dev->dev, "failed to get io memory region.\n"); - ret = -EINVAL; - goto err0; - } - - fimd_lite->iomem_base = ioremap(res->start, resource_size(res)); - if (!fimd_lite->iomem_base) { - dev_err(&fx_dev->dev, "failed to remap io region\n"); - ret = -EFAULT; - goto err0; - } - - fimd_lite->clk = clk_get(&fx_dev->dev, "mdnie0"); - if (IS_ERR(fimd_lite->clk)) { - dev_err(&fx_dev->dev, "failed to get FIMD LITE clock source\n"); - ret = -EINVAL; - goto err1; - } - - sclk = clk_get(&fx_dev->dev, "sclk_mdnie"); - if (IS_ERR(sclk)) { - dev_err(&fx_dev->dev, "failed to get sclk_mdnie clock\n"); - ret = -EINVAL; - goto err2; - } - fimd_lite->clk->parent = sclk; - - fimd_lite->irq = s5p_fimd_ext_get_irq(fx_dev, 0); - - /* register interrupt handler for fimd-lite. */ - if (request_irq(fimd_lite->irq, s5p_fimd_lite_irq_frame, IRQF_DISABLED, - fx_dev->name, (void *)fimd_lite)) { - dev_err(&fx_dev->dev, "request_irq failed\n"); - ret = -EINVAL; - goto err3; - } - - fimd_ext_set_drvdata(fx_dev, fimd_lite); - - dev_info(&fx_dev->dev, "fimd lite driver has been probed.\n"); - - return 0; - -err3: - free_irq(fimd_lite->irq, fx_dev); -err2: - clk_put(sclk); -err1: - iounmap(fimd_lite->iomem_base); - clk_put(fimd_lite->clk); -err0: - kfree(fimd_lite); - - return ret; - -} - -static struct s5p_fimd_ext_driver fimd_ext_driver = { - .driver = { - .name = "fimd_lite", - .owner = THIS_MODULE, - }, - .change_clock = s5p_change_dynamic_refresh, - .power_on = s5p_fimd_lite_power_on, - .power_off = s5p_fimd_lite_power_off, - .setup = s5p_fimd_lite_setup, - .start = s5p_fimd_lite_start, - .stop = s5p_fimd_lite_stop, - .probe = s5p_fimd_lite_probe, -}; - -static int __init s5p_fimd_lite_init(void) -{ - return s5p_fimd_ext_driver_register(&fimd_ext_driver); -} - -static void __exit s5p_fimd_lite_exit(void) -{ -} - -arch_initcall(s5p_fimd_lite_init); -module_exit(s5p_fimd_lite_exit); - -MODULE_AUTHOR("InKi Dae <inki.dae@samsung.com>"); -MODULE_DESCRIPTION("FIMD Lite Driver"); -MODULE_LICENSE("GPL"); - diff --git a/drivers/video/samsung_duallcd/extension/s5p_fimd_lite.h b/drivers/video/samsung_duallcd/extension/s5p_fimd_lite.h deleted file mode 100644 index a8ef492..0000000 --- a/drivers/video/samsung_duallcd/extension/s5p_fimd_lite.h +++ /dev/null @@ -1,37 +0,0 @@ -/* linux/arch/arm/plat-s5p/s5p_fimd_lite.h - * - * FIMD Lite Platform Specific Header Definitions. - * - * Copyright (c) 2010 Samsung Electronics - * InKi Dae <inki.dae@samsung.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. -*/ - -#ifndef _S5P_FIMD_LITE_H_ -#define _S5P_FIMD_LITE_H_ - -#include <drm/exynos_drm.h> - -struct s5p_fimd_lite_platform_data { - unsigned int reg_base; - unsigned int reg_map_size; - unsigned int irq; -}; - -struct s5p_fimd_lite { - struct device *dev; - struct clk *clk; - void __iomem *iomem_base; - unsigned int irq; - unsigned int dynamic_refresh; - - struct exynos_drm_fimd_pdata *lcd; -}; - -void s5p_fimd_lite_get_vsync_interrupt(struct s5p_fimd_lite *fimd_lite, - unsigned int enable); - -#endif /* _S5P_FIMD_LITE_H_ */ |