+out:
+
+ return count;
+}
+
+static ssize_t show_dsp_buffer(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ ssize_t size;
+
+ size = snprintf(buf, PAGE_SIZE,
+ "you can display a picture store in "
+ "/data/fb0.bin use the following cmd:\n"
+ "echo n xsize ysize format > dsp_buf\n"
+ "n: picture number"
+ "xsize: picture horizontal size\n"
+ "ysize: picture vertical size\n"
+ "format:\n"
+ " RGBA=1,RGBX=2,RGB=3,YUV420SP=17");
+
+ return size;
+}
+extern int __close_fd(struct files_struct *files, unsigned fd);
+
+static ssize_t set_dsp_buffer(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+{
+ struct fb_info *fbi = dev_get_drvdata(dev);
+ struct rk_fb_par *fb_par = (struct rk_fb_par *)fbi->par;
+ struct rk_lcdc_driver *dev_drv = fb_par->lcdc_drv;
+ struct rk_fb *rk_fb = dev_get_drvdata(fbi->device);
+ struct file *filp;
+ mm_segment_t old_fs;
+ int width, height, frame_num;
+ int i, j, flags, fd;
+ const char *start = buf;
+ struct ion_handle *handle = NULL;
+ char __iomem *screen_base;
+ struct rk_fb_win_cfg_data win_config;
+ struct rk_screen *screen = dev_drv->cur_screen;
+ int space_max = 10;
+ int format;
+ size_t mem_size = 0;
+ char *name = "/data/fb0.bin";
+ struct sync_fence *acq_fence;
+ struct files_struct *files = current->files;
+
+ frame_num = simple_strtoul(start, NULL, 10);
+ do {
+ start++;
+ space_max--;
+ } while ((*start != ' ') && space_max);
+ start++;
+ width = simple_strtoul(start, NULL, 10);
+ do {
+ start++;
+ space_max--;
+ } while ((*start != ' ') && space_max);
+ start++;
+ height = simple_strtoul(start, NULL, 10);
+
+ do {
+ start++;
+ space_max--;
+ } while ((*start != ' ') && space_max);
+ start++;
+ format = simple_strtoul(start, NULL, 10);
+
+ pr_info("frame_num=%d,w=%d,h=%d,file=%s,format=%d\n",
+ frame_num, width, height, name, format);
+ flags = O_RDWR | O_CREAT | O_NONBLOCK;
+ filp = filp_open(name, flags, 0x600);
+ if (!filp)
+ pr_err("fail to create %s\n", name);