Linux Kernel 2.6.9 for OMAP1710

源代码在线查看: pmagb-b-fb.c

软件大小: 44588 K
上传用户: huihuisasa
关键词: Kernel Linux 1710 OMAP
下载地址: 免注册下载 普通下载 VIP

相关代码

				/*				 *      linux/drivers/video/pmagb-b-fb.c				 *				 *	PMAGB-B TurboChannel framebuffer card support ... derived from:				 *	"HP300 Topcat framebuffer support (derived from macfb of all things)				 *	Phil Blundell  1998", the original code can be				 *      found in the file hpfb.c in the same directory.				 *				 *      DECstation related code Copyright (C) 1999, 2000, 2001 by				 *      Michael Engel ,				 *      Karsten Merker  and 				 *	Harald Koerfgen.				 *      This file is subject to the terms and conditions of the GNU General				 *      Public License.  See the file COPYING in the main directory of this				 *      archive for more details.				 *				 */								/*				 *      We currently only support the PMAGB-B in high resolution mode				 *      as I know of no way to detect low resolution mode set via jumper.				 *      KM, 2001/01/07				 */								#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 				#include 								struct pmagb_b_ramdac_regs {					unsigned char addr_low;					unsigned char pad0[3];					unsigned char addr_hi;					unsigned char pad1[3];					unsigned char data;					unsigned char pad2[3];					unsigned char cmap;				};								/*				 * Max 3 TURBOchannel slots -> max 3 PMAGB-B :)				 */				static struct fb_info pmagbb_fb_info[3];								static struct fb_var_screeninfo pmagbbfb_defined = {					.xres 		= 1280,					.yres 		= 1024,					.xres_virtual 	= 1280,					.yres_virtual 	= 1024,					.bits_per_pixel = 8,					.red.length	= 8,					.green.length	= 8,					.blue.length	= 8,					.activate 	= FB_ACTIVATE_NOW,					.height 	= 274,					.width 		= 195,					.accel_flags 	= FB_ACCEL_NONE,					.vmode 		= FB_VMODE_NONINTERLACED,				};								static struct fb_fix_screeninfo pmagbafb_fix = {					.id 		= "PMAGB-BA",					.smem_len 	= (1280 * 1024),					.type 		= FB_TYPE_PACKED_PIXELS,					.visual 	= FB_VISUAL_PSEUDOCOLOR,					.line_length 	= 1280,				}								/*				 * Turn hardware cursor off				 */				void pmagbbfb_erase_cursor(struct pmagb_b_ramdac_regs *bt459_regs)				{					bt459_regs->addr_low = 0;					bt459_regs->addr_hi = 3;					bt459_regs->data = 0;				}								/*				 * Set the palette. 				 */				static int pmagbbfb_setcolreg(unsigned regno, unsigned red, unsigned green,				                              unsigned blue, unsigned transp,				                              struct fb_info *info)				{					struct pmagb_b_ramdac_regs *bt459_regs = (struct pmagb_b_ramdac_regs *) info->par;										if (regno >= info->cmap.len)						return 1;									red   >>= 8;	/* The cmap fields are 16 bits    */					green >>= 8;	/* wide, but the harware colormap */					blue  >>= 8;	/* registers are only 8 bits wide */									bt459_regs->addr_low = (__u8) regno;					bt459_regs->addr_hi = 0;					bt459_regs->cmap = red;					bt459_regs->cmap = green;					bt459_regs->cmap = blue;					return 0;				}								static struct fb_ops pmagbbfb_ops = {					.owner		= THIS_MODULE,					.fb_setcolreg	= pmagbbfb_setcolreg,					.fb_fillrect	= cfb_fillrect,					.fb_copyarea	= cfb_copyarea,					.fb_imageblit	= cfb_imageblit,					.fb_cursor	= soft_cursor,				};								int __init pmagbbfb_init_one(int slot)				{					unsigned long base_addr = get_tc_base_addr(slot);					struct fb_info *info = &pmagbb_fb_info[slot];									printk("PMAGB-BA framebuffer in slot %d\n", slot);					/*					 * Framebuffer display memory base address and friends					 */					pmagbbfb_fix.smem_start = base_addr + PMAGB_B_ONBOARD_FBMEM_OFFSET;					info->par = (base_addr + PMAGB_B_BT459_OFFSET); 										/*					 * Configure the Bt459 RAM DAC					 */					pmagbbfb_erase_cursor((struct pmagb_b_ramdac_regs *) info->par);									/*					 *      Let there be consoles..					 */					info->fbops = &pmagbbfb_ops;					info->var = pmagbbfb_defined;					info->fix = pmagbbfb_fix;					info->screen_base = pmagbbfb_fix.smem_start; 					info->flags = FBINFO_DEFAULT;									fb_alloc_cmap(&fb_info.cmap, 256, 0);									if (register_framebuffer(info) < 0)						return 1;					return 0;				}								/* 				 * Initialise the framebuffer				 */								int __init pmagbbfb_init(void)				{					int sid;					int found = 0;									if (fb_get_options("pmagbbfb", NULL))						return -ENODEV;									if (TURBOCHANNEL) {						while ((sid = search_tc_card("PMAGB-BA")) >= 0) {							found = 1;							claim_tc_card(sid);							pmagbbfb_init_one(sid);						}						return found ? 0 : -ENODEV;					} else {						return -ENODEV;					}				}								module_init(pmagbbfb_init);				MODULE_LICENSE("GPL");							

相关资源