From: yxj Date: Sat, 11 Aug 2012 02:42:50 +0000 (+0800) Subject: rkfb:add display lut set/read interface X-Git-Tag: firefly_0821_release~8811 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=05f27ee4512796c790c4ac96e304f083d7608c02;p=firefly-linux-kernel-4.4.55.git rkfb:add display lut set/read interface --- diff --git a/drivers/video/rockchip/rk_fb.c b/drivers/video/rockchip/rk_fb.c index 66dd7845a16a..dfea2ef440f7 100644 --- a/drivers/video/rockchip/rk_fb.c +++ b/drivers/video/rockchip/rk_fb.c @@ -872,8 +872,14 @@ static int init_lcdc_device_driver(struct rk_lcdc_device_driver *dev_drv, dev_drv->get_disp_info = def_drv->get_disp_info; dev_drv->ovl_mgr = def_drv->ovl_mgr; dev_drv->fps_mgr = def_drv->fps_mgr; - dev_drv->fb_get_layer = def_drv->fb_get_layer; - dev_drv->fb_layer_remap = def_drv->fb_layer_remap; + if(def_drv->fb_get_layer) + dev_drv->fb_get_layer = def_drv->fb_get_layer; + if(def_drv->fb_layer_remap) + dev_drv->fb_layer_remap = def_drv->fb_layer_remap; + if(def_drv->set_dsp_lut) + dev_drv->set_dsp_lut = def_drv->set_dsp_lut; + if(def_drv->read_dsp_lut) + dev_drv->read_dsp_lut = def_drv->read_dsp_lut; init_layer_par(dev_drv); init_completion(&dev_drv->frame_done); spin_lock_init(&dev_drv->cpl_lock); diff --git a/drivers/video/rockchip/rkfb_sysfs.c b/drivers/video/rockchip/rkfb_sysfs.c index 92309a3ef7e7..b0588c6e7b5e 100644 --- a/drivers/video/rockchip/rkfb_sysfs.c +++ b/drivers/video/rockchip/rkfb_sysfs.c @@ -237,6 +237,50 @@ static ssize_t set_fb_win_map(struct device *dev,struct device_attribute *attr, } +static ssize_t show_dsp_lut(struct device *dev, + struct device_attribute *attr, char *buf) +{ + +} +static ssize_t set_dsp_lut(struct device *dev,struct device_attribute *attr, + const char *buf, size_t count) +{ + int dsp_lut[256]; + char *start = buf; + int i=256,temp; + int space_max = 10; + + struct fb_info *fbi = dev_get_drvdata(dev); + struct rk_lcdc_device_driver * dev_drv = + (struct rk_lcdc_device_driver * )fbi->par; + + for(i=0;i<256;i++) + { + temp = i; + dsp_lut[i] = temp + (temp<<8) + (temp<<16); //init by default value + } + printk("%s\n",start); + for(i=0;i<256;i++) + { + temp = simple_strtoul(start,NULL,10); + do + { + start++; + space_max--; + }while ((*start != ' ')&&space_max); + + if(!space_max) + break; + else + start++; + } + + dev_drv->set_dsp_lut(dev_drv,dsp_lut); + + return count; + +} + static struct device_attribute rkfb_attrs[] = { __ATTR(phys_addr, S_IRUGO, show_phys, NULL), __ATTR(virt_addr, S_IRUGO, show_virt, NULL), @@ -246,6 +290,7 @@ static struct device_attribute rkfb_attrs[] = { __ATTR(overlay, S_IRUGO | S_IWUSR, show_overlay, set_overlay), __ATTR(fps, S_IRUGO | S_IWUSR, show_fps, set_fps), __ATTR(map, S_IRUGO | S_IWUSR, show_fb_win_map, set_fb_win_map), + __ATTR(dsp_lut, S_IRUGO | S_IWUSR, show_dsp_lut, set_dsp_lut), }; int rkfb_create_sysfs(struct fb_info *fbi) diff --git a/include/linux/rk_fb.h b/include/linux/rk_fb.h index e4e2db3e4429..b68134e1aaad 100644 --- a/include/linux/rk_fb.h +++ b/include/linux/rk_fb.h @@ -232,6 +232,8 @@ struct rk_lcdc_device_driver{ int (*fps_mgr)(struct rk_lcdc_device_driver *dev_drv,int fps,bool set); int (*fb_get_layer)(struct rk_lcdc_device_driver *dev_drv,const char *id); //find layer for fb int (*fb_layer_remap)(struct rk_lcdc_device_driver *dev_drv,enum fb_win_map_order order); + int (*set_dsp_lut)(struct rk_lcdc_device_driver *dev_drv,int *lut); + int (*read_dsp_lut)(struct rk_lcdc_device_driver *dev_drv,int *lut); };