xref: /OK3568_Linux_fs/kernel/drivers/gpu/drm/rockchip/ebc-dev/epdlut/epd_lut.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2020 Rockchip Electronics Co. Ltd.
4  *
5  * Author: Zorro Liu <zorro.liu@rock-chips.com>
6  */
7 
8 #include <linux/slab.h>
9 #include <linux/device.h>
10 #include <linux/cdev.h>
11 #include <linux/fs.h>
12 #include <linux/io.h>
13 #include <linux/uaccess.h>
14 #include <linux/firmware.h>
15 
16 #include "../ebc_dev.h"
17 #include "epd_lut.h"
18 
19 static int (*lut_get)(struct epd_lut_data *, enum epd_lut_type, int);
20 
epd_lut_from_mem_init(void * waveform)21 int epd_lut_from_mem_init(void *waveform)
22 {
23 	int ret = -1;
24 
25 	ret = rkf_wf_input(waveform);
26 	if (ret < 0) {
27 		printk("[lut]: failed to input RKF waveform\n");
28 	} else {
29 		printk("[lut]: RKF waveform\n");
30 		lut_get = rkf_wf_get_lut;
31 		return 0;
32 	}
33 
34 	ret = pvi_wf_input(waveform);
35 	if (ret < 0) {
36 		printk("[lut]: failed to input PVI waveform\n");
37 	} else {
38 		printk("[lut]: PVI waveform\n");
39 		lut_get = pvi_wf_get_lut;
40 		return 0;
41 	}
42 
43 	return ret;
44 }
45 
epd_lut_from_file_init(struct device * dev,void * waveform,int size)46 int epd_lut_from_file_init(struct device *dev, void *waveform, int size)
47 {
48 	const struct firmware *fw;
49 	int ret;
50 
51 	ret = request_firmware_into_buf(&fw, "waveform.bin", dev, waveform, size);
52 	if (ret) {
53 		dev_err(dev, "failed to load waveform firmware: %d\n", ret);
54 		return ret;
55 	}
56 
57 	return epd_lut_from_mem_init(waveform);
58 }
59 
epd_lut_get_wf_version(void)60 const char *epd_lut_get_wf_version(void)
61 {
62 	if (rkf_wf_get_version())
63 		return rkf_wf_get_version();
64 	if (pvi_wf_get_version())
65 		return pvi_wf_get_version();
66 	return NULL;
67 }
68 
epd_lut_get(struct epd_lut_data * output,enum epd_lut_type lut_type,int temperture)69 int epd_lut_get(struct epd_lut_data *output, enum epd_lut_type lut_type, int temperture)
70 {
71 	return lut_get(output, lut_type, temperture);
72 }
73