1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Profpatsch <mail@profpatsch.de>
Subject: [PATCH 18/21] disp: no JD9930 fallback

disp falls back to a second e-ink PMIC, the JD9930, wherever the
SY7636 (or TPS65185) driver has not registered or answers with an
error: power operations, VCOM get/set, temperature. The tolino has an
SY7636 only, so those calls never ran. They are now behind DISP_JD9930,
which the Makefile leaves undefined; disp.ko no longer imports the four
jd9930_* functions.

The kernel keeps CONFIG_JD9930_VCOM: the stock disp.ko imports the
JD9930 driver, and the 4.9.56 kernel must still load that, which
kernel-check enforces.
---
 drivers/video/fbdev/sunxi/disp2/disp/Makefile          |  6 ++++++
 .../fbdev/sunxi/disp2/disp/de/disp_eink_manager.c      | 10 +++++-----
 .../video/fbdev/sunxi/disp2/disp/lcd/default_eink.c    |  4 ++--
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/video/fbdev/sunxi/disp2/disp/Makefile b/drivers/video/fbdev/sunxi/disp2/disp/Makefile
index 518539e1..5bfc98df 100755
--- a/drivers/video/fbdev/sunxi/disp2/disp/Makefile
+++ b/drivers/video/fbdev/sunxi/disp2/disp/Makefile
@@ -2,6 +2,12 @@ include $(obj)/de/Makefile
 
 obj-$(CONFIG_DISP2_SUNXI) += disp.o
 
+# JD9930: a second e-ink PMIC disp falls back to when no SY7636 (or
+# TPS65185) driver registered. The tolino has an SY7636 only, so disp is
+# built without the fallback (-DDISP_JD9930 brings it back). The kernel
+# keeps the JD9930 driver: the stock disp.ko imports it, and the 4.9.56
+# kernel must still load that.
+
 disp-objs :=  dev_disp.o dev_fb.o dev_disp_debugfs.o
 disp-objs += disp_sys_intf.o
 disp-$(CONFIG_DISP2_SUNXI_COMPOSER) += dev_composer.o
diff --git a/drivers/video/fbdev/sunxi/disp2/disp/de/disp_eink_manager.c b/drivers/video/fbdev/sunxi/disp2/disp/de/disp_eink_manager.c
index d4cb3b42..3c5e3478 100644
--- a/drivers/video/fbdev/sunxi/disp2/disp/de/disp_eink_manager.c
+++ b/drivers/video/fbdev/sunxi/disp2/disp/de/disp_eink_manager.c
@@ -30,7 +30,7 @@ extern int tps65185_vcom_set(int vcom_mv);
 extern int tps65185_vcom_get(int *vcom);
 //extern int sy7636_power_on(void);
 
-#if defined(CONFIG_JD9930_VCOM)
+#if defined(DISP_JD9930)
 extern int jd9930_vcom_set(int vcom_mv);
 extern int jd9930_vcom_get(int *vcom);
 #endif
@@ -795,7 +795,7 @@ static int eink_set_vcom_voltage(int vcom)
 	defined(CONFIG_JD9930_VCOM)
 	ret = tps65185_vcom_set(vcom);		//unit is mv
 	if (0 != ret) {
-#if defined(CONFIG_JD9930_VCOM)
+#if defined(DISP_JD9930)
 		ret = jd9930_vcom_set(vcom);
 		if (0 != ret) {
 			__wrn("%s: set vcom fail, ret=%d\n", __func__, ret);
@@ -817,7 +817,7 @@ ssize_t get_waveform_vcom(struct device *dev, struct device_attribute *attr, cha
 #if defined(CONFIG_TPS65185_VCOM) || defined(CONFIG_TPS65185_VCOM_MODULE) || defined(CONFIG_SY7636_VCOM) || \
 	defined(CONFIG_JD9930_VCOM)
 	ret = tps65185_vcom_get(&vcom);
-#if defined(CONFIG_JD9930_VCOM)
+#if defined(DISP_JD9930)
 	if (0 != ret) {
 		ret = jd9930_vcom_get(&vcom);
 		if (0 != ret) {
@@ -2873,7 +2873,7 @@ static int eink_get_temperature_thread(void *parg)
 		tps65185_temperature_get(&temperature);
 		if(temperature == -1) {
 			//__debug("%s: get temperature=%d fail from tps65185\n", __func__, temperature);
-		#if defined(CONFIG_JD9930_VCOM)
+		#if defined(DISP_JD9930)
 			jd9930_temperature_get(&temperature);
 			if (temperature == -1) {
 				//__debug("%s: get temperature=%d fail from tps65185\n", __func__, temperature);
@@ -3634,7 +3634,7 @@ unsigned int  eink_get_temperature(struct disp_eink_manager *manager)
 			__debug("No need to get pmic temperture.\n");
 		} else {
 			ret = tps65185_temperature_get(&gTemperature);
-#if defined(CONFIG_JD9930_VCOM)
+#if defined(DISP_JD9930)
 			if (ret == -1)
 				jd9930_temperature_get(&gTemperature);
 #endif
diff --git a/drivers/video/fbdev/sunxi/disp2/disp/lcd/default_eink.c b/drivers/video/fbdev/sunxi/disp2/disp/lcd/default_eink.c
index 9781bec2..fdffcce4 100755
--- a/drivers/video/fbdev/sunxi/disp2/disp/lcd/default_eink.c
+++ b/drivers/video/fbdev/sunxi/disp2/disp/lcd/default_eink.c
@@ -18,7 +18,7 @@
 struct ebc_pwr_ops g_tps65185_ops;
 extern int register_ebc_pwr_ops(struct ebc_pwr_ops *ops);
 
-#if defined(CONFIG_JD9930_VCOM)
+#if defined(DISP_JD9930)
 extern int register_ebc_jd9930_pwr_ops(struct ebc_pwr_ops *ops);
 #endif
 
@@ -370,7 +370,7 @@ static void Eink_int_panel(u32 sel)
 	
 	if (!pmic_register_ops) {
 		ret = register_ebc_pwr_ops(&g_tps65185_ops);
-#if defined(CONFIG_JD9930_VCOM)
+#if defined(DISP_JD9930)
 		if (ret)
 			ret = register_ebc_jd9930_pwr_ops(&g_tps65185_ops);
 #endif