Пример #1
0
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;
}
Пример #2
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;

}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
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;
}
Пример #6
0
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");
}
Пример #7
0
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;
}
Пример #8
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;
}
Пример #9
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));
    }
}
Пример #10
0
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);
    }
}
Пример #11
0
//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;
}
Пример #12
0
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;

}
Пример #13
0
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;
}
Пример #14
0
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
}
Пример #15
0
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
}
Пример #16
0
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
}
Пример #17
0
int servicer_open(struct inode *inode, struct file *filp)
{
    lidbg ("servicer_open\n");
    return 0;
}
Пример #18
0
/*Ä£¿éжÔغ¯Êý*/
void msm8x25_exit(void)
{
    lidbg("msm8x25_exit\n");

}
Пример #19
0
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

}
Пример #20
0
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]);
    	}
    }
    */

}
Пример #21
0
static void __exit servicer_exit(void)
{
    misc_deregister(&misc);
    lidbg (DEVICE_NAME"servicer  dev_exit\n");
}
Пример #22
0
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;
}
Пример #23
0
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
}