diff --git a/drivers/input/touchscreen/touchscreen_mmi/Android.mk b/drivers/input/touchscreen/touchscreen_mmi/Android.mk index cf1a1913b5a9..b187c841bd1b 100644 --- a/drivers/input/touchscreen/touchscreen_mmi/Android.mk +++ b/drivers/input/touchscreen/touchscreen_mmi/Android.mk @@ -13,6 +13,10 @@ ifeq ($(TOUCHCLASS_MMI_GESTURE_POISON_EVENT),true) KERNEL_CFLAGS += CONFIG_TOUCHCLASS_MMI_GESTURE_POISON_EVENT=y endif +ifeq ($(TOUCHCLASS_MMI_MULTIWAY_UPDATE_FW),true) + KERNEL_CFLAGS += CONFIG_TOUCHCLASS_MMI_MULTIWAY_UPDATE_FW=y +endif + ifeq ($(DRM_PANEL_NOTIFICATIONS),true) KERNEL_CFLAGS += CONFIG_DRM_PANEL_NOTIFICATIONS=y endif diff --git a/drivers/input/touchscreen/touchscreen_mmi/Kbuild b/drivers/input/touchscreen/touchscreen_mmi/Kbuild index f2c5809e3902..9289ad6405a9 100644 --- a/drivers/input/touchscreen/touchscreen_mmi/Kbuild +++ b/drivers/input/touchscreen/touchscreen_mmi/Kbuild @@ -14,6 +14,9 @@ endif ifneq ($(filter m y, $(CONFIG_TOUCHCLASS_MMI_GESTURE_POISON_EVENT)),) EXTRA_CFLAGS += -DTS_MMI_TOUCH_GESTURE_POISON_EVENT endif +ifneq ($(filter m y, $(CONFIG_TOUCHCLASS_MMI_MULTIWAY_UPDATE_FW)),) + EXTRA_CFLAGS += -DTS_MMI_TOUCH_MULTIWAY_UPDATE_FW +endif ifneq ($(filter m y, $(CONFIG_DRM_PANEL_NOTIFICATIONS)),) EXTRA_CFLAGS += -DCONFIG_DRM_PANEL_NOTIFICATIONS endif diff --git a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_class.c b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_class.c index fe13d5cd7e6b..3558050107fb 100644 --- a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_class.c +++ b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_class.c @@ -123,6 +123,9 @@ TOUCH_MMI_GET_ATTR_RW(suppression, FMT_HEX_INTEGER); TOUCH_MMI_GET_ATTR_RW(hold_grip, FMT_HEX_INTEGER); TOUCH_MMI_GET_ATTR_RW(hold_distance, FMT_HEX_INTEGER); TOUCH_MMI_GET_ATTR_RW(gs_distance, FMT_HEX_INTEGER); +#ifdef TS_MMI_TOUCH_MULTIWAY_UPDATE_FW +TOUCH_MMI_GET_ATTR_RW(flash_mode, FMT_INTEGER); +#endif #ifdef TS_MMI_TOUCH_GESTURE_POISON_EVENT TOUCH_MMI_GET_ATTR_RW(poison_timeout, FMT_HEX_INTEGER); TOUCH_MMI_GET_ATTR_RW(poison_distance, FMT_HEX_INTEGER); @@ -303,6 +306,9 @@ static struct attribute *sysfs_class_attrs[] = { &dev_attr_reset.attr, &dev_attr_forcereflash.attr, &dev_attr_doreflash.attr, +#ifdef TS_MMI_TOUCH_MULTIWAY_UPDATE_FW + &dev_attr_flash_mode.attr, +#endif &dev_attr_pwr.attr, &dev_attr_pinctrl.attr, &dev_attr_refresh_rate.attr, diff --git a/include/linux/touchscreen_mmi.h b/include/linux/touchscreen_mmi.h index bd6df5109ca5..aaa222040af6 100644 --- a/include/linux/touchscreen_mmi.h +++ b/include/linux/touchscreen_mmi.h @@ -179,12 +179,14 @@ static inline unsigned long long timediff_ms( #define TS_MMI_MAX_POINT_NUM 10 #define TS_MMI_MAX_FW_PATH 64 +#define TS_MMI_MAX_FULL_FW_PATH 128 #define TS_MMI_MAX_ID_LEN 16 #define TS_MMI_MAX_VENDOR_LEN 16 #define TS_MMI_MAX_INFO_LEN 16 #define TS_MMI_MAX_CLASS_NAME_LEN 16 #define TS_MMI_MAX_PANEL_LEN 16 #define TS_MMI_PILL_REGION_REQ_ARGS_NUM 3 +#define TS_MMI_FW_PARAM_PATH "/data/vendor/param/touch/" enum touch_event_mode { TS_COORDINATE_ACTION_NONE = 0, @@ -193,6 +195,12 @@ enum touch_event_mode { TS_COORDINATE_ACTION_MOVE }; +enum TS_FW_UPGRADE_MODE { + FW_DEFAULT_MODE = 0, + FW_PARAM_MODE, + FW_SDCARD_MODE, +}; + struct touch_event_data { bool skip_report; enum touch_event_mode type; /* TS_TOUCH, TS_RELEASE */ @@ -276,6 +284,7 @@ enum ts_mmi_pm_mode { int (*get_flashprog)(struct device *dev, void *idata); int (*get_suppression)(struct device *dev, void *idata); int (*get_hold_grip)(struct device *dev, void *idata); + int (*get_flash_mode)(struct device *dev, void *idata); int (*get_pill_region)(struct device *dev, void *uiadata); int (*get_hold_distance)(struct device *dev, void *idata); int (*get_gs_distance)(struct device *dev, void *idata); @@ -292,6 +301,7 @@ enum ts_mmi_pm_mode { int (*palm_set_enable)(struct device *dev, unsigned int enable); int (*suppression)(struct device *dev, int state); int (*hold_grip)(struct device *dev, int state); + int (*flash_mode)(struct device *dev, int state); int (*pill_region)(struct device *dev, int *region_array); int (*hold_distance)(struct device *dev, int dis); int (*gs_distance)(struct device *dev, int dis); @@ -413,6 +423,7 @@ struct ts_mmi_dev { int hold_distance; int gs_distance; int hold_grip; + int flash_mode; int poison_timeout; int poison_distance; int poison_trigger_distance;