Procházet zdrojové kódy

Merge "touch: st: update driver version"

qctecmdr před 11 měsíci
rodič
revize
abb456a868
5 změnil soubory, kde provedl 86 přidání a 76 odebrání
  1. 81 69
      st/fts.c
  2. 2 0
      st/fts.h
  3. 2 2
      st/fts_lib/ftsTime.c
  4. 1 1
      st/fts_lib/ftsTime.h
  5. 0 4
      st/fts_lib/ftsTool.c

+ 81 - 69
st/fts.c

@@ -38,6 +38,7 @@
 #include <linux/fb.h>
 #else
 #include <drm/drm_panel.h>
+#include <linux/soc/qcom/panel_event_notifier.h>
 #endif
 
 #ifdef KERNEL_ABOVE_2_6_38
@@ -1035,6 +1036,76 @@ static int fts_chip_initialization(struct fts_ts_info *info);
 static int fts_enable_reg(struct fts_ts_info *info, bool enable);
 
 static struct drm_panel *active_panel;
+#if defined(CONFIG_DRM)
+static void st_ts_panel_notifier_callback(enum panel_event_notifier_tag tag,
+		 struct panel_event_notification *notification, void *client_data)
+{
+	struct fts_ts_info *info = client_data;
+
+	if (!notification) {
+		pr_err("Invalid notification\n");
+		return;
+	}
+
+	logError(0, "%s %s Notification type:%d, early_trigger:%d, sensor_sleep:%d", tag, __func__,
+		notification->notif_type,
+		notification->notif_data.early_trigger,
+		info->sensor_sleep);
+
+	switch (notification->notif_type) {
+	case DRM_PANEL_EVENT_UNBLANK:
+		if (!notification->notif_data.early_trigger) {
+			logError(0, "%s %s: DRM_PANEL_EVENT_UNBLANK\n", tag, __func__);
+			queue_work(info->event_wq, &info->resume_work);
+		}
+		break;
+
+	case DRM_PANEL_EVENT_BLANK:
+		if (!notification->notif_data.early_trigger) {
+			logError(0, "%s %s: DRM_PANEL_EVENT_BLANK\n", tag, __func__);
+			queue_work(info->event_wq, &info->suspend_work);
+		}
+		break;
+
+	case DRM_PANEL_EVENT_BLANK_LP:
+		logError(0, "%s %s:received lp event\n", tag, __func__);
+		break;
+
+	case DRM_PANEL_EVENT_FPS_CHANGE:
+		logError(0, "%s %s: Received fps change old fps:%d new fps:%d\n",
+			tag, __func__,
+			notification->notif_data.old_fps,
+			notification->notif_data.new_fps);
+		break;
+
+	default:
+		logError(0, "%s %s:notification serviced :%d\n",
+			tag, __func__, notification->notif_type);
+		break;
+	}
+}
+
+static int st_register_for_panel_events(struct device_node *dp,
+					struct fts_ts_info *info)
+{
+	void *cookie;
+
+	cookie = panel_event_notifier_register(PANEL_EVENT_NOTIFICATION_PRIMARY,
+			PANEL_EVENT_NOTIFIER_CLIENT_PRIMARY_TOUCH, active_panel,
+			&st_ts_panel_notifier_callback, info);
+	if (!cookie) {
+		pr_err("Failed to register for panel events\n");
+		return -1;
+	}
+
+	logError(0, "%s %s registered for panel notifications panel: 0x%x\n",
+			tag, __func__, active_panel);
+
+	info->notifier_cookie = cookie;
+
+	return 0;
+}
+#endif
 
 void touch_callback(unsigned int status)
 {
@@ -3141,9 +3212,8 @@ static ssize_t fts_stm_cmd_show(struct device *dev,
 #if defined(CONFIG_FB_MSM)
 		res = fb_unregister_client(&info->notifier);
 #else
-		if (active_panel)
-			res = drm_panel_notifier_unregister(active_panel,
-				&info->notifier);
+		if (active_panel && info->notifier_cookie)
+			panel_event_notifier_unregister(info->notifier_cookie);
 #endif
 		if (res < 0) {
 			logError(1, "%s ERROR: unregister notifier failed!\n",
@@ -3346,9 +3416,8 @@ static ssize_t fts_stm_cmd_show(struct device *dev,
 	if (fb_register_client(&info->notifier) < 0)
 		logError(1, "%s ERROR: register notifier failed!\n", tag);
 #else
-	if (active_panel &&
-		drm_panel_notifier_register(active_panel, &info->notifier) < 0)
-		logError(1, "%s ERROR: register notifier failed!\n", tag);
+	if (active_panel)
+		st_register_for_panel_events(info->dev->of_node, info);
 #endif
 
 END:
@@ -4617,8 +4686,7 @@ static int fts_init_afterProbe(struct fts_ts_info *info)
 	error |= fb_register_client(&info->notifier);
 #else
 	if (active_panel)
-		error |= drm_panel_notifier_register(active_panel,
-			&info->notifier);
+		st_register_for_panel_events(info->dev->of_node, info);
 #endif
 
 	if (error < OK)
@@ -5091,68 +5159,10 @@ static int fts_fb_state_chg_callback(struct notifier_block *nb,
 	return NOTIFY_OK;
 }
 
-#else
-static int fts_fb_state_chg_callback(struct notifier_block *nb,
-		unsigned long val, void *data)
-{
-	struct fts_ts_info *info = container_of(nb, struct fts_ts_info,
-				notifier);
-	struct drm_panel_notifier *evdata = data;
-	unsigned int blank;
-
-	if (!evdata)
-		return 0;
-
-	if (val != DRM_PANEL_EVENT_BLANK)
-		return 0;
-
-	logError(0, "%s %s: fts notifier begin!\n", tag, __func__);
-	if (evdata->data && val == DRM_PANEL_EVENT_BLANK && info) {
-		blank = *(int *) (evdata->data);
-
-		switch (blank) {
-		case DRM_PANEL_BLANK_POWERDOWN:
-			if (info->sensor_sleep && info->aoi_notify_enabled)
-				break;
-
-			if (info->aoi_notify_enabled)
-				info->aoi_wake_on_suspend = true;
-			else
-				info->aoi_wake_on_suspend = false;
-
-			if (info->aoi_wake_on_suspend) {
-				info->sensor_sleep = true;
-				__pm_stay_awake(info->wakeup_source);
-			} else {
-				queue_work(info->event_wq, &info->suspend_work);
-			}
-			break;
-
-		case DRM_PANEL_BLANK_UNBLANK:
-			if (info->aoi_wake_on_suspend)
-				__pm_relax(info->wakeup_source);
-
-			if (!info->sensor_sleep)
-				break;
-
-			if (!info->resume_bit)
-				queue_work(info->event_wq, &info->resume_work);
-
-			if (info->aoi_wake_on_suspend)
-				info->sensor_sleep = false;
-
-			break;
-		default:
-			break;
-		}
-	}
-	return NOTIFY_OK;
-}
-#endif
-
 static struct notifier_block fts_noti_block = {
 	.notifier_call = fts_fb_state_chg_callback,
 };
+#endif
 
 static int fts_pinctrl_init(struct fts_ts_info *info)
 {
@@ -5777,7 +5787,9 @@ static int fts_probe_internal(struct i2c_client *client,
 	info->edge_palm_rej_enabled = 0;
 
 	info->resume_bit = 1;
+#if defined(CONFIG_FB_MSM)
 	info->notifier = fts_noti_block;
+#endif
 
 #ifdef CONFIG_ST_TRUSTED_TOUCH
 	fts_trusted_touch_init(info);
@@ -5986,8 +5998,8 @@ static int fts_remove(struct i2c_client *client)
 #if defined(CONFIG_FB_MSM)
 	fb_unregister_client(&info->notifier);
 #else
-	if (active_panel)
-		drm_panel_notifier_register(active_panel, &info->notifier);
+	if (active_panel && info->notifier_cookie)
+		panel_event_notifier_unregister(info->notifier_cookie);
 #endif
 
 	/* unregister the device */

+ 2 - 0
st/fts.h

@@ -260,6 +260,7 @@ struct trusted_touch_vm_info {
  * @resume_bit            Indicate if screen off/on
  * @fwupdate_stat         Store the result of a fw update triggered by the host
  * @notifier              Used for be notified from a suspend/resume event
+ * @notifier_cookie       saved cookie during panel event notification
  * @sensor_sleep          true susped was called, false resume was called
  * @wakelock              Wake Lock struct
  * @input_report_mutex    mutex for handling the pressure of keys
@@ -322,6 +323,7 @@ struct fts_ts_info {
 	int fwupdate_stat;
 
 	struct notifier_block notifier;
+	void *notifier_cookie;
 	bool sensor_sleep;
 	struct wakeup_source *wakeup_source;
 

+ 2 - 2
st/fts_lib/ftsTime.c

@@ -66,12 +66,12 @@
 
 void startStopWatch(struct StopWatch *w)
 {
-	ktime_get_ts(&w->start);
+	w->start = ktime_to_timespec64(ktime_get());
 }
 
 void stopStopWatch(struct StopWatch *w)
 {
-	ktime_get_ts(&w->end);
+	w->end = ktime_to_timespec64(ktime_get());
 }
 
 int elapsedMillisecond(struct StopWatch *w)

+ 1 - 1
st/fts_lib/ftsTime.h

@@ -42,7 +42,7 @@
 #include "ftsCrossCompile.h"
 
 struct StopWatch {
-	struct timespec start, end;
+	struct timespec64 start, end;
 };
 
 void startStopWatch(struct StopWatch *w);

+ 0 - 4
st/fts_lib/ftsTool.c

@@ -84,10 +84,6 @@ int readB2(u16 address, u8 *outBuf, int len)
 	u8 readEvent[FIFO_EVENT_SIZE] = {0};
 	u8 cmd[4] = { FTS_CMD_REQU_FW_CONF, 0x00, 0x00, (u8)len };
 
-	if (readEvent == NULL) {
-		logError(1, "%s %s:ERROR %02X\n", tag, __func__, ERROR_ALLOC);
-		return ERROR_ALLOC;
-	}
 	u16ToU8_be(address, &cmd[1]);
 	temp = printHex("Command B2 = ", cmd, 4);
 	if (temp != NULL)