int bp_msg_init(void) { int err; DUMP_FUN; #if 0//def FLY_DEBUG lidbg("debug:bp_msg_init do nothing"); #else printk("\n[futengfei] =bp_msg_init=IN===============================\n"); smem_log_temp = (smem_log_deep *)smem_alloc(SMEM_ID_VENDOR1, sizeof(smem_log_deep)); if(smem_log_temp == NULL) { lidbg("smem_alloc fail!\n"); return 0; } bp_msg_task = kthread_create(thread_bp_msg, NULL, "bp_msg_task"); if(IS_ERR(bp_msg_task)) { lidbg("Unable to start kernel thread.bp_msg_task\n"); } else wake_up_process(bp_msg_task); printk("[futengfei] =bp_msg_init=OUT===============================\n"); #endif return 0; }
int soc_get_screen_res(u32 *screen_x, u32 *screen_y) { int fbidx; struct fb_var_screeninfo fb_varinfo; fb_varinfo.xres = 0; fb_varinfo.yres = 0; lidbg("num_registered_fb = %d \n", num_registered_fb); for(fbidx = 0; fbidx < num_registered_fb; fbidx++) { struct fb_info *info = registered_fb[fbidx]; memcpy(&fb_varinfo, &(info->var), sizeof(fb_varinfo)); lidbg("xres=%d\n", fb_varinfo.xres); lidbg("yres=%d\n", fb_varinfo.yres); lidbg("\n"); } if((fb_varinfo.xres == 0) || (fb_varinfo.yres == 0)) { lidbg("soc_get_screen_res fail!!\n"); return 0; } else { *screen_x = fb_varinfo.xres; *screen_y = fb_varinfo.yres; } return 1; }
static int __init servicer_init(void) { int ret; //下面的代码可以自动生成设备节点,但是该节点在/dev目录下,而不在/dev/misc目录下 //其实misc_register就是用主设备号10调用register_chrdev()的 misc设备其实也就是特殊的字符设备。 //注册驱动程序时采用misc_register函数注册,此函数中会自动创建设备节点,即设备文件。无需mknod指令创建设备文件。因为misc_register()会调用class_device_create()或者device_create()。 ret = misc_register(&misc); lidbg (DEVICE_NAME"servicer_init\n"); //DECLARE_KFIFO(cmd_fifo); //INIT_KFIFO(cmd_fifo); lidbg ("kfifo_init,FIFO_SIZE=%d\n", FIFO_SIZE); kfifo_init(&k2u_fifo, k2u_fifo_buffer, FIFO_SIZE); kfifo_init(&u2k_fifo, u2k_fifo_buffer, FIFO_SIZE); spin_lock_init(&fifo_k2u_lock); CREATE_KTHREAD(thread_u2k, NULL); lidbg_chmod("/dev/lidbg_servicer"); LIDBG_MODULE_LOG; return ret; }
int i2c_io_config(unsigned int index, unsigned int direction, unsigned int pull, unsigned int drive_strength, unsigned int flag) { int rc; int err; mutex_init(&io_i2c_lock); if(flag == 1) { /* if (gpio_is_valid(index)) { gpio_free(index); lidbg("gpio_free(%d);\n",index); } */ err = gpio_request(index, "video_io"); lidbg("gpio_request(%d)\n ", index); if (err) { lidbg("\n\nerr: gpio request failed!!!!!!\n\n\n"); goto gpio_request_failed; } rc = gpio_tlmm_config(GPIO_CFG(index, 0, direction, pull, drive_strength), GPIO_CFG_ENABLE); if (rc) { lidbg("%s: gpio_tlmm_config for %d failed\n", __func__, index); return 0; } } if(direction == GPIO_CFG_INPUT) { err = gpio_direction_input(index); } else { err = gpio_direction_output(index, 1); } if (err) { lidbg("gpio_direction_set failed\n"); goto free_gpio; } return 1; free_gpio: //if (gpio_is_valid(index)) // gpio_free(index); return 0; gpio_request_failed: return 0; }
ssize_t servicer_read(struct file *filp, char __user *buffer, size_t size, loff_t *offset) { int cmd ; cmd = k2u_read(); lidbg("servicer_read:cmd = %d\n", cmd); if (copy_to_user(buffer, &cmd, 4)) { lidbg("copy_to_user ERR\n"); } return size; }
void i2c_io_config_init(void) { #ifndef FLY_VIDEO_BOARD_V3 i2c_io_config(GPIO_I2C_SDA, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA, 1); i2c_io_config(GPIO_I2C_SCL, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA, 1); #endif i2c_io_config(TW9912_RESET, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA, 1); //tw9912 reset//43 i2c_io_config(TC358746XBG_RESET, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_UP, GPIO_CFG_16MA, 1); // tc358746 reset lidbg("first init GPIO_I2C_SDA and GPIO_I2C_SCL\n"); }
int thread_u2k(void *data) { while(1) { set_current_state(TASK_UNINTERRUPTIBLE); if(kthread_should_stop()) break; wait_for_completion(&u2k_com); lidbg ("wait_for_completion ok\n"); } return 0; }
int msm8x25_init(void) { DUMP_BUILD_TIME;//LIDBG_MODULE_LOG; lidbg( "smem_alloc id = %d\n", SMEM_ID_VENDOR0); p_fly_smem = (struct fly_smem *)smem_alloc(SMEM_ID_VENDOR0, sizeof(struct fly_smem)); if (p_fly_smem == NULL) { lidbg( "smem_alloc fail,kmalloc mem!\n"); p_fly_smem = (struct fly_smem *)kmalloc(sizeof(struct fly_smem), GFP_KERNEL); if(p_fly_smem == NULL) { LIDBG_ERR("<err.register_wakelock:kzalloc.name>\n"); } memset(p_fly_smem, 0, sizeof(struct fly_smem)); } soc_bl_init(); soc_io_init(); soc_ad_init(); return 0; }
void lidbg_soc_main(int argc, char **argv) { if(argc < 1) { lidbg("Usage:\n"); lidbg("bl value\n"); return; } if(!strcmp(argv[0], "bl")) { u32 bl; bl = simple_strtoul(argv[1], 0, 0); soc_bl_set(bl); } if(!strcmp(argv[0], "ad")) { u32 ch; ch = simple_strtoul(argv[1], 0, 0); lidbg("ch%d = %x\n", ch, soc_ad_read(ch)); } }
void k2u_write(int cmd) { if(cmd != SERVICER_DONOTHING) { lidbg ("k2u_write=%d\n", cmd); spin_lock_irqsave(&fifo_k2u_lock, flags_k2u); kfifo_in(&k2u_fifo, &cmd, sizeof(int)); spin_unlock_irqrestore(&fifo_k2u_lock, flags_k2u); wake_up(&k2u_wait); if (fasync_queue) kill_fasync(&fasync_queue, SIGIO, POLL_IN); } }
//u2k_write ssize_t servicer_write(struct file *filp, const char __user *buffer, size_t size, loff_t *offset) { int cmd ; if (copy_from_user( &cmd, buffer, 4)) { lidbg("copy_from_user ERR\n"); } spin_lock_irqsave(&fifo_k2u_lock, flags_k2u); kfifo_in(&u2k_fifo, &cmd, sizeof(int)); spin_unlock_irqrestore(&fifo_k2u_lock, flags_k2u); complete(&u2k_com); return size; }
bool display_get_screen_info(u32 layer_num, struct fb_fix_screeninfo *pfb_fixinfo, struct fb_var_screeninfo *pfb_varinfo) { struct file *file = NULL; char *fbdev = NULL; ssize_t result; mm_segment_t old_fs; struct fb_fix_screeninfo fb_fixinfo; struct fb_var_screeninfo fb_varinfo; lidbg("display_get_screen_info+.\n"); switch (layer_num) { case 0: fbdev = "/dev/graphics/fb0"; break; case 1: fbdev = "/dev/graphics/fb1"; break; case 2: fbdev = "/dev/graphics/fb2"; break; case 3: fbdev = "/dev/graphics/fb3"; break; case 4: fbdev = "/dev/graphics/fb4"; break; case 5: fbdev = "/dev/graphics/fb5"; break; default: return 0; } lidbg("open %s\n", fbdev); file = filp_open(fbdev, O_RDWR, 0); if(IS_ERR(file)) { lidbg("open FrameBuffer device failed.\n"); return 0; } lidbg("open FrameBuffer device successfully!\n"); BEGIN_KMEM; result = file->f_op->ioctl(file->f_dentry->d_inode, file, FBIOGET_FSCREENINFO, (long unsigned int)&fb_fixinfo); result = file->f_op->ioctl(file->f_dentry->d_inode, file, FBIOGET_VSCREENINFO, (long unsigned int)&fb_varinfo); END_KMEM; filp_close(file, 0); lidbg("\nioctl FBIOGET_FSCREENINFO ok\n"); lidbg("id=%s\n", fb_fixinfo.id); lidbg("smem_start=%#x\n", (unsigned int)fb_fixinfo.smem_start); lidbg("mem_len=%d\n", fb_fixinfo.smem_len); lidbg("type=%d\n", fb_fixinfo.type); lidbg("type_aux=%d\n", fb_fixinfo.type_aux); lidbg("visual=%d\n", fb_fixinfo.visual); lidbg("xpanstep=%d\n", fb_fixinfo.xpanstep); lidbg("ypanstep=%d\n", fb_fixinfo.ypanstep); lidbg("ywrapstep=%d\n", fb_fixinfo.ywrapstep); lidbg("line_length=%d\n", fb_fixinfo.line_length); lidbg("mmio_start=%#x\n", (unsigned int)fb_fixinfo.mmio_start); lidbg("mmio_len=%#x\n", fb_fixinfo.mmio_len); lidbg("accel=%d\n", fb_fixinfo.accel); lidbg("reserved[0]=%d\n", fb_fixinfo.reserved[0]); lidbg("reserved[1]=%d\n", fb_fixinfo.reserved[1]); lidbg("reserved[2]=%d\n", fb_fixinfo.reserved[2]); lidbg("\nioctl FBIOGET_VSCREENINFO ok\n"); lidbg("xres=%d\n", fb_varinfo.xres); lidbg("yres=%d\n", fb_varinfo.yres); lidbg("xres_virtual=%d\n", fb_varinfo.xres_virtual); lidbg("yres_virtual=%d\n", fb_varinfo.yres_virtual); lidbg("xoffset=%d\n", fb_varinfo.xoffset); lidbg("yoffset=%d\n", fb_varinfo.yoffset); lidbg("bits_per_pixel=%d\n", fb_varinfo.bits_per_pixel); lidbg("grayscale=%d\n", fb_varinfo.grayscale); lidbg("red=%#x\n", fb_varinfo.red); lidbg("green=%#x\n", fb_varinfo.green); lidbg("blue=%#x\n", fb_varinfo.blue); lidbg("transp=%d\n", fb_varinfo.transp); lidbg("nonstd=%d\n", fb_varinfo.nonstd); lidbg("activate=%d\n", fb_varinfo.activate); lidbg("height=%d\n", fb_varinfo.height); lidbg("width=%d\n", fb_varinfo.width); lidbg("accel_flags=%d\n", fb_varinfo.accel_flags); lidbg("pixclock=%d\n", fb_varinfo.pixclock); lidbg("left_margin=%d\n", fb_varinfo.left_margin); lidbg("right_margin=%d\n", fb_varinfo.right_margin); lidbg("upper_margin=%d\n", fb_varinfo.upper_margin); lidbg("lower_margin=%d\n", fb_varinfo.lower_margin); lidbg("hsync_len=%d\n", fb_varinfo.hsync_len); lidbg("vsync_len=%d\n", fb_varinfo.vsync_len); lidbg("sync=%d\n", fb_varinfo.sync); lidbg("vmode=%d\n", fb_varinfo.vmode); lidbg("rotate=%d\n", fb_varinfo.rotate); lidbg("reserved[0]=%d\n", fb_varinfo.reserved[0]); lidbg("reserved[1]=%d\n", fb_varinfo.reserved[1]); lidbg("reserved[2]=%d\n", fb_varinfo.reserved[2]); lidbg("reserved[3]=%d\n", fb_varinfo.reserved[3]); lidbg("reserved[4]=%d\n", fb_varinfo.reserved[4]); memcpy(pfb_fixinfo, &fb_fixinfo, sizeof(fb_fixinfo)); memcpy(pfb_varinfo, &fb_varinfo, sizeof(fb_varinfo)); lidbg("display_get_screen_info-.\n"); return 1; }
bool display_init_fbi(void) { #if 0 struct fb_fix_screeninfo fb_fixinfo; struct fb_var_screeninfo fb_varinfo; int fbidx; lidbg("display_init_fbi +\n"); lidbg("\num_registered_fb = %d \n", num_registered_fb); for(fbidx = 0; fbidx < num_registered_fb; fbidx++) { struct fb_info *info = registered_fb[fbidx]; memcpy(&fb_fixinfo, &(info->fix), sizeof(fb_fixinfo)); memcpy(&fb_varinfo, &(info->var), sizeof(fb_varinfo)); lidbg("\nfbi_num = %d \n", fbidx); lidbg("id=%s\n", fb_fixinfo.id); lidbg("smem_start=%#x\n", (unsigned int)fb_fixinfo.smem_start); lidbg("mem_len=%d\n", fb_fixinfo.smem_len); lidbg("type=%d\n", fb_fixinfo.type); lidbg("type_aux=%d\n", fb_fixinfo.type_aux); lidbg("visual=%d\n", fb_fixinfo.visual); lidbg("xpanstep=%d\n", fb_fixinfo.xpanstep); lidbg("ypanstep=%d\n", fb_fixinfo.ypanstep); lidbg("ywrapstep=%d\n", fb_fixinfo.ywrapstep); lidbg("line_length=%d\n", fb_fixinfo.line_length); lidbg("mmio_start=%#x\n", (unsigned int)fb_fixinfo.mmio_start); lidbg("mmio_len=%#x\n", fb_fixinfo.mmio_len); lidbg("accel=%d\n", fb_fixinfo.accel); lidbg("reserved[0]=%d\n", fb_fixinfo.reserved[0]); lidbg("reserved[1]=%d\n", fb_fixinfo.reserved[1]); lidbg("reserved[2]=%d\n", fb_fixinfo.reserved[2]); lidbg("\nioctl FBIOGET_VSCREENINFO ok\n"); lidbg("xres=%d\n", fb_varinfo.xres); lidbg("yres=%d\n", fb_varinfo.yres); lidbg("xres_virtual=%d\n", fb_varinfo.xres_virtual); lidbg("yres_virtual=%d\n", fb_varinfo.yres_virtual); lidbg("xoffset=%d\n", fb_varinfo.xoffset); lidbg("yoffset=%d\n", fb_varinfo.yoffset); lidbg("bits_per_pixel=%d\n", fb_varinfo.bits_per_pixel); lidbg("grayscale=%d\n", fb_varinfo.grayscale); lidbg("red=%#x\n", fb_varinfo.red); lidbg("green=%#x\n", fb_varinfo.green); lidbg("blue=%#x\n", fb_varinfo.blue); lidbg("transp=%d\n", fb_varinfo.transp); lidbg("nonstd=%d\n", fb_varinfo.nonstd); lidbg("activate=%d\n", fb_varinfo.activate); lidbg("height=%d\n", fb_varinfo.height); lidbg("width=%d\n", fb_varinfo.width); lidbg("accel_flags=%d\n", fb_varinfo.accel_flags); lidbg("pixclock=%d\n", fb_varinfo.pixclock); lidbg("left_margin=%d\n", fb_varinfo.left_margin); lidbg("right_margin=%d\n", fb_varinfo.right_margin); lidbg("upper_margin=%d\n", fb_varinfo.upper_margin); lidbg("lower_margin=%d\n", fb_varinfo.lower_margin); lidbg("hsync_len=%d\n", fb_varinfo.hsync_len); lidbg("vsync_len=%d\n", fb_varinfo.vsync_len); lidbg("sync=%d\n", fb_varinfo.sync); lidbg("vmode=%d\n", fb_varinfo.vmode); lidbg("rotate=%d\n", fb_varinfo.rotate); lidbg("reserved[0]=%d\n", fb_varinfo.reserved[0]); lidbg("reserved[1]=%d\n", fb_varinfo.reserved[1]); lidbg("reserved[2]=%d\n", fb_varinfo.reserved[2]); lidbg("reserved[3]=%d\n", fb_varinfo.reserved[3]); lidbg("reserved[4]=%d\n", fb_varinfo.reserved[4]); lidbg("\n\n"); } lidbg("display_init_fbi-.\n"); #endif return 1; }
i2c_ack i2c_read_2byte(int bus_id, char chip_addr, unsigned int sub_addr, char *buf, unsigned int size) { #ifdef FLY_VIDEO_BOARD_V3 int ret_rec = 0; ret_rec = SOC_I2C_Rec_2B_SubAddr(3, TC358746_I2C_ChipAdd, sub_addr, buf, size); //lidbg("\n************i2c_read_2byte ret_rec=%d *****************\n",ret_rec); if(ret_rec > 0) { return ACK; } else { return NACK; } #else u8 i; mutex_lock(&io_i2c_lock); i2c_init(); // start transmite i2c_begin();//msg 0>> i2c_write_chip_addr(chip_addr, hkj_WRITE) ; if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK------i2c_write_chip_addr----r--\r\n"); mutex_unlock(&io_i2c_lock); return NACK; } //i2c_stop(); // restart transmite // send message to mm_i2c device to transmite data i2c_write(sub_addr >> 8) ; if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK-----subadder1-------\r\n"); mutex_unlock(&io_i2c_lock); return NACK; } i2c_write(sub_addr) ; if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK------subadder0------\r\n"); mutex_unlock(&io_i2c_lock); return NACK; } i2c_stop();//msg 0<< // start transmite i2c_begin();//msg 1>> i2c_write_chip_addr(chip_addr, hkj_READ) ; if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK----- i2c_write_chip_addr-------\r\n"); mutex_unlock(&io_i2c_lock); return NACK; } // transmite data for(i = 0; i < size; i++) { buf[i] = i2c_read(); ( i == (size - 1) ) ? i2c_write_ask(NACK) : i2c_write_ask(ACK); } // stop transmite i2c_stop();//msg 1<< i2c_free(); mutex_unlock(&io_i2c_lock); return ACK; #endif }
i2c_ack i2c_write_byte(int bus_id, char chip_addr, char *buf, unsigned int size) { #ifdef FLY_VIDEO_BOARD_V3 int ret_send = 0; ret_send = SOC_I2C_Send(3, chip_addr, buf, size); // lidbg("\n************i2c_write_byte =%d*******\n",ret_send); if(ret_send > 0) { #ifdef DEBUG_ACK return NACK; #else return ACK; #endif } else { return NACK; } #else u8 i; mutex_lock(&io_i2c_lock); //lidbg("i2c:write byte:addr =0x%.2x value=0x%.2x ",buf[0],buf[1]); i2c_init(); // start transmite i2c_begin(); i2c_write_chip_addr(chip_addr, hkj_WRITE) ; if (i2c_read_ack() == NACK) { i2c_stop(); i2c_free(); lidbg(" at write funtion: i2c_write_chip_addr(%.2x, %d) ; is not ACK\n", chip_addr, hkj_WRITE); mutex_unlock(&io_i2c_lock); return NACK; } //i2c_stop(); // restart transmite //i2c_begin(); // send message to mm_i2c device to transmite data i2c_write(buf[0]) ; if (i2c_read_ack() == NACK) { i2c_stop(); i2c_free(); lidbg(" at write funtion:i2c_write(%.2x) ;is not ACK\n", buf[0]); mutex_unlock(&io_i2c_lock); return NACK; } // transmite data for(i = 1; i < size; i++) { i2c_write(buf[i]); if( i2c_read_ack() == NACK) { i2c_stop(); i2c_free(); lidbg(" at write funtion:i2c_write(%.2x) ;is not ACK\n", buf[i]); mutex_unlock(&io_i2c_lock); return NACK; } } // stop transmite i2c_stop(); i2c_free(); mutex_unlock(&io_i2c_lock); return ACK; #endif }
i2c_ack i2c_read_byte(int bus_id, char chip_addr, unsigned int sub_addr, char *buf, unsigned int size) { #ifdef FLY_VIDEO_BOARD_V3 int ret = 0; //ret=i2c_api_do_recv(3,chip_addr, sub_addr , buf, size); ret = SOC_I2C_Rec(3, chip_addr, sub_addr , buf, size); //lidbg("\n************ i2c_read_byte =%d*******\n",ret); //if(ret==size){ if(ret > 0) { #ifdef DEBUG_ACK return NACK; #else return ACK; #endif } else { return NACK; } #else u8 i; mutex_lock(&io_i2c_lock); i2c_init(); // start transmite i2c_begin(); i2c_write_chip_addr(chip_addr, hkj_WRITE) ; if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg("at read funtion :i2c_write_chip_addr(%.2x, %d) ; is not ACK\n", chip_addr, hkj_WRITE); mutex_unlock(&io_i2c_lock); return NACK; } //i2c_stop(); // restart transmite //i2c_begin(); // send message to mm_i2c device to transmite data i2c_write(sub_addr) ; if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg("at read funtion :i2c_write (%.2x) is not ACK\n", sub_addr & 0xff); mutex_unlock(&io_i2c_lock); return NACK; } i2c_stop(); // start transmite i2c_begin(); i2c_write_chip_addr(chip_addr, hkj_READ) ; if (i2c_read_ack() == NACK) { i2c_stop(); i2c_free(); lidbg("at read funtion :i2c_write_chip_addr(%.2x, %d) ; is not ACK\n", sub_addr, hkj_READ); mutex_unlock(&io_i2c_lock); return NACK; } // transmite data for(i = 0; i < size; i++) { buf[i] = i2c_read(); ( i == (size - 1) ) ? i2c_write_ask(NACK) : i2c_write_ask(ACK); } // stop transmite i2c_stop(); i2c_free(); mutex_unlock(&io_i2c_lock); return ACK; #endif }
int servicer_open(struct inode *inode, struct file *filp) { lidbg ("servicer_open\n"); return 0; }
/*Ä£¿éжÔغ¯Êý*/ void msm8x25_exit(void) { lidbg("msm8x25_exit\n"); }
void color_degree(struct fb_fix_screeninfo *pfb_fixinfo, struct fb_var_screeninfo *pfb_varinfo) { #if 0 u32 lcd_phy_buffer; u32 *plcd_vir_buffer; RGB_OUTPUT_TYPE rgb_type; u32 R_value, G_value, B_value, i, j; u8 *p1; u8 *p2; u32 DEGREE, PIX_DEGREE, LCD_WIDTH, LCD_HEIGHT, LINE_BYTE_FULL, RGBBYTE, PER_COLOR_HEIGHT; char *uiLCDBufferAddress; lidbg(" ColorDegree+\n"); if((pfb_fixinfo->smem_start == 0) || (pfb_fixinfo->smem_len == 0)) return; lcd_phy_buffer = pfb_fixinfo->smem_start; plcd_vir_buffer = ioremap(lcd_phy_buffer, pfb_varinfo->xres * pfb_varinfo->yres * pfb_varinfo->bits_per_pixel); uiLCDBufferAddress = (char *)(plcd_vir_buffer); lidbg("lcd_phy_buffer:0x%x\n", lcd_phy_buffer); lidbg("lcd_vir_buffer:0x%x\n", (u32)plcd_vir_buffer); LCD_WIDTH = pfb_varinfo->xres; LCD_HEIGHT = pfb_varinfo->yres; PER_COLOR_HEIGHT = (LCD_HEIGHT / 4); lidbg( "LCD_WIDTH %d\n", LCD_WIDTH); lidbg("LCD_HEIGHT %d\n", LCD_HEIGHT); rgb_type = (pfb_varinfo->bits_per_pixel) / 8; if(rgb_type == RGB565) { typedef u16 PIX_BYTE; RGBBYTE = 2; DEGREE = 32; PIX_DEGREE = (LCD_WIDTH / DEGREE); LINE_BYTE_FULL = (LCD_WIDTH * RGBBYTE); lidbg (" RGB565\n"); #if 1 //R R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB555(R_value, G_value, B_value); } R_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress); for(j = 0; j < 120; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } #if 1 //G R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + LCD_WIDTH * (PER_COLOR_HEIGHT) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB555(R_value, G_value, B_value); } G_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress) + LINE_BYTE_FULL * (PER_COLOR_HEIGHT); for(j = 0; j < PER_COLOR_HEIGHT; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } //B R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + LCD_WIDTH * (PER_COLOR_HEIGHT * 2) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB555(R_value, G_value, B_value); } B_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress) + LINE_BYTE_FULL * (PER_COLOR_HEIGHT * 2); for(j = 0; j < PER_COLOR_HEIGHT; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } #if 1 //BGB 灰阶 R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + LCD_WIDTH * (PER_COLOR_HEIGHT * 3) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB555(R_value, G_value, B_value); } R_value ++; G_value ++; B_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress) + LINE_BYTE_FULL * (PER_COLOR_HEIGHT * 3); for(j = 0; j < PER_COLOR_HEIGHT; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } #endif #endif #endif } else if(rgb_type == RGB888) { typedef u32 PIX_BYTE; RGBBYTE = 4; DEGREE = 256; PIX_DEGREE = (LCD_WIDTH / DEGREE); LINE_BYTE_FULL = (LCD_WIDTH * RGBBYTE); lidbg (" RGB888\n"); #if 1 //R R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB888(R_value, G_value, B_value); } R_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress); for(j = 0; j < 120; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } #if 1 //G R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + LCD_WIDTH * (PER_COLOR_HEIGHT) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB888(R_value, G_value, B_value); } G_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress) + LINE_BYTE_FULL * (PER_COLOR_HEIGHT); for(j = 0; j < PER_COLOR_HEIGHT; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } //B R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + LCD_WIDTH * (PER_COLOR_HEIGHT * 2) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB888(R_value, G_value, B_value); } B_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress) + LINE_BYTE_FULL * (PER_COLOR_HEIGHT * 2); for(j = 0; j < PER_COLOR_HEIGHT; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } #if 1 //BGB 灰阶 R_value = G_value = B_value = 0; for(i = 0; i < DEGREE; i++) { for(j = 0; j < PIX_DEGREE; j ++) { *( (PIX_BYTE *)(uiLCDBufferAddress) + LCD_WIDTH * (PER_COLOR_HEIGHT * 3) + (i * PIX_DEGREE + j) ) = (PIX_BYTE)GET_COLOR_RGB888(R_value, G_value, B_value); } R_value ++; G_value ++; B_value ++; } p1 = p2 = (u8 *)(uiLCDBufferAddress) + LINE_BYTE_FULL * (PER_COLOR_HEIGHT * 3); for(j = 0; j < PER_COLOR_HEIGHT; j++) { p2 = p2 + LINE_BYTE_FULL; for(i = 0; i < LINE_BYTE_FULL; i++) { *(p2 + i) = *(p1 + i); } } #endif #endif #endif } iounmap(plcd_vir_buffer); lidbg(" ColorDegree-\n"); #endif }
void lidbg_display_main(int argc, char **argv) { //struct fb_fix_screeninfo fb_fixinfo; //struct fb_var_screeninfo fb_varinfo; u32 fb_id; //struct fb_info *info = registered_fb[fb_id]; // int result; if(argc < 2) { lidbg("Usage:\n"); lidbg("color_degree fb_id\n"); lidbg("get_fbi fb_id\n"); return; } display_init_fbi(); fb_id = simple_strtoul(argv[1], 0, 0); #if 0 result = display_get_screen_info(layer_num, &fb_fixinfo, &fb_varinfo); if(!result) { lidbg("display_get_fbi err!!\n"); return; } #endif #if 0 result = display_get_fbi(layer_num, &fbi); if(!result) { lidbg("display_get_fbi err!!\n"); return; } #endif if(!strcmp(argv[0], "color_degree")) { struct fb_info *info = registered_fb[fb_id]; color_degree(&(info->fix), &(info->var)); } #if 0 if(!strcmp(argv[0], "get_fbi")) { struct fb_info fbi; display_get_fbi(fb_id, &fbi); } #endif /* if(!strcmp(argv[0], "fb_set_par")) { if (registered_fb[fb_id]->fbops->fb_set_par) { registered_fb[fb_id]->fbops->fb_set_par(registered_fb[fb_id]); } } */ }
static void __exit servicer_exit(void) { misc_deregister(&misc); lidbg (DEVICE_NAME"servicer dev_exit\n"); }
bool display_init_fbi() { struct fb_info *tmp = NULL; struct file *file = NULL; char *fbdev = NULL; ssize_t result; mm_segment_t old_fs; u32 fbi_addr = 0; struct fb_fix_screeninfo fb_fixinfo; struct fb_var_screeninfo fb_varinfo; lidbg("display_init_fbi+.\n"); fbdev = "/dev/graphics/fb0"; lidbg("open %s\n", fbdev); file = filp_open(fbdev, O_RDWR, 0); if(IS_ERR(file)) { lidbg("open FrameBuffer device failed.\n"); return 0; } lidbg("open FrameBuffer device successfully!\n"); BEGIN_KMEM; result = file->f_op->ioctl(file->f_dentry->d_inode, file, GETFBIO, (long unsigned int)&fbi_addr); END_KMEM; filp_close(file, 0); lidbg("fbi_addr=0x%x\n", fbi_addr); registered_fb = (struct fb_info *)fbi_addr; tmp = registered_fb; while(tmp) { memcpy(&fb_fixinfo, &(tmp->fix), sizeof(fb_fixinfo)); memcpy(&fb_varinfo, &(tmp->var), sizeof(fb_varinfo)); lidbg("\nfbi_num = %d \n", num_registered_fb); lidbg("id=%s\n", fb_fixinfo.id); lidbg("smem_start=%#x\n", (unsigned int)fb_fixinfo.smem_start); lidbg("mem_len=%d\n", fb_fixinfo.smem_len); lidbg("type=%d\n", fb_fixinfo.type); lidbg("type_aux=%d\n", fb_fixinfo.type_aux); lidbg("visual=%d\n", fb_fixinfo.visual); lidbg("xpanstep=%d\n", fb_fixinfo.xpanstep); lidbg("ypanstep=%d\n", fb_fixinfo.ypanstep); lidbg("ywrapstep=%d\n", fb_fixinfo.ywrapstep); lidbg("line_length=%d\n", fb_fixinfo.line_length); lidbg("mmio_start=%#x\n", (unsigned int)fb_fixinfo.mmio_start); lidbg("mmio_len=%#x\n", fb_fixinfo.mmio_len); lidbg("accel=%d\n", fb_fixinfo.accel); lidbg("reserved[0]=%d\n", fb_fixinfo.reserved[0]); lidbg("reserved[1]=%d\n", fb_fixinfo.reserved[1]); lidbg("reserved[2]=%d\n", fb_fixinfo.reserved[2]); lidbg("\nioctl FBIOGET_VSCREENINFO ok\n"); lidbg("xres=%d\n", fb_varinfo.xres); lidbg("yres=%d\n", fb_varinfo.yres); lidbg("xres_virtual=%d\n", fb_varinfo.xres_virtual); lidbg("yres_virtual=%d\n", fb_varinfo.yres_virtual); lidbg("xoffset=%d\n", fb_varinfo.xoffset); lidbg("yoffset=%d\n", fb_varinfo.yoffset); lidbg("bits_per_pixel=%d\n", fb_varinfo.bits_per_pixel); lidbg("grayscale=%d\n", fb_varinfo.grayscale); lidbg("red=%#x\n", fb_varinfo.red); lidbg("green=%#x\n", fb_varinfo.green); lidbg("blue=%#x\n", fb_varinfo.blue); lidbg("transp=%d\n", fb_varinfo.transp); lidbg("nonstd=%d\n", fb_varinfo.nonstd); lidbg("activate=%d\n", fb_varinfo.activate); lidbg("height=%d\n", fb_varinfo.height); lidbg("width=%d\n", fb_varinfo.width); lidbg("accel_flags=%d\n", fb_varinfo.accel_flags); lidbg("pixclock=%d\n", fb_varinfo.pixclock); lidbg("left_margin=%d\n", fb_varinfo.left_margin); lidbg("right_margin=%d\n", fb_varinfo.right_margin); lidbg("upper_margin=%d\n", fb_varinfo.upper_margin); lidbg("lower_margin=%d\n", fb_varinfo.lower_margin); lidbg("hsync_len=%d\n", fb_varinfo.hsync_len); lidbg("vsync_len=%d\n", fb_varinfo.vsync_len); lidbg("sync=%d\n", fb_varinfo.sync); lidbg("vmode=%d\n", fb_varinfo.vmode); lidbg("rotate=%d\n", fb_varinfo.rotate); lidbg("reserved[0]=%d\n", fb_varinfo.reserved[0]); lidbg("reserved[1]=%d\n", fb_varinfo.reserved[1]); lidbg("reserved[2]=%d\n", fb_varinfo.reserved[2]); lidbg("reserved[3]=%d\n", fb_varinfo.reserved[3]); lidbg("reserved[4]=%d\n", fb_varinfo.reserved[4]); lidbg("\n\n"); num_registered_fb++; tmp++; } lidbg("display_init_fbi-.\n"); return 1; }
i2c_ack i2c_write_2byte(int bus_id, char chip_addr, char *buf, unsigned int size) { #ifdef FLY_VIDEO_BOARD_V3 int ret_send = 0; ret_send = SOC_I2C_Send(3, chip_addr, buf, size); //lidbg("\n*************i2c_write_2byt ret_send=%d**************\n",ret_send); if(ret_send > 0) { return ACK; } else { return NACK; } #else u8 i; mutex_lock(&io_i2c_lock); i2c_init(); // start transmite i2c_begin();//msg 0>> i2c_write_chip_addr(chip_addr, hkj_WRITE) ; if (i2c_read_ack() == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK--in-i2c_write_chip_addr(%.2x)----w-----\r\n", chip_addr); mutex_unlock(&io_i2c_lock); return NACK; } // send message to mm_i2c device to transmite data i2c_write(buf[0]) ;//subaddr MSB if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK--in-i2c_write(sub[%d])=%.2x-----w----\r\n", 0, buf[0]); mutex_unlock(&io_i2c_lock); return NACK; } i2c_write(buf[1]) ;//subaddr if (i2c_read_ack () == NACK) { i2c_stop(); i2c_free(); lidbg("chip_addr devices is not ACK--in-i2c_write(sub[%d])=%.2x--w", 1, buf[1]); mutex_unlock(&io_i2c_lock); return NACK; } // transmite data for(i = 2; i < size; i++) { i2c_write(buf[i]); if( i2c_read_ack() == NACK) { i2c_stop(); i2c_free(); lidbg(" chip_addr devices is not ACK--in-i2c_write(buf[%d])=%.2x--w----\r\n", (i - 2), buf[i]); mutex_unlock(&io_i2c_lock); return NACK; } } // stop transmite i2c_stop();//msg 0<< i2c_free(); mutex_unlock(&io_i2c_lock); return ACK; #endif }