From 7da14327f39018c9bcb6ac4d535785a9e25761c6 Mon Sep 17 00:00:00 2001 From: wangdp11 Date: Tue, 31 Oct 2023 17:08:10 +0800 Subject: [PATCH 01/45] ctwov: Solve iic_driver .remove compatibility issue Details: New IIC_driver .remove will not return value. Change-Id: I13b4366ded871c5e9b8b9244eea181114dc672dc Signed-off-by: wangdp11 Reviewed-on: https://gerrit.mot.com/2781822 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Reviewed-by: Shuo Wang Reviewed-by: Zhichao Chen Reviewed-by: Zhenxin Xi Submit-Approved: Jira Key --- .../misc/vl53L1_14_1_2/stmvl53l1_module-i2c.c | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/input/misc/vl53L1_14_1_2/stmvl53l1_module-i2c.c b/drivers/input/misc/vl53L1_14_1_2/stmvl53l1_module-i2c.c index 348ff40bf2ff..d74e9de32b9a 100644 --- a/drivers/input/misc/vl53L1_14_1_2/stmvl53l1_module-i2c.c +++ b/drivers/input/misc/vl53L1_14_1_2/stmvl53l1_module-i2c.c @@ -501,6 +501,30 @@ done_freemem: return -1; } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0)) +static void stmvl53l1_remove(struct i2c_client *client) +{ + struct stmvl53l1_data *data = i2c_get_clientdata(client); + struct i2c_data *i2c_data = (struct i2c_data *)data->client_object; + + vl53l1_dbgmsg("Enter\n"); + mutex_lock(&data->work_mutex); + + stmvl53l1_sysfs_laser(data, false); + + /* main driver cleanup */ + stmvl53l1_cleanup(data); + + /* release gpios */ + stmvl53l1_release_gpios(i2c_data); + + mutex_unlock(&data->work_mutex); + + stmvl53l1_put(data->client_object); + + vl53l1_dbgmsg("End\n"); +} +#else static int stmvl53l1_remove(struct i2c_client *client) { struct stmvl53l1_data *data = i2c_get_clientdata(client); @@ -525,6 +549,7 @@ static int stmvl53l1_remove(struct i2c_client *client) return 0; } +#endif #ifdef CONFIG_PM_SLEEP static int stmvl53l1_suspend(struct device *dev) From 2a79a93c1b9a03a67cceeef90c82f7ca2a5db409 Mon Sep 17 00:00:00 2001 From: Chunyu Fan Date: Tue, 31 Oct 2023 15:16:36 +0800 Subject: [PATCH 02/45] Take FPS driver compile error Add check mechanism with kernel version, due to deleting gpio free api with prefix 'devm_' on latest kernel version. Change-Id: Idac00094e9e3d40ed806e95d37881399000a372b Signed-off-by: Chunyu Fan Reviewed-on: https://gerrit.mot.com/2781626 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- drivers/input/misc/fpc_fps_mmi/fpc1020_tee.c | 5 +++++ drivers/input/misc/goodix_fod_mmi/platform.c | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/drivers/input/misc/fpc_fps_mmi/fpc1020_tee.c b/drivers/input/misc/fpc_fps_mmi/fpc1020_tee.c index ec76edff7a28..e93e929674f5 100644 --- a/drivers/input/misc/fpc_fps_mmi/fpc1020_tee.c +++ b/drivers/input/misc/fpc_fps_mmi/fpc1020_tee.c @@ -8,6 +8,7 @@ * as published by the Free Software Foundation. */ +#include #include #include #include @@ -28,6 +29,10 @@ #define RESET_HIGH_SLEEP2_MIN_US 5000 #define RESET_HIGH_SLEEP2_MAX_US (RESET_HIGH_SLEEP2_MIN_US + 100) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 25)) +#define devm_gpio_free(a, b) NULL +#endif + struct FPS_data { unsigned int enabled; unsigned int state; diff --git a/drivers/input/misc/goodix_fod_mmi/platform.c b/drivers/input/misc/goodix_fod_mmi/platform.c index 5e1d6b4830d4..6bb245f3f35a 100644 --- a/drivers/input/misc/goodix_fod_mmi/platform.c +++ b/drivers/input/misc/goodix_fod_mmi/platform.c @@ -13,6 +13,7 @@ * GNU General Public License for more details. * */ +#include #include #include #include @@ -30,6 +31,10 @@ #include #endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 25)) +#define devm_gpio_free(a, b) NULL +#endif + int gf_parse_dts(struct gf_dev *gf_dev) { int rc = 0; @@ -129,7 +134,9 @@ err_pwr: void gf_cleanup(struct gf_dev *gf_dev) { +#if (LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 25)) struct device *dev = &gf_dev->spi->dev; +#endif pr_info("goodix: %s\n", __func__); if (gpio_is_valid(gf_dev->irq_gpio)) { From 25f8a99be04069cfcb398ab9e0e4af3536cdb10f Mon Sep 17 00:00:00 2001 From: Haijian Ma Date: Fri, 3 Nov 2023 09:06:33 +0800 Subject: [PATCH 03/45] charge: config qg iterm small than FCC Sometimes thermal limit FCC small than qg iterm when soc >90%. Qcom gauge will track to 100% but now battery is not full. So qg iterm should setted small than FCC and large than chg_iterm. Change-Id: I0dbeee2bfe79d0ddeaf5681ce7b77f0bb7eb7424 Signed-off-by: Haijian Ma Reviewed-on: https://gerrit.mot.com/2784309 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../mmi-smbcharger-iio/mmi-smbcharger-iio.c | 40 ++++++++++++++++--- 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c index f7b2756776f0..30f8f3686c49 100755 --- a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c +++ b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c @@ -524,6 +524,8 @@ struct smb_mmi_charger { /* DCP FFC */ bool ffc_stop_chg; bool enable_dcp_ffc; + + bool enable_fcc_large_qg_iterm; }; #define CHGR_FAST_CHARGE_CURRENT_CFG_REG (CHGR_BASE + 0x61) @@ -3317,6 +3319,33 @@ vote_now: return sched_time; } +static int mmi_set_qg_iterm(struct smb_mmi_charger *chip, int qg_iterm) +{ + int rc = 0; + int fcc = 0; + union power_supply_propval val; + + rc = power_supply_get_property(chip->batt_psy, + POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT, &val); + if (rc < 0) { + mmi_err(chip, "Couldn't get batt FCC, rc=%d\n", rc); + return rc; + } + + fcc = val.intval / 1000; + + if (chip->enable_fcc_large_qg_iterm && (qg_iterm > (fcc - 50))) + qg_iterm = fcc - 50; + + rc = smb_mmi_write_iio_chan(chip, + SMB5_QG_BATT_FULL_CURRENT, qg_iterm); + if (rc < 0) { + mmi_err(chip, "Couldn't set batt full current, rc=%d\n", rc); + } + + return rc; +} + static int mmi_get_ffc_fv(struct smb_mmi_charger *chip, int zone, bool force_ffc) { int rc; @@ -3334,8 +3363,7 @@ static int mmi_get_ffc_fv(struct smb_mmi_charger *chip, int zone, bool force_ffc if ((zone == ZONE_35C_TO_45C) && (chip->noffc_chg_iterm_45c != -EINVAL)) { prm->chrg_iterm = chip->noffc_chg_iterm_45c; - rc = smb_mmi_write_iio_chan(chip, - SMB5_QG_BATT_FULL_CURRENT, + rc = mmi_set_qg_iterm(chip, (chip->noffc_qg_iterm_45c != -EINVAL) ? chip->noffc_qg_iterm_45c : chip->noffc_qg_iterm); if (rc < 0) { @@ -3344,8 +3372,7 @@ static int mmi_get_ffc_fv(struct smb_mmi_charger *chip, int zone, bool force_ffc } else { prm->chrg_iterm = chip->noffc_chg_iterm; - rc = smb_mmi_write_iio_chan(chip, - SMB5_QG_BATT_FULL_CURRENT, chip->noffc_qg_iterm); + rc = mmi_set_qg_iterm(chip, chip->noffc_qg_iterm); if (rc < 0) { mmi_err(chip, "Couldn't set batt full current, rc=%d\n", rc); } @@ -3356,8 +3383,7 @@ static int mmi_get_ffc_fv(struct smb_mmi_charger *chip, int zone, bool force_ffc return ffc_max_fv; } - rc = smb_mmi_write_iio_chan(chip, - SMB5_QG_BATT_FULL_CURRENT, prm->ffc_zones[zone].ffc_qg_iterm); + rc = mmi_set_qg_iterm(chip, prm->ffc_zones[zone].ffc_qg_iterm); if (rc < 0) { mmi_err(chip, "Couldn't set batt full current, rc=%d\n", rc); } @@ -4760,6 +4786,8 @@ static int parse_mmi_dt(struct smb_mmi_charger *chg) chg->enable_dcp_ffc = of_property_read_bool(node, "mmi,enable-dcp-ffc"); + chg->enable_fcc_large_qg_iterm = of_property_read_bool(node, "mmi,enable-fcc-large-qg-iterm"); + return rc; } From 0a7ebaa8eb4398d66dd714b4edd6e3cfb11d6b25 Mon Sep 17 00:00:00 2001 From: dengwei1 Date: Thu, 2 Nov 2023 16:45:09 +0800 Subject: [PATCH 04/45] eqe: vibrator add haptic rtp support add new file to indicate rtp interface Change-Id: I2269d68d01d09174eeff07642b14c404ede77354 Signed-off-by: dengwei1 Reviewed-on: https://gerrit.mot.com/2784337 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- .../misc/awinic/aw862x_haptic_nv_v1/aw862xx.c | 2 +- .../awinic/aw862x_haptic_nv_v1/haptic_nv.c | 70 +++++++++++++++++-- 2 files changed, 66 insertions(+), 6 deletions(-) diff --git a/drivers/misc/awinic/aw862x_haptic_nv_v1/aw862xx.c b/drivers/misc/awinic/aw862x_haptic_nv_v1/aw862xx.c index 6d072b63cb52..04ce3f1501f0 100644 --- a/drivers/misc/awinic/aw862x_haptic_nv_v1/aw862xx.c +++ b/drivers/misc/awinic/aw862x_haptic_nv_v1/aw862xx.c @@ -294,7 +294,7 @@ static void aw862xx_play_mode(struct aw_haptic *aw_haptic, uint8_t play_mode) case AW_RTP_MODE: aw_info("enter rtp mode"); aw_haptic->play_mode = AW_RTP_MODE; - aw862xx_set_pwm(aw_haptic, AW_PWM_24K); + aw862xx_set_pwm(aw_haptic, AW_PWM_12K); aw862xx_auto_brk_config(aw_haptic, true); haptic_nv_i2c_write_bits(aw_haptic, AW862XX_REG_PLAYCFG3, AW862XX_BIT_PLAYCFG3_PLAY_MODE_MASK, diff --git a/drivers/misc/awinic/aw862x_haptic_nv_v1/haptic_nv.c b/drivers/misc/awinic/aw862x_haptic_nv_v1/haptic_nv.c index 1c00b742f245..13f5941b946c 100644 --- a/drivers/misc/awinic/aw862x_haptic_nv_v1/haptic_nv.c +++ b/drivers/misc/awinic/aw862x_haptic_nv_v1/haptic_nv.c @@ -48,11 +48,57 @@ static char aw_ram_name[][AW_NAME_MAX] = { }; static char aw_rtp_name[][AW_NAME_MAX] = { - {"haptic_nv_rtp_osc_24K_5s.bin"}, - {"haptic_nv_rtp.bin"}, - {"haptic_nv_rtp_lighthouse.bin"}, - {"haptic_nv_rtp_silk.bin"}, - {"haptic_nv_rtp_autosin.bin"}, + {"aw862xx_rtp.bin"}, + {"aw862xx_rtp_Argo_Navis.bin"}, + {"aw862xx_rtp_Attentive.bin"}, + {"aw862xx_rtp_Awake.bin"}, + {"aw862xx_rtp_Bird_Loop.bin"}, + {"aw862xx_rtp_Brilliant_Times.bin"}, + {"aw862xx_rtp_Chimey_Phone.bin"}, + {"aw862xx_rtp_Complex.bin"}, + {"aw862xx_rtp_Crazy_Dream.bin"}, + {"aw862xx_rtp_Curve_Ball_Blend.bin"}, + {"aw862xx_rtp_Digital_Phone.bin"}, + {"aw862xx_rtp_Electrovision.bin"}, + {"aw862xx_rtp_Ether_Shake.bin"}, + {"aw862xx_rtp_Fateful_Words.bin"}, + {"aw862xx_rtp_Flutey_Phone.bin"}, + {"aw862xx_rtp_Future_Funk.bin"}, + {"aw862xx_rtp_Future_Hi_Tech.bin"}, + {"aw862xx_rtp_Girtab.bin"}, + {"aw862xx_rtp_Hello.bin"}, + {"aw862xx_rtp_Hexagon.bin"}, + {"aw862xx_rtp_Hydra.bin"}, + {"aw862xx_rtp_Insert_Coin.bin"}, + {"aw862xx_rtp_Jumping_Dots.bin"}, + {"aw862xx_rtp_Keys.bin"}, + {"aw862xx_rtp_Loopy.bin"}, + {"aw862xx_rtp_Loopy_Lounge.bin"}, + {"aw862xx_rtp_Modular.bin"}, + {"aw862xx_rtp_Momentum.bin"}, + {"aw862xx_rtp_Morning.bin"}, + {"aw862xx_rtp_Moto.bin"}, + {"aw862xx_rtp_Natural.bin"}, + {"aw862xx_rtp_New_Player.bin"}, + {"aw862xx_rtp_Onward.bin"}, + {"aw862xx_rtp_Organ_Dub.bin"}, + {"aw862xx_rtp_Overclocked.bin"}, + {"aw862xx_rtp_Pegasus.bin"}, + {"aw862xx_rtp_Pyxis.bin"}, + {"aw862xx_rtp_Regrade.bin"}, + {"aw862xx_rtp_Scarabaeus.bin"}, + {"aw862xx_rtp_Sceptrum.bin"}, + {"aw862xx_rtp_Simple.bin"}, + {"aw862xx_rtp_Solarium.bin"}, + {"aw862xx_rtp_Sparse.bin"}, + {"aw862xx_rtp_Terrabytes.bin"}, + {"aw862xx_rtp_Zero_Hour.bin"}, + {"aw862xx_rtp_Play.bin"}, + {"aw862xx_rtp_TJINGLE.bin"}, + {"aw862xx_rtp_Verizon_Airwaves.bin"}, + {"aw862xx_rtp_City_Lights.bin"}, + {"aw862xx_rtp_Firefly.bin"}, + {"aw862xx_rtp_Now_or_Never.bin"}, }; #ifdef AW_TIKTAP @@ -1684,6 +1730,18 @@ static ssize_t seq_store(struct device *dev, struct device_attribute *attr, cons return count; } +static ssize_t rtp_interface_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return 0; +} + +static ssize_t rtp_interface_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t count) +{ + return count; +} + static ssize_t loop_show(struct device *dev, struct device_attribute *attr, char *buf) { uint8_t i = 0; @@ -2469,6 +2527,7 @@ static DEVICE_ATTR_RW(activate_mode); static DEVICE_ATTR_RW(index); static DEVICE_ATTR_RW(gain); static DEVICE_ATTR_RW(seq); +static DEVICE_ATTR_RW(rtp_interface); static DEVICE_ATTR_RW(loop); static DEVICE_ATTR_RW(ram_update); static DEVICE_ATTR_RW(f0); @@ -2501,6 +2560,7 @@ static struct attribute *vibrator_attributes[] = { &dev_attr_index.attr, &dev_attr_gain.attr, &dev_attr_seq.attr, + &dev_attr_rtp_interface.attr, &dev_attr_loop.attr, &dev_attr_reg.attr, &dev_attr_ram_update.attr, From 82e2314b17e09efa34911f6eec672b1972d98308 Mon Sep 17 00:00:00 2001 From: litong20 Date: Thu, 2 Nov 2023 17:14:28 +0800 Subject: [PATCH 05/45] Add charger type uevent Support charger type uevent to notify BatteryService the charger real tyep. Filter uevent by uevent message POWER_SUPPLY_CHARGE_REAL_TYPE to parse the real charger type. Change-Id: Ibfab5f3a12565b8bcb30d093f3f27e9d5c1f4b11 Reviewed-on: https://gerrit.mot.com/2783912 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Yonghua Yan Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- drivers/power/mmi_charger/mmi_charger.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/power/mmi_charger/mmi_charger.c b/drivers/power/mmi_charger/mmi_charger.c index 9fa081203381..361f9cee3a98 100644 --- a/drivers/power/mmi_charger/mmi_charger.c +++ b/drivers/power/mmi_charger/mmi_charger.c @@ -71,6 +71,7 @@ enum { NOTIFY_EVENT_TYPE_LPD_PRESENT, NOTIFY_EVENT_TYPE_VBUS_PRESENT, NOTIFY_EVENT_TYPE_POWER_WATT, + NOTIFY_EVENT_TYPE_CHG_REAL_TYPE, }; static char *charge_rate[] = { @@ -219,6 +220,7 @@ struct mmi_charger_chip { int charge_full_design; int init_cycles; int max_charger_rate; + int real_charger_type; bool vbus_present; bool lpd_present; int power_watt; @@ -361,6 +363,8 @@ static ssize_t state_sync_store(struct device *dev, NOTIFY_EVENT_TYPE_VBUS_PRESENT); mmi_notify_charger_event(this_chip, NOTIFY_EVENT_TYPE_POWER_WATT); + mmi_notify_charger_event(this_chip, + NOTIFY_EVENT_TYPE_CHG_REAL_TYPE); mutex_unlock(&this_chip->charger_lock); cancel_delayed_work(&this_chip->heartbeat_work); schedule_delayed_work(&this_chip->heartbeat_work, @@ -1776,6 +1780,11 @@ static void mmi_notify_charger_event(struct mmi_charger_chip *chip, int type) "POWER_SUPPLY_POWER_WATT=%d", chip->power_watt / 1000); break; + case NOTIFY_EVENT_TYPE_CHG_REAL_TYPE: + scnprintf(event_string, CHG_SHOW_MAX_SIZE, + "POWER_SUPPLY_CHARGE_REAL_TYPE=%d", + chip->real_charger_type); + break; default: mmi_err(chip, "Invalid notify event type %d\n", type); kfree(event_string); @@ -1989,6 +1998,8 @@ static void mmi_update_battery_status(struct mmi_charger_chip *chip) int batt_health = POWER_SUPPLY_HEALTH_UNKNOWN; int charger_rate = MMI_POWER_SUPPLY_CHARGE_RATE_NONE; int max_charger_rate = MMI_POWER_SUPPLY_CHARGE_RATE_NONE; + int charger_type = 0; + int real_charger_type = 0; struct mmi_charger *charger = NULL; struct mmi_battery_pack *battery = NULL; struct mmi_battery_info *batt_info = NULL; @@ -2027,6 +2038,11 @@ static void mmi_update_battery_status(struct mmi_charger_chip *chip) if (charger->chg_info.chrg_pmax_mw > power_watt) power_watt = charger->chg_info.chrg_pmax_mw; + /* update charger type */ + charger_type = charger->chg_info.chrg_type; + if (charger_type != 0xFF && real_charger_type < charger_type) + real_charger_type = charger_type; + /* update charging status */ if (batt_info->batt_status == POWER_SUPPLY_STATUS_FULL || battery->status == POWER_SUPPLY_STATUS_FULL || @@ -2056,6 +2072,7 @@ static void mmi_update_battery_status(struct mmi_charger_chip *chip) battery->cycles, charge_rate[battery->charger_rate]); } + /* update vbus and liquid present detection status */ if (!vbus_present && charger->chg_info.vbus_present) vbus_present = true; @@ -2127,6 +2144,13 @@ static void mmi_update_battery_status(struct mmi_charger_chip *chip) mmi_info(chip, "charger power is %d mW\n", power_watt); } + if ((chip->real_charger_type) != real_charger_type) { + mmi_changed = true; + chip->real_charger_type = real_charger_type; + mmi_notify_charger_event(chip, NOTIFY_EVENT_TYPE_CHG_REAL_TYPE); + mmi_info(chip, "charger real type is %d\n", real_charger_type); + } + list_for_each_entry(battery, &chip->battery_list, list) { if (batt_health == POWER_SUPPLY_HEALTH_UNKNOWN) { batt_health = battery->health; From 8bc20dada0ba29c949d9245b11754af356ae5d82 Mon Sep 17 00:00:00 2001 From: Xiaojun Ji Date: Fri, 3 Nov 2023 16:17:54 +0800 Subject: [PATCH 06/45] moto_swap: Add SWP_SYNCHRONOUS_IO cmd for ioctl Currently, swap_slot_has_sync_io() will always return true to skip readahead since ramboost2.0 is SWP_SYNCHRONOUS_IO Change-Id: I84a495f3de464e8c68ccd3d43de2c0b44f3e3fb2 Reviewed-on: https://gerrit.mot.com/2784761 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yonghui Jia Reviewed-by: Zhangqing Huang Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/moto_swap/zram-5.4/zram_drv.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/moto_swap/zram-5.4/zram_drv.c b/drivers/moto_swap/zram-5.4/zram_drv.c index 7abdf6e8823b..ac5ce3275e17 100644 --- a/drivers/moto_swap/zram-5.4/zram_drv.c +++ b/drivers/moto_swap/zram-5.4/zram_drv.c @@ -1752,6 +1752,22 @@ static void zram_slot_free_notify(struct block_device *bdev, zram_slot_unlock(zram, index); } +static int zram_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long index) +{ + struct zram *zram; + int has_sync_io = 1; + + if (cmd != SWP_SYNCHRONOUS_IO) return -EINVAL; + + zram = bdev->bd_disk->private_data; + zram_slot_lock(zram, index); + has_sync_io = zram_test_flag(zram, index, ZRAM_WB) ? 0 : 1; + zram_slot_unlock(zram, index); + + return has_sync_io; +} + static int zram_rw_page(struct block_device *bdev, sector_t sector, struct page *page, unsigned int op) { @@ -1944,6 +1960,7 @@ static int zram_open(struct block_device *bdev, fmode_t mode) static const struct block_device_operations zram_devops = { .open = zram_open, .swap_slot_free_notify = zram_slot_free_notify, + .ioctl = zram_ioctl, .rw_page = zram_rw_page, .owner = THIS_MODULE }; From e005252d13031af2c50df64992b1fa36b46486d3 Mon Sep 17 00:00:00 2001 From: huangzq2 Date: Mon, 6 Nov 2023 16:20:14 +0800 Subject: [PATCH 07/45] fix null pointer at quota_day_store Change-Id: I660fbdb63fe9b005472c6ac61dc5cffdbd1972a1 Signed-off-by: huangzq2 Reviewed-on: https://gerrit.mot.com/2786068 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Reviewed-by: Xiangpo Zhao Tested-by: Jira Key Submit-Approved: Jira Key --- drivers/moto_swap/hybridswap/hybridswap_eswap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/moto_swap/hybridswap/hybridswap_eswap.c b/drivers/moto_swap/hybridswap/hybridswap_eswap.c index 4a4783be1393..1fdd7e0e4efc 100644 --- a/drivers/moto_swap/hybridswap/hybridswap_eswap.c +++ b/drivers/moto_swap/hybridswap/hybridswap_eswap.c @@ -4091,7 +4091,9 @@ void hybridswap_set_quota_day(unsigned long val) // reset reclaimin_bytes_daily when set quota, so we can only // set quota once per day. - atomic64_set(&stat->reclaimin_bytes_daily, 0); + if (stat) { + atomic64_set(&stat->reclaimin_bytes_daily, 0); + } } bool hybridswap_reach_life_protect(void) From c78b8b8fbf687bc3ce38779e538abf5bdab2ff7a Mon Sep 17 00:00:00 2001 From: Bruno Oliveira Date: Mon, 30 Oct 2023 13:06:33 -0300 Subject: [PATCH 08/45] Chipone: Fix compatibility with 5.4.0 api This commit is a port from https://gerrit.mot.com/#/c/1795715/ to focaltech_0flash_v2_mmi At GKI 1.0 the VTS tests should use GKI and GKI does not allow the use of input_get_new_minor, so VTS tests does not have working touchscreen Fix it definitely using the correct alloc api Change-Id: Iacca8ddca0ac53e374eb18b6779b29f6467745ad Reviewed-on: https://gerrit.mot.com/2780951 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Rafael Ortolan Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key Reviewed-by: Claudio Junior --- .../focaltech_ex_fun.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/input/touchscreen/focaltech_0flash_v2_mmi/focaltech_ex_fun.c b/drivers/input/touchscreen/focaltech_0flash_v2_mmi/focaltech_ex_fun.c index 51b13c1478e7..6179f80169b6 100644 --- a/drivers/input/touchscreen/focaltech_0flash_v2_mmi/focaltech_ex_fun.c +++ b/drivers/input/touchscreen/focaltech_0flash_v2_mmi/focaltech_ex_fun.c @@ -1788,15 +1788,14 @@ static int fts_sysfs_class(void *_data, bool create) int i, error = 0; static struct class *touchscreen_class; static struct device *ts_class_dev; - static int minor; + dev_t devno; if (create) { - minor = input_get_new_minor(data->spi->chip_select, - 1, false); - if (minor < 0) - minor = input_get_new_minor(TSDEV_MINOR_BASE, - TSDEV_MINOR_MAX, true); - pr_info("assigned minor %d\n", minor); + error = alloc_chrdev_region(&devno, 0, 1, FTS_CHIP_NAME); + if (error) { + pr_err("Alloc input devno failed\n"); + return error; + } touchscreen_class = class_create(THIS_MODULE, "touchscreen"); if (IS_ERR(touchscreen_class)) { @@ -1807,11 +1806,11 @@ static int fts_sysfs_class(void *_data, bool create) #ifdef FTS_LAST_TIME_EN ts_class_dev = device_create(touchscreen_class, NULL, - MKDEV(INPUT_MAJOR, minor), + devno, data, FTS_PRIMARY_NAME); #else ts_class_dev = device_create(touchscreen_class, NULL, - MKDEV(INPUT_MAJOR, minor), + devno, data, FTS_CHIP_NAME); #endif @@ -1845,7 +1844,7 @@ static int fts_sysfs_class(void *_data, bool create) device_destroy: for (--i; i >= 0; --i) device_remove_file(ts_class_dev, &attrs[i]); - device_destroy(touchscreen_class, MKDEV(INPUT_MAJOR, minor)); + device_destroy(touchscreen_class, devno); ts_class_dev = NULL; class_unregister(touchscreen_class); pr_err("error creating touchscreen class\n"); From 5dd18fd47d0b8723a5d38e3b7a789af14ca90dbf Mon Sep 17 00:00:00 2001 From: xuxj Date: Mon, 6 Nov 2023 21:07:16 +0800 Subject: [PATCH 09/45] charger: add factory charge limit enable voltage Charger limit enable when soc to high, but if soc wrong and voltage too low may caused low voltage battery can't charge, add enable voltage to avoid it. Change-Id: I7273351f237c2dd0262bf6f6c3bc18fb41e0860b Signed-off-by: xuxj Reviewed-on: https://gerrit.mot.com/2786869 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Reviewed-by: Wentao Xu Reviewed-by: Guobin Zhang Tested-by: Jira Key Submit-Approved: Jira Key --- drivers/power/mmi_charger/mmi_charger.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/power/mmi_charger/mmi_charger.c b/drivers/power/mmi_charger/mmi_charger.c index 361f9cee3a98..67d1c6ae9809 100644 --- a/drivers/power/mmi_charger/mmi_charger.c +++ b/drivers/power/mmi_charger/mmi_charger.c @@ -242,6 +242,7 @@ struct mmi_charger_chip { bool enable_factory_poweroff; bool factory_syspoweroff_wait; bool start_factory_kill_disabled; + int upper_limit_en_mv; int upper_limit_capacity; int lower_limit_capacity; @@ -1506,7 +1507,8 @@ static void mmi_update_charger_status(struct mmi_charger_chip *chip, if (chip->enable_charging_limit && chip->factory_version) { charging_limit_modes = status->charging_limit_modes; if ((charging_limit_modes != CHARGING_LIMIT_RUN) - && (batt_info->batt_soc >= chip->upper_limit_capacity)) + && (batt_info->batt_soc >= chip->upper_limit_capacity) + && (batt_info->batt_mv >= chip->upper_limit_en_mv)) charging_limit_modes = CHARGING_LIMIT_RUN; else if ((charging_limit_modes != CHARGING_LIMIT_OFF) && (batt_info->batt_soc <= chip->lower_limit_capacity)) @@ -2812,6 +2814,11 @@ static int mmi_parse_dt(struct mmi_charger_chip *chip) if (rc) chip->factory_kill_debounce_ms = 0; + rc = of_property_read_u32(node, "mmi,upper-limit-en-voltage", + &chip->upper_limit_en_mv); + if (rc) + chip->upper_limit_en_mv = 4000; + rc = of_property_read_u32(node, "mmi,upper-limit-capacity", &chip->upper_limit_capacity); if (rc) From 75e9ee177b86c2426810456ba4733fac4bf758a5 Mon Sep 17 00:00:00 2001 From: Xiaojun Lv Date: Mon, 6 Nov 2023 13:36:01 +0800 Subject: [PATCH 10/45] avatrn: add parrot build config for fts tp: add parrot build config for fts Change-Id: Ie2791b8a53a4a186d356d98d933bb2468abd9d0d Reviewed-on: https://gerrit.mot.com/2785841 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yeqing Wang Reviewed-by: Hujun Liao Submit-Approved: Jira Key --- drivers/input/touchscreen/focaltech_touch_v3/Android.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/focaltech_touch_v3/Android.mk b/drivers/input/touchscreen/focaltech_touch_v3/Android.mk index bc25407b4655..89ab92680a79 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/Android.mk +++ b/drivers/input/touchscreen/focaltech_touch_v3/Android.mk @@ -1,7 +1,7 @@ DLKM_DIR := motorola/kernel/modules LOCAL_PATH := $(call my-dir) -ifeq ($(call is-board-platform-in-list,taro kalama), true) +ifeq ($(call is-board-platform-in-list,taro kalama parrot), true) ifneq ($(FOCALTECH_TOUCH_IC_NAME),) KBUILD_OPTIONS += CONFIG_INPUT_FOCALTECH_V3_MMI_IC_NAME=$(FOCALTECH_TOUCH_IC_NAME) From 08a0bce0e5922ee58a4e16844f6d29d6de584a2a Mon Sep 17 00:00:00 2001 From: Wenge Zhu Date: Mon, 6 Nov 2023 16:01:22 +0800 Subject: [PATCH 11/45] Add IC type of GT9615 TP: Add IC type of GT9615(Marseille). Change-Id: If78eb28e317424b37b86c7677b38b01c35035465 Signed-off-by: Wenge Zhu Reviewed-on: https://gerrit.mot.com/2786221 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../goodix_gt96x_mmi/goodix_brl_fwupdate.c | 22 ++++++++++++++++++- .../goodix_gt96x_mmi/goodix_brl_hw.c | 3 ++- .../goodix_gt96x_mmi/goodix_brl_i2c.c | 1 + .../goodix_gt96x_mmi/goodix_brl_spi.c | 1 + .../goodix_gt96x_mmi/goodix_ts_core.h | 5 +++-- .../goodix_gt96x_mmi/goodix_ts_inspect.c | 15 ++++++++----- .../goodix_gt96x_mmi/goodix_ts_utils.c | 5 +++++ 7 files changed, 43 insertions(+), 9 deletions(-) diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_fwupdate.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_fwupdate.c index f975ee979162..ee845316b985 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_fwupdate.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_fwupdate.c @@ -40,16 +40,20 @@ #define ISP_RAM_ADDR_BRA 0x18400 #define ISP_RAM_ADDR_BRB 0x57000 #define ISP_RAM_ADDR_BRD 0x23800 +#define ISP_RAM_ADDR_MAR 0x3B800 #define HW_REG_CPU_RUN_FROM 0x10000 #define FLASH_CMD_REG_BRA 0x10400 #define FLASH_CMD_REG_BRB 0x13400 #define FLASH_CMD_REG_BRD 0x12400 +#define FLASH_CMD_REG_MAR 0x10174 #define HW_REG_ISP_BUFFER_BRA 0x10410 #define HW_REG_ISP_BUFFER_BRB 0x13410 #define HW_REG_ISP_BUFFER_BRD 0x12410 +#define HW_REG_ISP_BUFFER_MAR 0x12400 #define CONFIG_DATA_ADDR_BRA 0x3E000 #define CONFIG_DATA_ADDR_BRB 0x40000 #define CONFIG_DATA_ADDR_BRD 0x3E000 +#define CONFIG_DATA_ADDR_MAR 0x3F000 #define HOLD_CPU_REG_W 0x0002 #define HOLD_CPU_REG_R 0x2000 @@ -131,6 +135,19 @@ struct update_info_t update_brd = { ENABLE_MISCTL_BRD, }; +/* Marseille update info */ +struct update_info_t update_mar = { + FW_HEADER_SIZE, + FW_SUBSYS_INFO_OFFSET, + ISP_RAM_ADDR_MAR, + FLASH_CMD_REG_MAR, + HW_REG_ISP_BUFFER_MAR, + CONFIG_DATA_ADDR_MAR, + MISCTL_REG_BRD, + WATCH_DOG_REG_BRD, + ENABLE_MISCTL_BRD, +}; + enum compare_status { COMPARE_EQUAL = 0, COMPARE_NOCODE, @@ -484,7 +501,8 @@ static int goodix_update_prepare(struct fw_update_ctrl *fwu_ctrl) /* enable misctl clock */ if (fwu_ctrl->core_data->bus->ic_type == IC_TYPE_BERLIN_D || - fwu_ctrl->core_data->bus->ic_type == IC_TYPE_NOTTINGHAM) + fwu_ctrl->core_data->bus->ic_type == IC_TYPE_NOTTINGHAM || + fwu_ctrl->core_data->bus->ic_type == IC_TYPE_MARSEILLE) hw_ops->write(cd, misctl_reg, (u8 *)&enable_misctl_val, 4); else hw_ops->write(cd, misctl_reg, (u8 *)&enable_misctl_val, 1); @@ -1202,6 +1220,8 @@ int goodix_fw_update_init(struct goodix_ts_core *core_data) core_data->update_ctrl.update_info = &update_bra; else if (core_data->bus->ic_type == IC_TYPE_BERLIN_B) core_data->update_ctrl.update_info = &update_brb; + else if (core_data->bus->ic_type == IC_TYPE_MARSEILLE) + core_data->update_ctrl.update_info = &update_mar; else core_data->update_ctrl.update_info = &update_brd; diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_hw.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_hw.c index a75f0947eb59..68c66484053c 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_hw.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_hw.c @@ -1585,7 +1585,8 @@ static int brl_get_capacitance_data(struct goodix_ts_core *cd, } if (cd->bus->ic_type == IC_TYPE_BERLIN_D || - cd->bus->ic_type == IC_TYPE_NOTTINGHAM) + cd->bus->ic_type == IC_TYPE_NOTTINGHAM || + cd->bus->ic_type == IC_TYPE_MARSEILLE) return brld_get_cap_data(cd, info); /* disable irq & close esd */ diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_i2c.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_i2c.c index 664ad4192881..94b6abe59544 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_i2c.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_i2c.c @@ -208,6 +208,7 @@ static const struct of_device_id i2c_matchs[] = { {.compatible = "goodix,brl-b",}, {.compatible = "goodix,brl-d",}, {.compatible = "goodix,nottingham",}, + {.compatible = "goodix,marseille",}, {}, }; MODULE_DEVICE_TABLE(of, i2c_matchs); diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c index aaf2c8782936..ebb58e111e1a 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c @@ -245,6 +245,7 @@ static const struct of_device_id spi_matchs[] = { {.compatible = "goodix,brl-b",}, {.compatible = "goodix,brl-d",}, {.compatible = "goodix,nottingham",}, + {.compatible = "goodix,marseille",}, {}, }; #endif diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h index faafcca88bfc..31b92ce7a079 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h @@ -49,7 +49,7 @@ #define GOODIX_CORE_DRIVER_NAME "goodix_ts" #define GOODIX_PEN_DRIVER_NAME "goodix_ts,pen" -#define GOODIX_DRIVER_VERSION "v1.3.13" +#define GOODIX_DRIVER_VERSION "v1.3.14" #define GOODIX_MAX_TOUCH 10 #define GOODIX_MAX_KEY 10 #define GOODIX_PEN_MAX_PRESSURE 4096 @@ -117,7 +117,8 @@ enum IC_TYPE_ID { IC_TYPE_BERLIN_A, IC_TYPE_BERLIN_B, IC_TYPE_BERLIN_D, - IC_TYPE_NOTTINGHAM + IC_TYPE_NOTTINGHAM, + IC_TYPE_MARSEILLE }; /* SUB-ID diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c index 26f0c9f41357..a5b05ac7974c 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c @@ -1495,7 +1495,8 @@ static int goodix_cap_test_prepare(struct goodix_ts_test *ts_test) /* switch rawdata mode */ if (ts_test->ts->bus->ic_type == IC_TYPE_BERLIN_D || - ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM) { + ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM || + ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) { temp_cmd.cmd = 0x90; temp_cmd.data[0] = 0x81; temp_cmd.len = 5; @@ -1532,7 +1533,8 @@ static int goodix_poll_rawdata(struct goodix_ts_test *ts_test, u8 data_type, u8 int retry; if (ts_test->ts->bus->ic_type == IC_TYPE_BERLIN_D || - ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM) + ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM || + ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) flag_addr = ts_test->ts->ic_info.misc.frame_data_addr; if (data_type == GTP_MUTUAL_RAW) { @@ -1563,7 +1565,8 @@ static int goodix_poll_rawdata(struct goodix_ts_test *ts_test, u8 data_type, u8 frame_buf = kzalloc(FRAME_DATA_MAX_SIZE, GFP_KERNEL); if (cd->bus->ic_type == IC_TYPE_BERLIN_D || - cd->bus->ic_type == IC_TYPE_NOTTINGHAM) { + cd->bus->ic_type == IC_TYPE_NOTTINGHAM || + cd->bus->ic_type == IC_TYPE_MARSEILLE) { ret = ts_test_read(ts_test, flag_addr, frame_buf, FRAME_DATA_MAX_SIZE); if (ret < 0) goto free_exit; @@ -1611,7 +1614,8 @@ static int goodix_cache_rawdata(struct goodix_ts_test *ts_test) u32 flag_addr = ts_test->ts->ic_info.misc.touch_data_addr; if (ts_test->ts->bus->ic_type == IC_TYPE_BERLIN_D || - ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM) + ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM || + ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) flag_addr = ts_test->ts->ic_info.misc.frame_data_addr; for (i = 0; i < DISCARD_FRAMES; i++) { @@ -1717,7 +1721,8 @@ static int goodix_cache_noisedata(struct goodix_ts_test *ts_test) u32 flag_addr = ts_test->ts->ic_info.misc.touch_data_addr; if (cd->bus->ic_type == IC_TYPE_BERLIN_D || - cd->bus->ic_type == IC_TYPE_NOTTINGHAM) { + cd->bus->ic_type == IC_TYPE_NOTTINGHAM || + cd->bus->ic_type == IC_TYPE_MARSEILLE) { flag_addr = ts_test->ts->ic_info.misc.frame_data_addr; temp_cmd.cmd = 0x90; temp_cmd.data[0] = 0x82; diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_utils.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_utils.c index de90dfb94bc6..dfdce7bf8197 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_utils.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_utils.c @@ -273,6 +273,11 @@ int goodix_get_ic_type(struct device_node *node, bus_inf->ic_type = IC_TYPE_NOTTINGHAM; return 0; } + if (strstr(ic_name, "marseille")) { + ts_info("ic type is marseille"); + bus_inf->ic_type = IC_TYPE_MARSEILLE; + return 0; + } ts_err("unsupported ic type %s", ic_name); return -EINVAL; From 995f6b0433320006d0c3fde2a9eb3817b5f85174 Mon Sep 17 00:00:00 2001 From: Wenge Zhu Date: Mon, 6 Nov 2023 17:00:22 +0800 Subject: [PATCH 12/45] Distinguish log print with main touch TP: Distinguish log print with main touch. Change-Id: If341859f4beeb8f3e701f8817fc6279bec2c1b47 Signed-off-by: Wenge Zhu Reviewed-on: https://gerrit.mot.com/2786237 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c | 2 +- .../input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c index d04bf1352619..f540e7d21902 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c @@ -1233,7 +1233,7 @@ static int goodix_ts_input_dev_config(struct goodix_ts_core *core_data) core_data->input_dev = input_dev; input_set_drvdata(input_dev, core_data); - sprintf(core_data->input_name, "%s.%d", GOODIX_CORE_DRIVER_NAME, dev_id); + sprintf(core_data->input_name, "%s_%d", GOODIX_CORE_DRIVER_NAME, dev_id); input_dev->name = core_data->input_name; input_dev->id.bustype = core_data->bus->bus_type; diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h index 31b92ce7a079..2c8fc37e51fc 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h @@ -47,7 +47,7 @@ #include #endif -#define GOODIX_CORE_DRIVER_NAME "goodix_ts" +#define GOODIX_CORE_DRIVER_NAME "gdx_cli" #define GOODIX_PEN_DRIVER_NAME "goodix_ts,pen" #define GOODIX_DRIVER_VERSION "v1.3.14" #define GOODIX_MAX_TOUCH 10 @@ -778,12 +778,12 @@ extern int goodix_device_register(struct goodix_device_resource *device); /* log macro */ extern bool debug_log_flag; #define ts_info(fmt, arg...) \ - pr_info("[GTP-INF][%s] "fmt"\n", __func__, ##arg) + pr_info("[GDX-CLI-INF][%s] "fmt"\n", __func__, ##arg) #define ts_err(fmt, arg...) \ - pr_err("[GTP-ERR][%s] "fmt"\n", __func__, ##arg) + pr_err("[GDX-CLI-ERR][%s] "fmt"\n", __func__, ##arg) #define ts_debug(fmt, arg...) \ {if (debug_log_flag) \ - pr_info("[GTP-DBG][%s] "fmt"\n", __func__, ##arg);} + pr_info("[GDX-CLI-DBG][%s] "fmt"\n", __func__, ##arg);} struct goodix_ts_hw_ops *goodix_get_hw_ops(void); int goodix_get_config_proc(struct goodix_ts_core *cd); From 685e384ed01ce9cac8d534cf3c62228e28b458a8 Mon Sep 17 00:00:00 2001 From: dengwei1 Date: Tue, 7 Nov 2023 13:26:14 +0800 Subject: [PATCH 13/45] eqe: input touch support game mode support game mode feature Change-Id: I2a868b132b36ec814ab4f7065fd082dbafd863bb Signed-off-by: dengwei1 Reviewed-on: https://gerrit.mot.com/2787733 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- drivers/input/touchscreen/goodix_berlin_mmi/Kbuild | 2 ++ drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild b/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild index 65bf4824597e..2a996d881dc3 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild +++ b/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild @@ -126,6 +126,8 @@ else ifneq ($(filter lynkco%, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_LYNKCO else ifneq ($(filter bangkk%, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_BANGKK +else ifneq ($(filter eqe, $(USE_TARGET_PRODUCT)), ) + EXTRA_CFLAGS += -DPRODUCT_EQE endif $(warning "william EXTRA_CFLAGS = $(EXTRA_CFLAGS)") diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c index 9f703ade9dff..399d8cb24ddf 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c @@ -16,7 +16,7 @@ struct goodix_ic_report_rate_config report_rate_config_info = { #if defined(PRODUCT_LI) || defined(PRODUCT_ONELI) || defined(PRODUCT_TUNDRA) \ ||defined(PRODUCT_EQS) || defined(PRODUCT_RTWO) || defined(PRODUCT_BRONCO) \ || defined(PRODUCT_ZEEKR) || defined(PRODUCT_LYNKCO) || defined(PRODUCT_BANGKK) \ - || defined(PRODUCT_CTWO) + || defined(PRODUCT_EQE) || defined(PRODUCT_CTWO) .rate_config_count = 2, .refresh_rate_ctrl = 0, .interpolation_ctrl = 1, From b72629e03c2ca0d6f3c2bcb1679b2fe3e25ce220 Mon Sep 17 00:00:00 2001 From: xuwt2 Date: Mon, 6 Nov 2023 23:44:41 +0800 Subject: [PATCH 14/45] sc760x_charger: irq-dis-cfg irq-dis-cfg: Do not request IRQ when define irq-dis-cfg. Change-Id: I8b563a0aa3cf42bc8eb1923afe6dcf14e1c5d8df Signed-off-by: xuwt2 Reviewed-on: https://gerrit.mot.com/2787073 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: litong Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- .../sc760x_charger_mmi/sc760x_charger_mmi.c | 35 ++++++++++++++----- .../sc760x_charger_mmi/sc760x_charger_mmi.h | 1 + 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c index c3b6da56e971..601ee675484f 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c @@ -232,7 +232,7 @@ static int sc760x_enable_chip(struct sc760x_chip *sc, bool en) if (sc->sc760x_enable) { - if (!sc->irq_enabled) { + if (sc->irq && !sc->irq_enabled) { enable_irq_wake(sc->irq); enable_irq(sc->irq); sc->irq_enabled = true; @@ -242,7 +242,7 @@ static int sc760x_enable_chip(struct sc760x_chip *sc, bool en) pr_info("init device failed(%d)\n", ret); } } else { - if (sc->irq_enabled) { + if (sc->irq && sc->irq_enabled) { disable_irq_wake(sc->irq); disable_irq(sc->irq); sc->irq_enabled = false; @@ -1063,6 +1063,9 @@ static int sc760x_parse_dt(struct sc760x_chip *sc, struct device *dev) sc->init_data.charger_disabled = of_property_read_bool(node, "init-charger-disabled"); + sc->irq_dis_cfg = + of_property_read_bool(node, "irq-dis-cfg"); + ret = device_property_read_u32(sc->dev, "iterm-microamp", &sc->init_data.iterm); @@ -1193,6 +1196,12 @@ static int sc760x_register_interrupt(struct sc760x_chip *sc, struct i2c_client * { int ret = 0; + if (sc->irq_dis_cfg) { + sc->irq = 0; + dev_err(sc->dev, "irq_dis_cfg is ture\n"); + return 0; + } + ret = devm_request_threaded_irq(sc->dev, client->irq, NULL, sc760x_irq_handler, IRQF_TRIGGER_FALLING | IRQF_ONESHOT, @@ -1202,6 +1211,8 @@ static int sc760x_register_interrupt(struct sc760x_chip *sc, struct i2c_client * return ret; } + disable_irq_wake(client->irq); + disable_irq(client->irq); sc->irq_enabled = false; sc->irq = client->irq; dev_err(sc->dev, "request thread irq success\n"); @@ -2099,9 +2110,13 @@ static int sc760x_suspend(struct device *dev) struct sc760x_chip *sc = dev_get_drvdata(dev); int ret = 0; dev_info(sc->dev, "Suspend successfully!"); - if (device_may_wakeup(dev)) - enable_irq_wake(sc->irq); - disable_irq(sc->irq); + + if (sc->irq) { + if (device_may_wakeup(dev)) + enable_irq_wake(sc->irq); + disable_irq(sc->irq); + sc->irq_enabled = false; + } ret = sc760x_set_adc_enable(sc, false); if (ret < 0) { dev_err(sc->dev, "%s Failed to disable adc(%d)\n", __func__, ret); @@ -2119,10 +2134,12 @@ static int sc760x_resume(struct device *dev) struct sc760x_chip *sc = dev_get_drvdata(dev); int ret = 0; dev_info(sc->dev, "Resume successfully!"); - if (device_may_wakeup(dev)) - disable_irq_wake(sc->irq); - enable_irq(sc->irq); - + if (sc->irq) { + if (device_may_wakeup(dev)) + disable_irq_wake(sc->irq); + enable_irq(sc->irq); + sc->irq_enabled = true; + } ret = sc760x_set_lowpower_mode(sc, false); if (ret < 0) { dev_err(sc->dev, "%s Failed to exit lowpower(%d)\n", __func__, ret); diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h index dc13dd7902ee..15add4f117cb 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.h @@ -201,6 +201,7 @@ struct sc760x_chip { int irq; bool irq_enabled; + bool irq_dis_cfg; int role; int sc760x_enable; u32 *thermal_levels; From 53ebca371d934edf27338dbecc4cdd16c906a623 Mon Sep 17 00:00:00 2001 From: Xiaojun Ji Date: Tue, 7 Nov 2023 22:49:22 -0500 Subject: [PATCH 15/45] Revert "(CR) moto_swap: Add SWP_SYNCHRONOUS_IO cmd for ioctl" This reverts commit 0d5cadb6c01d50b3a543c5842487bd358248e66f. Change-Id: Ic0cf12be9914cd115eb3ac1711ff8ae4c68c019e Reviewed-on: https://gerrit.mot.com/2789152 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Reviewed-by: Huosheng Liao Tested-by: Jira Key Submit-Approved: Jira Key --- drivers/moto_swap/zram-5.4/zram_drv.c | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/drivers/moto_swap/zram-5.4/zram_drv.c b/drivers/moto_swap/zram-5.4/zram_drv.c index ac5ce3275e17..7abdf6e8823b 100644 --- a/drivers/moto_swap/zram-5.4/zram_drv.c +++ b/drivers/moto_swap/zram-5.4/zram_drv.c @@ -1752,22 +1752,6 @@ static void zram_slot_free_notify(struct block_device *bdev, zram_slot_unlock(zram, index); } -static int zram_ioctl(struct block_device *bdev, fmode_t mode, - unsigned int cmd, unsigned long index) -{ - struct zram *zram; - int has_sync_io = 1; - - if (cmd != SWP_SYNCHRONOUS_IO) return -EINVAL; - - zram = bdev->bd_disk->private_data; - zram_slot_lock(zram, index); - has_sync_io = zram_test_flag(zram, index, ZRAM_WB) ? 0 : 1; - zram_slot_unlock(zram, index); - - return has_sync_io; -} - static int zram_rw_page(struct block_device *bdev, sector_t sector, struct page *page, unsigned int op) { @@ -1960,7 +1944,6 @@ static int zram_open(struct block_device *bdev, fmode_t mode) static const struct block_device_operations zram_devops = { .open = zram_open, .swap_slot_free_notify = zram_slot_free_notify, - .ioctl = zram_ioctl, .rw_page = zram_rw_page, .owner = THIS_MODULE }; From b1fe86f558631826eb28209495607512f5583170 Mon Sep 17 00:00:00 2001 From: 149 Date: Mon, 6 Nov 2023 18:21:22 +0800 Subject: [PATCH 16/45] add sc89890h vindpm_track WHY:The CDP port of the computer will be repeatedly disconnected when 97% of the power is plugged in,Add vindpm_track to adjust vindpm when the voltage is high Change-Id: I520c7778d644b5d14cea455dc2797395e228c0a9 Reviewed-on: https://gerrit.mot.com/2784390 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wei Xu Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- .../power/bq2589x_chg_mmi/bq2589x_charger.c | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c index f57bc679382b..5ab8b118eb65 100644 --- a/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c +++ b/drivers/power/bq2589x_chg_mmi/bq2589x_charger.c @@ -225,6 +225,7 @@ struct bq2589x { /* enable dynamic adjust vindpm */ bool enable_dynamic_adjust_vindpm; int vindpm_flag; + bool vindpm_track_flag; /*mmi qc3*/ bool mmi_qc3_support; @@ -2730,7 +2731,31 @@ static void bq2589x_monitor_workfunc(struct work_struct *work) schedule_delayed_work(&bq->monitor_work, 10 * HZ); } - +static void bq2589x_set_vindpm_track(struct bq2589x *bq, bool enable) +{ + u8 val; + int ret; + + ret = bq2589x_read_byte(bq, &val, 0x85); + if (ret < 0) { + bq2589x_write_byte(bq, 0x7D, 0x48); + bq2589x_write_byte(bq, 0x7D, 0x54); + bq2589x_write_byte(bq, 0x7D, 0x53); + bq2589x_write_byte(bq, 0x7D, 0x38); + bq2589x_read_byte(bq, &val, 0x85); + } + dev_info(bq->dev, "%s:0x85_1 = %x\n", __func__,val); + if (enable) + bq2589x_write_byte(bq, 0x85, val|0x06); + else + bq2589x_write_byte(bq, 0x85, val & 0xF9); + bq2589x_read_byte(bq, &val, 0x85); + dev_info(bq->dev, "%s:0x85_2 = %x\n", __func__,val); + bq2589x_write_byte(bq, 0x7D, 0x48); + bq2589x_write_byte(bq, 0x7D, 0x54); + bq2589x_write_byte(bq, 0x7D, 0x53); + bq2589x_write_byte(bq, 0x7D, 0x38); +} static void bq2589x_charger_irq_workfunc(struct work_struct *work) { @@ -2784,12 +2809,21 @@ static void bq2589x_charger_irq_workfunc(struct work_struct *work) bq->cv_tune = 0; bq2589x_set_chargevoltage(bq, bq->final_cv/1000); } + if (bq->part_no == SC89890H && bq->vindpm_track_flag) { + bq2589x_set_vindpm_track(bq,false); + bq->vindpm_track_flag = false; + } } else if ((bq->vbus_type != BQ2589X_VBUS_NONE) && (bq->vbus_type != BQ2589X_VBUS_OTG) && (!(bq->status & BQ2589X_STATUS_PLUGIN) || (reapsd_complete == true)) && state.online) { dev_info(bq->dev, "%s:adapter plugged in\n", __func__); bq->status |= BQ2589X_STATUS_PLUGIN; bq2589x_adapter_in_func(bq); + if ((bq->part_no == SC89890H) && (bq->vbus_type == BQ2589X_VBUS_USB_CDP) + && !bq->vindpm_track_flag) { + bq2589x_set_vindpm_track(bq,true); + bq->vindpm_track_flag = true; + } } From 17eeb3e0d874da403026fab2a5f2ffe89af24160 Mon Sep 17 00:00:00 2001 From: xuwt2 Date: Tue, 7 Nov 2023 15:08:14 +0800 Subject: [PATCH 17/45] mmi_charger: Add heartbeat-factory-interval 1, Change the default value of HEARTBEAT_FACTORY_MS to 5s 2, Add heartbeat-factory-interval settings in dts Change-Id: Icfaa37c7993d09c8a60fa796f3005999eee08a9c Signed-off-by: xuwt2 Reviewed-on: https://gerrit.mot.com/2787881 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yonghua Yan Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- drivers/power/mmi_charger/mmi_charger.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/drivers/power/mmi_charger/mmi_charger.c b/drivers/power/mmi_charger/mmi_charger.c index 67d1c6ae9809..d402099ad5ef 100644 --- a/drivers/power/mmi_charger/mmi_charger.c +++ b/drivers/power/mmi_charger/mmi_charger.c @@ -40,7 +40,7 @@ #define BATT_PAIR_ID_MASK ((1 << BATT_PAIR_ID_BITS) - 1) #define HEARTBEAT_DELAY_MS 60000 -#define HEARTBEAT_FACTORY_MS 1000 +#define HEARTBEAT_FACTORY_MS 5000 #define HEARTBEAT_DISCHARGE_MS 100000 #define HEARTBEAT_WAKEUP_INTRVAL_NS 70000000000 @@ -249,6 +249,7 @@ struct mmi_charger_chip { struct wakeup_source *mmi_hb_wake_source; struct alarm heartbeat_alarm; int heartbeat_interval; + int heartbeat_factory_interval; struct notifier_block mmi_reboot; struct notifier_block mmi_psy_notifier; struct delayed_work heartbeat_work; @@ -2280,7 +2281,7 @@ static void mmi_charger_heartbeat_work(struct work_struct *work) chip->suspended = 0; if (chip->factory_mode) - hb_resch_time = HEARTBEAT_FACTORY_MS; + hb_resch_time = chip->heartbeat_factory_interval; else if (chip->max_charger_rate != MMI_POWER_SUPPLY_CHARGE_RATE_NONE && chip->combo_status != POWER_SUPPLY_STATUS_FULL) hb_resch_time = chip->heartbeat_interval; @@ -2653,10 +2654,12 @@ static int mmi_charger_reboot(struct notifier_block *nb, if (!chip->factory_mode) return NOTIFY_DONE; + pr_info("Reboot notifier call mmi charger reboot!\n"); switch (event) { case SYS_POWER_OFF: factory_kill_disable = true; chip->force_charger_disabled = true; + cancel_delayed_work(&chip->heartbeat_work); schedule_delayed_work(&chip->heartbeat_work, msecs_to_jiffies(0)); while (chip->max_charger_rate != MMI_POWER_SUPPLY_CHARGE_RATE_NONE && (shutdown_triggered || chip->factory_syspoweroff_wait) && !chip->empty_vbat_shutdown_triggered) { @@ -2834,6 +2837,11 @@ static int mmi_parse_dt(struct mmi_charger_chip *chip) if (rc) chip->heartbeat_interval = HEARTBEAT_DELAY_MS; + rc = of_property_read_u32(node, "mmi,heartbeat-factory-interval", + &chip->heartbeat_factory_interval); + if (rc) + chip->heartbeat_factory_interval = HEARTBEAT_FACTORY_MS; + rc = of_property_read_u32(node, "mmi,dcp-power-max", &chip->dcp_pmax); if (rc) @@ -3080,6 +3088,7 @@ static void mmi_charger_shutdown(struct platform_device *pdev) { struct mmi_charger_chip *chip = platform_get_drvdata(pdev); + cancel_delayed_work(&chip->heartbeat_work); mmi_info(chip, "MMI charger shutdown\n"); return; From 3b174792abd8222b36c43f8d21c7ec9f84b93ca3 Mon Sep 17 00:00:00 2001 From: Wenge Zhu Date: Wed, 8 Nov 2023 15:59:29 +0800 Subject: [PATCH 18/45] Support factory test 1.Print factory test result log 2.Transfer test result to user Change-Id: Iea37bebcf621d463c77f842613804f8c2f1afee4 Signed-off-by: Wenge Zhu Reviewed-on: https://gerrit.mot.com/2789445 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../goodix_gt96x_mmi/goodix_ts_inspect.c | 103 ++++++++++++++---- 1 file changed, 84 insertions(+), 19 deletions(-) diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c index a5b05ac7974c..5704f0dd95f6 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c @@ -31,7 +31,7 @@ #define DISCARD_FRAMES 3 -#define GOODIX_TEST_FILE_NAME "goodix_test_limits" +#define GOODIX_TEST_FILE_NAME "gdx_test_limits" #define MAX_PROC_OUTPUT_SIZE 2 * 1024 * 1024 #define MAX_DATA_BUFFER 30000 #define MAX_SHORT_NUM 15 @@ -144,6 +144,7 @@ enum GTP_MUTUAL_DATA_TYPE { static int output_offset; static char *output_buf; +static bool auto_test_result; /* berlin A drv-sen map */ static u8 brl_a_drv_map[] = { @@ -2213,6 +2214,8 @@ static int goodix_save_header(struct goodix_ts_test *ts_test) proc_append_string("%s\n", result ? "NG" : "OK"); proc_append_string("GT%s\n%d\n", ts->fw_version.patch_pid, ts->fw_version.sensor_id); + auto_test_result = !result; + ts_info("GT%s TP test total result: %d", ts->fw_version.patch_pid, auto_test_result); /* save test config */ goodix_save_test_config(ts_test); @@ -2225,64 +2228,82 @@ static int goodix_save_header(struct goodix_ts_test *ts_test) if (ts_test->test_params.test_items[GTP_VERSION_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_VERSION_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_CHIP_KEY_INFO_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_CHIP_KEY_INFO_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_CUSTOM_INFO_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_CUSTOM_INFO_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_CAP_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_CAP_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_DELTA_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_DELTA_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_NOISE_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_NOISE_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_SELFNOISE_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_SELFNOISE_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_SELFCAP_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_SELFCAP_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } if (ts_test->test_params.test_items[GTP_SHORT_TEST]) { if (GTP_TEST_OK == ts_test->test_result[GTP_SHORT_TEST]) proc_append_string("\n"); - else - proc_append_string("\n"); + else { + proc_append_string("\n"); + ts_err("\n"); + } } proc_append_string("\n"); @@ -2753,9 +2774,46 @@ static const struct file_operations auto_test_ops = { }; #endif +static int auto_test_result_proc_show(struct seq_file *file, void *v) +{ + struct goodix_ts_core * core_data = (struct goodix_ts_core *)file->private; + if (!core_data) { + ts_err("no goodix_ts_core set"); + return -EIO; + } + + seq_printf(file, "result=%d\n", auto_test_result); + + return 0; +} + +static int auto_test_result_proc_open(struct inode *inode, struct file *file) +{ + return single_open_size(file, auto_test_result_proc_show, PDE_DATA(inode), PAGE_SIZE * 10); +} + +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 6, 0) +static const struct file_operations auto_test_result_ops = { + .owner = THIS_MODULE, + .open = auto_test_result_proc_open, + .read = seq_read, + .llseek = seq_lseek, + .release = seq_release, +}; +#else +static const struct proc_ops auto_test_result_ops = { + .proc_open = auto_test_result_proc_open, + .proc_read = seq_read, + .proc_lseek = seq_lseek, + .proc_release = single_release, +}; +#endif + + int inspect_module_init(struct goodix_ts_core *core_data) { struct proc_dir_entry *proc_entry; + struct proc_dir_entry *result_proc_entry; proc_entry = proc_create_data("auto_test", 0660, core_data->proc_dir_entry, &auto_test_ops, core_data); @@ -2764,6 +2822,13 @@ int inspect_module_init(struct goodix_ts_core *core_data) return -ENODEV; } + result_proc_entry = proc_create_data("auto_test_result", + 0660, core_data->proc_dir_entry, &auto_test_result_ops, core_data); + if (!result_proc_entry) { + ts_err("failed to create auto_test_result proc entry"); + return -ENODEV; + } + ts_info("inspect module init success"); return 0; } From 6019745b7a5be0984732f636ab75b27d796215f2 Mon Sep 17 00:00:00 2001 From: Wenge Zhu Date: Tue, 7 Nov 2023 22:08:58 +0800 Subject: [PATCH 19/45] Upgrade gt9615 touch driver version TP: Upgrade gt9615 touch driver version to v1.3.15 Change-Id: Iee4a5981771c4d740aa1cab2ee514c1ec36ec7e4 Signed-off-by: Wenge Zhu Reviewed-on: https://gerrit.mot.com/2788656 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../goodix_gt96x_mmi/goodix_ts_core.h | 2 +- .../goodix_gt96x_mmi/goodix_ts_inspect.c | 79 ++++++++++++++++++- 2 files changed, 76 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h index 2c8fc37e51fc..c93897a31f62 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h @@ -49,7 +49,7 @@ #define GOODIX_CORE_DRIVER_NAME "gdx_cli" #define GOODIX_PEN_DRIVER_NAME "goodix_ts,pen" -#define GOODIX_DRIVER_VERSION "v1.3.14" +#define GOODIX_DRIVER_VERSION "v1.3.15" #define GOODIX_MAX_TOUCH 10 #define GOODIX_MAX_KEY 10 #define GOODIX_PEN_MAX_PRESSURE 4096 diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c index 5704f0dd95f6..a0e4371d2ad1 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_inspect.c @@ -112,6 +112,17 @@ #define DRV_SEN_SELFCODE_REG_NOT 0x14152 #define DIFF_CODE_DATA_REG_NOT 0x14734 +/* marseille */ +#define MAX_DRV_NUM_MAR 20 +#define MAX_SEN_NUM_MAR 34 +#define SHORT_TEST_TIME_REG_MAR 0x138AC +#define SHORT_TEST_STATUS_REG_MAR 0x12400 +#define SHORT_TEST_RESULT_REG_MAR 0x12408 +#define DRV_DRV_SELFCODE_REG_MAR 0x12448 +#define SEN_SEN_SELFCODE_REG_MAR 0x127E0 +#define DRV_SEN_SELFCODE_REG_MAR 0x137D0 +#define DIFF_CODE_DATA_REG_MAR 0x1383E + #define ABS(val) ((val < 0)? -(val) : val) #define MAX(a, b) ((a > b)? a : b) @@ -213,6 +224,19 @@ static u8 not_sen_map[] = { 28, 29, 30, 31, 32, 33, 34 }; +/* marseille drv-sen map */ +static u8 mar_drv_map[] = { + 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, +}; + +static u8 mar_sen_map[] = { + 0, 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 +}; + typedef struct __attribute__((packed)) { u8 result; u8 drv_drv_num; @@ -323,6 +347,23 @@ struct params_info_t params_not = { 0, }; +struct params_info_t params_mar = { + MAX_DRV_NUM_MAR, + MAX_SEN_NUM_MAR, + mar_drv_map, + mar_sen_map, + SHORT_TEST_TIME_REG_MAR, + SHORT_TEST_STATUS_REG_MAR, + SHORT_TEST_RESULT_REG_MAR, + DRV_DRV_SELFCODE_REG_MAR, + SEN_SEN_SELFCODE_REG_MAR, + DRV_SEN_SELFCODE_REG_MAR, + DIFF_CODE_DATA_REG_MAR, + 0, + 0, + 0, +}; + struct ts_test_params { bool test_items[MAX_TEST_ITEMS]; @@ -403,8 +444,10 @@ static int cal_cha_to_cha_res(struct goodix_ts_test *ts_test, int v1, int v2) return (v1 - v2) * 74 / v2 + 20; else if (ts_test->ts->bus->ic_type == IC_TYPE_BERLIN_D) return (v1 / v2 - 1) * 70 + 59; + else if (ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) + return (v1 / v2 - 1) * 14; else - return (v1 / v2 - 1) * 55 + 45; + return (v1 / v2 - 1) * 55 + 45; // nottingham } static int cal_cha_to_avdd_res(struct goodix_ts_test *ts_test, int v1, int v2) @@ -415,8 +458,10 @@ static int cal_cha_to_avdd_res(struct goodix_ts_test *ts_test, int v1, int v2) return 64 * (2 * v2 - 25) * 99 / v1 - 60; else if (ts_test->ts->bus->ic_type == IC_TYPE_BERLIN_D) return 64 * (2 * v2 - 25) * 93 / v1 - 20; + else if (ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) + return 64 * (2 * v2 - 25) * 72 / v1 - 13; else - return 64 * (2 * v2 - 25) * 76 / v1 - 15; + return 64 * (2 * v2 - 25) * 76 / v1 - 15; // nottingham } static int cal_cha_to_gnd_res(struct goodix_ts_test *ts_test, int v) @@ -427,8 +472,10 @@ static int cal_cha_to_gnd_res(struct goodix_ts_test *ts_test, int v) return 150500 / v - 60; else if (ts_test->ts->bus->ic_type == IC_TYPE_BERLIN_D) return 145000 / v - 15; + else if (ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) + return 28800 / v - 13; else - return 120000 / v - 16; + return 120000 / v - 16; // nottingham } static int ts_test_reset(struct goodix_ts_test *ts_test, @@ -660,6 +707,8 @@ static void goodix_init_params(struct goodix_ts_test *ts_test) test_params->params_info = ¶ms_brd; else if (ts_test->ts->bus->ic_type == IC_TYPE_NOTTINGHAM) test_params->params_info = ¶ms_not; + else if (ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) + test_params->params_info = ¶ms_mar; } static int goodix_init_testlimits(struct goodix_ts_test *ts_test) @@ -1415,6 +1464,27 @@ static void goodix_shortcircut_test(struct goodix_ts_test *ts_test) return; } + if (ts_test->ts->bus->ic_type == IC_TYPE_MARSEILLE) { + ts_test_read(ts_test, 0x10400, &status, 1); + if (status != 0xFD) { + ts_err("marseille short status[0x%02x] != 0xFD", status); + return; + } + status = 0; + ts_test_write(ts_test, 0x10400, &status, 1); + retry = 20; + while (retry--) { + msleep(20); + ts_test_read(ts_test, 0x10400, &status, 1); + if (status == 0xAA) + break; + } + if (retry < 0) { + ts_err("marseille short status[0x%02x] != 0xAA", status); + return; + } + } + msleep(500); //BerlinB quick check need to delay at least 500ms /* get short test time */ @@ -2054,7 +2124,8 @@ static void goodix_check_key_info_test(struct goodix_ts_test *ts_test) //read chip load info for berlin if (cd->bus->ic_type == IC_TYPE_BERLIN_B || cd->bus->ic_type == IC_TYPE_BERLIN_D || - cd->bus->ic_type == IC_TYPE_NOTTINGHAM) { + cd->bus->ic_type == IC_TYPE_NOTTINGHAM || + cd->bus->ic_type == IC_TYPE_MARSEILLE) { if (cd->bus->ic_type == IC_TYPE_BERLIN_B) chip_info_addr = 0x3F300; else From 48c39ff2fc06053836750b22584f7078fbade2e6 Mon Sep 17 00:00:00 2001 From: xuwt2 Date: Wed, 8 Nov 2023 17:35:26 +0800 Subject: [PATCH 20/45] sc760x: Relax wakelock In charger_detect_work_func, Make sure that relax wakelock Change-Id: I089247f8b94c73d76cdf442d79fa2eae7fa63de0 Signed-off-by: xuwt2 Reviewed-on: https://gerrit.mot.com/2789606 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wentao Xu Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c index 601ee675484f..f538eebcd217 100644 --- a/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c +++ b/drivers/power/sc760x_charger_mmi/sc760x_charger_mmi.c @@ -1432,11 +1432,6 @@ static void charger_detect_work_func(struct work_struct *work) goto err; } - if (state_changed) { - sc760x_dump_reg(sc); - power_supply_changed(sc->charger_psy); - } - return; err: //release wakelock if (state_changed) From efe1db2739892bd0e2c9a8f86e238ab0bdaec336 Mon Sep 17 00:00:00 2001 From: Wenge Zhu Date: Thu, 9 Nov 2023 14:45:33 +0800 Subject: [PATCH 21/45] Support touch mmi class for GT9615 TP: Support touch mmi class for GT9615. Change-Id: I9cf4d0f811ff48d7480778266a41b3bcd6ad4296 Signed-off-by: Wenge Zhu Reviewed-on: https://gerrit.mot.com/2790500 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Jichao Zou Submit-Approved: Jira Key --- .../touchscreen/goodix_gt96x_mmi/Android.mk | 3 + .../input/touchscreen/goodix_gt96x_mmi/Kbuild | 9 + .../goodix_gt96x_mmi/goodix_brl_spi.c | 2 + .../goodix_gt96x_mmi/goodix_ts_core.c | 115 ++++++- .../goodix_gt96x_mmi/goodix_ts_core.h | 19 ++ .../goodix_gt96x_mmi/goodix_ts_mmi.c | 320 ++++++++++++++++++ .../goodix_gt96x_mmi/goodix_ts_mmi.h | 33 ++ 7 files changed, 499 insertions(+), 2 deletions(-) create mode 100644 drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.c create mode 100644 drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.h diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/Android.mk b/drivers/input/touchscreen/goodix_gt96x_mmi/Android.mk index b8a5ff7cf855..977c212fcdc2 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/Android.mk +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/Android.mk @@ -9,6 +9,9 @@ else endif endif +ifeq ($(DRM_PANEL_EVENT_NOTIFICATIONS),true) + KBUILD_OPTIONS += CONFIG_DRM_PANEL_EVENT_NOTIFICATIONS=y +endif include $(CLEAR_VARS) LOCAL_MODULE := goodix_gt96x_mmi.ko diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/Kbuild b/drivers/input/touchscreen/goodix_gt96x_mmi/Kbuild index 8d599929b010..fab6fa25a372 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/Kbuild +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/Kbuild @@ -20,4 +20,13 @@ ifneq ($(filter m y,$(CONFIG_TOUCHSCREEN_GOODIX_BRL_SPI)),) EXTRA_CFLAGS += -DCONFIG_TOUCHSCREEN_GOODIX_BRL_SPI endif +ifneq ($(filter m y,$(CONFIG_INPUT_TOUCHSCREEN_MMI)),) + EXTRA_CFLAGS += -DCONFIG_INPUT_TOUCHSCREEN_MMI + goodix_gt96x_mmi-objs += goodix_ts_mmi.o +endif + +ifneq ($(filter m y, $(CONFIG_DRM_PANEL_EVENT_NOTIFICATIONS)),) + EXTRA_CFLAGS += -DCONFIG_DRM_PANEL_EVENT_NOTIFICATIONS +endif + KBUILD_EXTRA_SYMBOLS += $(CURDIR)/$(KBUILD_EXTMOD)/../touchscreen_mmi/$(GKI_OBJ_MODULE_DIR)/Module.symvers diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c index ebb58e111e1a..8d46aff6958c 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_brl_spi.c @@ -222,6 +222,8 @@ static int goodix_spi_probe(struct spi_device *spi) dev_res->pdev.id = dev_res->id; dev_res->pdev.num_resources = 0; + spi_set_drvdata(spi, &dev_res->pdev); + /* register platform device, then the goodix_ts_core * module will probe the touch deivce. */ diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c index f540e7d21902..1cb01b727970 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.c @@ -23,12 +23,15 @@ #include #define INPUT_TYPE_B_PROTOCOL #endif +#include "goodix_ts_mmi.h" /* goodix fb test */ // #include "../../../video/fbdev/core/fb_firefly.h" #define GOODIX_DEFAULT_CFG_NAME "goodix_cfg_group.cfg" struct goodix_device_manager goodix_devices; +#define PINCTRL_STATE_ACTIVE "cli_pmx_ts_active" +#define PINCTRL_STATE_SUSPEND "cli_pmx_ts_suspend" static void goodix_device_manager_init(void) { @@ -886,6 +889,16 @@ static int goodix_parse_dt(struct device_node *node, board_data->pen_enable = of_property_read_bool(node, "goodix,pen-enable"); + /* get ic compatible */ + r = of_property_read_string(node, "compatible", &name_tmp); + if (r) { + ts_err("get compatible failed"); + return r; + } else { + ts_info("ic_name form dt: %s", name_tmp); + strncpy(board_data->ic_name, name_tmp, sizeof(board_data->ic_name)); + } + ts_info("[DT]x:%d, y:%d, w:%d, p:%d sleep_enable:%d pen_enable:%d", board_data->panel_max_x, board_data->panel_max_y, board_data->panel_max_w, board_data->panel_max_p, @@ -1156,6 +1169,54 @@ int goodix_ts_power_off(struct goodix_ts_core *cd) return ret; } +/** + * goodix_ts_pinctrl_init - Get pinctrl handler and pinctrl_state + * @core_data: pointer to touch core data + * return: 0 ok, <0 failed + */ +static int goodix_ts_pinctrl_init(struct goodix_ts_core *core_data) +{ + int r = 0; + + /* get pinctrl handler from of node */ + core_data->pinctrl = devm_pinctrl_get(core_data->bus->dev); + if (IS_ERR_OR_NULL(core_data->pinctrl)) { + ts_info("Failed to get pinctrl handler[need confirm]"); + core_data->pinctrl = NULL; + return -EINVAL; + } + ts_debug("success get pinctrl"); + /* active state */ + core_data->pin_sta_active = pinctrl_lookup_state(core_data->pinctrl, + PINCTRL_STATE_ACTIVE); + if (IS_ERR_OR_NULL(core_data->pin_sta_active)) { + r = PTR_ERR(core_data->pin_sta_active); + ts_err("Failed to get pinctrl state:%s, r:%d", + PINCTRL_STATE_ACTIVE, r); + core_data->pin_sta_active = NULL; + goto exit_pinctrl_put; + } + ts_info("success get avtive pinctrl state"); + + /* suspend state */ + core_data->pin_sta_suspend = pinctrl_lookup_state(core_data->pinctrl, + PINCTRL_STATE_SUSPEND); + if (IS_ERR_OR_NULL(core_data->pin_sta_suspend)) { + r = PTR_ERR(core_data->pin_sta_suspend); + ts_err("Failed to get pinctrl state:%s, r:%d", + PINCTRL_STATE_SUSPEND, r); + core_data->pin_sta_suspend = NULL; + goto exit_pinctrl_put; + } + ts_info("success get suspend pinctrl state"); + + return 0; +exit_pinctrl_put: + devm_pinctrl_put(core_data->pinctrl); + core_data->pinctrl = NULL; + return r; +} + /** * goodix_ts_gpio_setup - Request gpio resources from GPIO subsysten * @core_data: pointer to touch core data @@ -1443,7 +1504,7 @@ int goodix_ts_esd_init(struct goodix_ts_core *cd) return 0; } -static void goodix_ts_release_connects(struct goodix_ts_core *core_data) +void goodix_ts_release_connects(struct goodix_ts_core *core_data) { struct input_dev *input_dev = core_data->input_dev; struct input_dev *pen_dev = core_data->pen_dev; @@ -1473,6 +1534,7 @@ static void goodix_ts_release_connects(struct goodix_ts_core *core_data) core_data->hw_ops->after_event_handler(core_data); } +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI /** * goodix_ts_suspend - Touchscreen suspend function * Called by PM/FB/EARLYSUSPEN module to put the device to sleep @@ -1552,6 +1614,7 @@ static void goodix_ts_resume_work(struct work_struct *work) container_of(work, struct goodix_ts_core, resume_work); goodix_ts_resume(cd); } +#endif #if IS_ENABLED(CONFIG_FB) /** @@ -1580,7 +1643,7 @@ int goodix_ts_fb_notifier_callback(struct notifier_block *self, return 0; } -#elif IS_ENABLED(CONFIG_PM) +#elif IS_ENABLED(CONFIG_PM) && !defined(CONFIG_INPUT_TOUCHSCREEN_MMI) /** * goodix_ts_pm_suspend - PM suspend function * Called by kernel during system suspend phrase @@ -1607,6 +1670,29 @@ static const struct dev_pm_ops dev_pm_ops = { .suspend = goodix_ts_pm_suspend, .resume = goodix_ts_pm_resume, }; +#else +/** + * goodix_ts_pm_suspend - PM suspend function + * Called by kernel during system suspend phrase + */ +static int goodix_ts_pm_suspend(struct device *dev) +{ + ts_info("system enters into pm_suspend"); + return 0; +} +/** + * goodix_ts_pm_resume - PM resume function + * Called by kernel during system wakeup + */ +static int goodix_ts_pm_resume(struct device *dev) +{ + ts_info("system resumes from pm_suspend"); + return 0; +} +static const struct dev_pm_ops dev_pm_ops = { + .suspend = goodix_ts_pm_suspend, + .resume = goodix_ts_pm_resume, +}; #endif static void goodix_self_check(struct work_struct *work) @@ -1679,7 +1765,9 @@ int goodix_ts_stage2_init(struct goodix_ts_core *cd) /* inspect init */ inspect_module_init(cd); +#ifndef CONFIG_INPUT_TOUCHSCREEN_MMI INIT_WORK(&cd->resume_work, goodix_ts_resume_work); +#endif /* Do self check on first boot */ INIT_WORK(&cd->self_check_work, goodix_self_check); @@ -1867,6 +1955,24 @@ static int goodix_ts_probe(struct platform_device *pdev) goto err_out; } + /* Pinctrl handle is optional. */ + ret = goodix_ts_pinctrl_init(core_data); + if (!ret && core_data->pinctrl) { + ret = pinctrl_select_state(core_data->pinctrl, + core_data->pin_sta_active); + if (ret < 0) + ts_err("Failed to select active pinstate, r:%d", ret); + } + +#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI + ts_info("%s:goodix_ts_mmi_dev_register",__func__); + ret = goodix_ts_mmi_dev_register(pdev); + if (ret) { + ts_info("Failed register touchscreen mmi."); + goto err_out; + } +#endif + /* debug node init */ ret = goodix_tools_init(core_data); if (ret) { @@ -1900,6 +2006,11 @@ static int goodix_ts_remove(struct platform_device *pdev) struct goodix_ts_hw_ops *hw_ops = core_data->hw_ops; struct goodix_ts_esd *ts_esd = &core_data->ts_esd; +#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI + ts_info("%s:goodix_ts_mmi_dev_unregister",__func__); + goodix_ts_mmi_dev_unregister(pdev); +#endif + goodix_tools_exit(core_data); goodix_fw_update_uninit(core_data); diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h index c93897a31f62..cf554d226193 100644 --- a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_core.h @@ -440,6 +440,7 @@ struct goodix_module { * @fw_name: name of the firmware image */ struct goodix_ts_board_data { + char ic_name[GOODIX_MAX_STR_LABLE_LEN]; char avdd_name[GOODIX_MAX_STR_LABLE_LEN]; char iovdd_name[GOODIX_MAX_STR_LABLE_LEN]; int reset_gpio; @@ -736,6 +737,9 @@ struct goodix_ts_core { struct goodix_ic_config ic_configs[GOODIX_MAX_CONFIG_GROUP]; struct regulator *avdd; struct regulator *iovdd; + struct pinctrl *pinctrl; + struct pinctrl_state *pin_sta_active; + struct pinctrl_state *pin_sta_suspend; u32 gesture_type; char input_name[32]; @@ -785,6 +789,17 @@ extern bool debug_log_flag; {if (debug_log_flag) \ pr_info("[GDX-CLI-DBG][%s] "fmt"\n", __func__, ##arg);} +/* + * get board data pointer + */ +static inline struct goodix_ts_board_data *board_data( + struct goodix_ts_core *core) +{ + if (!core) + return NULL; + return &(core->board_data); +} + struct goodix_ts_hw_ops *goodix_get_hw_ops(void); int goodix_get_config_proc(struct goodix_ts_core *cd); @@ -815,4 +830,8 @@ void goodix_ts_esd_off(struct goodix_ts_core *cd); int goodix_ts_report_gesture(struct goodix_ts_core *cd, struct goodix_ts_event *event); +int goodix_ts_power_on(struct goodix_ts_core *cd); +int goodix_ts_power_off(struct goodix_ts_core *cd); +void goodix_ts_release_connects(struct goodix_ts_core *core_data); + #endif diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.c b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.c new file mode 100644 index 000000000000..5c4ac5171687 --- /dev/null +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.c @@ -0,0 +1,320 @@ +/* + * Copyright (C) 2023 Motorola Mobility LLC + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "goodix_ts_mmi.h" +#include +#include + +#define GET_GOODIX_DATA(dev) { \ + pdev = dev_get_drvdata(dev); \ + if (!pdev) { \ + ts_err("Failed to get platform device"); \ + return -ENODEV; \ + } \ + core_data = platform_get_drvdata(pdev); \ + if (!core_data) { \ + ts_err("Failed to get driver data"); \ + return -ENODEV; \ + } \ +} + +static int goodix_ts_mmi_methods_get_vendor(struct device *dev, void *cdata) { + return scnprintf(TO_CHARP(cdata), TS_MMI_MAX_VENDOR_LEN, "%s", "goodix"); +} + +static int goodix_ts_mmi_methods_get_productinfo(struct device *dev, void *cdata) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + struct goodix_ts_board_data *ts_bdata; + char* ic_info; + + GET_GOODIX_DATA(dev); + + ts_bdata = board_data(core_data); + if (!ts_bdata) { + ts_err("Failed to get ts board data"); + return -ENODEV; + } + + ic_info = strstr(ts_bdata->ic_name, ","); + ic_info++; + + return scnprintf(TO_CHARP(cdata), TS_MMI_MAX_VENDOR_LEN, "%s", ic_info); +} + +#define TOUCH_CFG_VERSION_ADDR 0x10076 +static int goodix_ts_mmi_methods_get_build_id(struct device *dev, void *cdata) { + int ret; + struct platform_device *pdev; + struct goodix_ts_core *core_data; + u32 cfg_id; + + GET_GOODIX_DATA(dev); + + ret = core_data->hw_ops->read(core_data, TOUCH_CFG_VERSION_ADDR, + (u8*)&cfg_id, sizeof(cfg_id)); + if (ret) { + ts_info("failed get fw version data, %d", ret); + return -EINVAL; + } + + return snprintf(TO_CHARP(cdata), TS_MMI_MAX_ID_LEN, "%04x", le32_to_cpu(cfg_id)); +} + +#define TOUCH_FW_VERSION_ADDR 0x1007E +/*return firmware version*/ +static int goodix_ts_mmi_methods_get_config_id(struct device *dev, void *cdata) { + int ret; + struct platform_device *pdev; + struct goodix_ts_core *core_data; + u8 fw_id[4] = {0}; + + GET_GOODIX_DATA(dev); + + ret = core_data->hw_ops->read(core_data, TOUCH_FW_VERSION_ADDR, + fw_id, sizeof(fw_id)); + if (ret) { + ts_info("failed get fw version data, %d", ret); + return -EINVAL; + } + + return snprintf(TO_CHARP(cdata), TS_MMI_MAX_ID_LEN, "%02x%02x%02x%02x", + fw_id[0], fw_id[1], fw_id[2], fw_id[3]); +} + +static int goodix_ts_mmi_methods_get_bus_type(struct device *dev, void *idata) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + TO_INT(idata) = core_data->bus->bus_type == GOODIX_BUS_TYPE_I2C ? + TOUCHSCREEN_MMI_BUS_TYPE_I2C : TOUCHSCREEN_MMI_BUS_TYPE_SPI; + return 0; +} + +static int goodix_ts_mmi_methods_get_irq_status(struct device *dev, void *idata) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + struct goodix_ts_board_data *ts_bdata; + + GET_GOODIX_DATA(dev); + + ts_bdata = board_data(core_data); + if (!ts_bdata) { + ts_err("Failed to get ts board data"); + return -ENODEV; + } + TO_INT(idata) = gpio_get_value(ts_bdata->irq_gpio); + return 0; +} + +static int goodix_ts_mmi_methods_get_drv_irq(struct device *dev, void *idata) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + TO_INT(idata) = atomic_read(&core_data->irq_enabled); + return 0; +} + +static int goodix_ts_mmi_methods_get_poweron(struct device *dev, void *idata) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + TO_INT(idata) = core_data->power_on; + return 0; +} + +static int goodix_ts_mmi_methods_get_flashprog(struct device *dev, void *idata) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + TO_INT(idata) = core_data->update_ctrl.status; + return 0; +} + +/* reset chip + * type:can control software reset and hardware reset, + * but GOODIX has no software reset, + * so the type parameter is not used here. + */ +static int goodix_ts_mmi_methods_reset(struct device *dev, int type) { + int ret = -ENODEV; + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + if (core_data->hw_ops->reset) + ret = core_data->hw_ops->reset(core_data, GOODIX_NORMAL_RESET_DELAY_MS); + return ret; +} + +static int goodix_ts_mmi_methods_drv_irq(struct device *dev, int state) { + int ret = -ENODEV; + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + if (core_data->hw_ops->irq_enable) + ret = core_data->hw_ops->irq_enable(core_data, !(!state)); + + return ret; +} + +static int goodix_ts_mmi_methods_power(struct device *dev, int on) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + if (on == TS_MMI_POWER_ON) + return goodix_ts_power_on(core_data); + else if(on == TS_MMI_POWER_OFF) + return goodix_ts_power_off(core_data); + else { + ts_err("Invalid power parameter %d.\n", on); + return -EINVAL; + } +} + +static int goodix_ts_mmi_pre_suspend(struct device *dev) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + ts_info("Suspend start"); + atomic_set(&core_data->suspended, 1); + + /* + * notify suspend event, inform the esd protector + * and charger detector to turn off the work + */ + goodix_ts_esd_off(core_data); + + return 0; +} + +static int goodix_ts_mmi_panel_state(struct device *dev, + enum ts_mmi_pm_mode from, enum ts_mmi_pm_mode to) +{ + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + switch (to) { + case TS_MMI_PM_GESTURE: + break; + case TS_MMI_PM_DEEPSLEEP: + break; + case TS_MMI_PM_ACTIVE: + break; + default: + ts_err("Invalid power state parameter %d.\n", to); + return -EINVAL; + } + + return 0; +} + +static int goodix_ts_mmi_post_suspend(struct device *dev) { + struct goodix_ts_core *core_data; + struct platform_device *pdev; + + GET_GOODIX_DATA(dev); + + goodix_ts_release_connects(core_data); + + ts_info("Suspend end"); + return 0; +} + +static int goodix_ts_mmi_pre_resume(struct device *dev) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + ts_info("Resume start"); + GET_GOODIX_DATA(dev); + + atomic_set(&core_data->suspended, 0); + return 0; +} + +static int goodix_ts_mmi_post_resume(struct device *dev) { + struct platform_device *pdev; + struct goodix_ts_core *core_data; + + GET_GOODIX_DATA(dev); + + /* open esd */ + goodix_ts_esd_on(core_data); + ts_info("Resume end"); + return 0; +} +static struct ts_mmi_methods goodix_ts_mmi_methods = { + .get_vendor = goodix_ts_mmi_methods_get_vendor, + .get_productinfo = goodix_ts_mmi_methods_get_productinfo, + .get_build_id = goodix_ts_mmi_methods_get_build_id, + .get_config_id = goodix_ts_mmi_methods_get_config_id, + .get_bus_type = goodix_ts_mmi_methods_get_bus_type, + .get_irq_status = goodix_ts_mmi_methods_get_irq_status, + .get_drv_irq = goodix_ts_mmi_methods_get_drv_irq, + .get_poweron = goodix_ts_mmi_methods_get_poweron, + .get_flashprog = goodix_ts_mmi_methods_get_flashprog, + /* SET methods */ + .reset = goodix_ts_mmi_methods_reset, + .drv_irq = goodix_ts_mmi_methods_drv_irq, + .power = goodix_ts_mmi_methods_power, + /* PM callback */ + .pre_suspend = goodix_ts_mmi_pre_suspend, + .panel_state = goodix_ts_mmi_panel_state, + .post_suspend = goodix_ts_mmi_post_suspend, + .pre_resume = goodix_ts_mmi_pre_resume, + .post_resume = goodix_ts_mmi_post_resume, +}; + +int goodix_ts_mmi_dev_register(struct platform_device *pdev) { + int ret; + struct goodix_ts_core *core_data; + + core_data = platform_get_drvdata(pdev); + if (!core_data) { + ts_err("Failed to get driver data"); + return -ENODEV; + } + ret = ts_mmi_dev_register(core_data->bus->dev, &goodix_ts_mmi_methods); + if (ret) { + dev_err(&pdev->dev, "Failed to register ts mmi\n"); + return ret; + } + + return 0; +} + +void goodix_ts_mmi_dev_unregister(struct platform_device *pdev) { + struct goodix_ts_core *core_data; + + core_data = platform_get_drvdata(pdev); + if (!core_data) + ts_err("Failed to get driver data"); + ts_mmi_dev_unregister(core_data->bus->dev); +} diff --git a/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.h b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.h new file mode 100644 index 000000000000..1abf4c84a06c --- /dev/null +++ b/drivers/input/touchscreen/goodix_gt96x_mmi/goodix_ts_mmi.h @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2023 Motorola Mobility LLC + * + * This software is licensed under the terms of the GNU General Public + * License version 2, as published by the Free Software Foundation, and + * may be copied, distributed, and modified under those terms. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ +#ifndef __GOODIX_TS_MMI_H__ +#define __GOODIX_TS_MMI_H__ + +#include +#include +#include +#include "goodix_ts_core.h" + +#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI +int goodix_ts_mmi_dev_register(struct platform_device *ts_device); +void goodix_ts_mmi_dev_unregister(struct platform_device *ts_device); +#else +static int inline goodix_ts_mmi_dev_register(struct platform_device *ts_device) { + return -ENOSYS; +} +static int inline goodix_ts_mmi_dev_unregister(struct platform_device *ts_device) { + return -ENOSYS; +} +#endif + +#endif From 908b9dec72e32f9f03ba106bea694e579715c4ad Mon Sep 17 00:00:00 2001 From: longc Date: Mon, 6 Nov 2023 18:07:39 +0800 Subject: [PATCH 22/45] cusco: WL2866d bringup [1/4] details: same Makefile used with WL2864c; to fix compile error. Change-Id: I881d7bc4ede642a9a7f2a2e5d2969609ca11735b Signed-off-by: longc Reviewed-on: https://gerrit.mot.com/2786426 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Reviewed-by: Long Cheng Reviewed-by: Reviewed-by: Simon C Reviewed-by: Reviewed-by: Reviewed-by: Zhichao Chen Reviewed-by: Lu Lu Submit-Approved: Lu Lu Reviewed-by: Huosheng Liao --- drivers/regulator/wl2866d/Makefile | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/regulator/wl2866d/Makefile b/drivers/regulator/wl2866d/Makefile index 4191dea22679..365d3fe73a44 100644 --- a/drivers/regulator/wl2866d/Makefile +++ b/drivers/regulator/wl2866d/Makefile @@ -1,10 +1,15 @@ -KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build +all: modules -all: - $(MAKE) -C $(KERNEL_SRC) M=$(shell pwd) modules $(KBUILD_OPTIONS) +modules: + $(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS) modules_install: - $(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(shell pwd) modules_install + $(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install + +%: + $(MAKE) -C $(KERNEL_SRC) M=$(M) $@ $(KBUILD_OPTIONS) clean: - $(MAKE) -C $(KERNEL_SRC) M=$(PWD) clean + rm -f *.o *.ko *.mod.c *.mod.o *~ .*.cmd Module.symvers + rm -rf .tmp_versions + From 47cbbdadeb0080f2b75d9760e0a1080f76db64c8 Mon Sep 17 00:00:00 2001 From: zhongfeihong Date: Thu, 9 Nov 2023 13:46:28 +0800 Subject: [PATCH 23/45] kernel/fogo:fix The device automatically restarts during use fogo: fix spi read write driver Change-Id: I5a74bee3eb109f898529f1459303c18544ca2ba1 Reviewed-on: https://gerrit.mot.com/2790440 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../input/touchscreen/nova_0flash_mmi/nt36xxx.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c index 0fb79932d545..85ec9f5ac2e0 100644 --- a/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c +++ b/drivers/input/touchscreen/nova_0flash_mmi/nt36xxx.c @@ -414,7 +414,12 @@ int32_t CTP_SPI_READ(struct spi_device *client, uint8_t *buf, uint16_t len) while (retries < 5) { ret = spi_read_write(client, buf, len, NVTREAD); - if (ret == 0) break; + if (ret == 0) + break; + else if (ret == -ETIMEDOUT) { + NVT_ERR("read error, ret = %d\n", ret); + break; + } retries++; } @@ -448,7 +453,13 @@ int32_t CTP_SPI_WRITE(struct spi_device *client, uint8_t *buf, uint16_t len) while (retries < 5) { ret = spi_read_write(client, buf, len, NVTWRITE); - if (ret == 0) break; + if (ret == 0) + break; + else if (ret == -ETIMEDOUT) { + NVT_ERR("write error, ret = %d\n", ret); + break; + } + retries++; } From 266fc07dffa60d68b997ffa31d5251cb816ce210 Mon Sep 17 00:00:00 2001 From: huangzq2 Date: Sat, 11 Nov 2023 20:35:37 +0800 Subject: [PATCH 24/45] workaround fix long page fault issue - change version to 2 - exit page fault with EIO if waited long time - reduce log and enlarge page fault warning timeout to 500ms Change-Id: I87858443d639c43cc804931063fe71daf0eccc96 Signed-off-by: huangzq2 Reviewed-on: https://gerrit.mot.com/2792701 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- drivers/moto_swap/hybridswap/hybridswap_eswap.c | 12 +++++++++--- drivers/moto_swap/hybridswap/hybridswap_swapd.c | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/moto_swap/hybridswap/hybridswap_eswap.c b/drivers/moto_swap/hybridswap/hybridswap_eswap.c index 1fdd7e0e4efc..f9cfbfac411b 100644 --- a/drivers/moto_swap/hybridswap/hybridswap_eswap.c +++ b/drivers/moto_swap/hybridswap/hybridswap_eswap.c @@ -174,7 +174,7 @@ struct hyb_entries_table { (index) != (hindex); (index) = (tmp), (tmp) = prev_index((index), (tab))) static unsigned long warn_level[HYB_CLASS_BUTT] = { - 0, 200, 500, 0 + 0, 500, 500, 0 }; const char *key_point_name[HYB_KYE_POINT_BUTT] = { @@ -4946,7 +4946,7 @@ static int hybridswap_permcg_reclaim(struct mem_cgroup *memcg, atomic64_inc(&hybs->hybridswap_outcnt); out: - hybp(HYB_INFO, "memcg %s %lu %lu out_to_eswap %lu KB eswap %lu zram %lu %d\n", + hybp(HYB_DEBUG, "memcg %s %lu %lu out_to_eswap %lu KB eswap %lu zram %lu %d\n", hybs->name, (unsigned long)require_size_before, (unsigned long)require_size, (unsigned long)((require_size_before - require_size) >> 10), (unsigned long)atomic64_read(&hybs->hybridswap_stored_size), @@ -4998,7 +4998,7 @@ static int hybridswap_permcg_reclaimin(struct mem_cgroup *memcg, rq->reclaimined_sz += mcg_reclaimed_size; mutex_unlock(&hybs->swap_lock); - hybp(HYB_INFO, "memcg %s mcg_reclaimed_size %lu rq->reclaimined_sz %lu rq->size %lu rq->out_size %lu ret %d\n", + hybp(HYB_DEBUG, "memcg %s mcg_reclaimed_size %lu rq->reclaimined_sz %lu rq->size %lu rq->out_size %lu ret %d\n", hybs->name, mcg_reclaimed_size, rq->reclaimined_sz, rq->size, rq->out_size, ret); @@ -5304,6 +5304,12 @@ static int hybridswap_page_fault_fetch_eswap(struct zram *zram, if (likely(iowork->ioentry->eswapid != -EBUSY)) break; + // Moto: waited enough, exit with EIO. + if (wait_cycle > 100000) { + hybp(HYB_ERR, "waited 100000 cycles in page fault, exit with EIO!\n"); + return -EIO; + } + if (wait_cycle < 100) udelay(50); else diff --git a/drivers/moto_swap/hybridswap/hybridswap_swapd.c b/drivers/moto_swap/hybridswap/hybridswap_swapd.c index 51326c2d698e..b172c90b15a2 100644 --- a/drivers/moto_swap/hybridswap/hybridswap_swapd.c +++ b/drivers/moto_swap/hybridswap/hybridswap_swapd.c @@ -36,7 +36,7 @@ #endif #include "hybridswap_internal.h" -#define MOTO_SWAP_VERSION 1 +#define MOTO_SWAP_VERSION 2 struct swapd_param { unsigned int min_grade; From b27b9348e9a5629e0d0845c36b9503f8960490bd Mon Sep 17 00:00:00 2001 From: zhangshaohu Date: Tue, 7 Nov 2023 16:59:49 +0800 Subject: [PATCH 25/45] fogos: TP: open 1st icnl9916c force up config 1. to resolve long time no up event, if timeout 100ms, make an up event. Change-Id: Ie41a07d0281d8a6ce1824a068efdec218403fdf8 Signed-off-by: zhangshaohu Reviewed-on: https://gerrit.mot.com/2788111 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Jun Weng Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/input/touchscreen/chipone_tddi_v2_mmi/cts_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/chipone_tddi_v2_mmi/cts_config.h b/drivers/input/touchscreen/chipone_tddi_v2_mmi/cts_config.h index 1d886712396c..f54dbd647d9b 100644 --- a/drivers/input/touchscreen/chipone_tddi_v2_mmi/cts_config.h +++ b/drivers/input/touchscreen/chipone_tddi_v2_mmi/cts_config.h @@ -33,7 +33,7 @@ #define CFG_CTS_SPI_SPEED_KHZ 6000 #endif /* CONFIG_CTS_I2C_HOST */ -/* #define CFG_CTS_FORCE_UP */ +#define CFG_CTS_FORCE_UP /* #define CFG_CTS_HEARTBEAT_MECHANISM */ /* #define CFG_CTS_PALM_DETECT */ From 13867d6908a656c17ef459b08c7032f0ac97d0dd Mon Sep 17 00:00:00 2001 From: chenlj2 Date: Mon, 13 Nov 2023 17:37:11 +0800 Subject: [PATCH 26/45] dlkm/fps:optimse driver for jiiov modification: ---anc_gpio_init ---anc_gpio_deinit ---anc_platform_init ---anc_platform_free Change-Id: I18611f9c3e475f7c9665999febed4c3a0f2270fa Signed-off-by: chenlj2 Reviewed-on: https://gerrit.mot.com/2793290 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yan Zhang Reviewed-by: Tao Sun Submit-Approved: Jira Key --- .../input/misc/anc_fps_mmi/jiiov_platform.c | 142 ++++++++++-------- 1 file changed, 76 insertions(+), 66 deletions(-) diff --git a/drivers/input/misc/anc_fps_mmi/jiiov_platform.c b/drivers/input/misc/anc_fps_mmi/jiiov_platform.c index f2af27608cf8..036a5e0ee83e 100644 --- a/drivers/input/misc/anc_fps_mmi/jiiov_platform.c +++ b/drivers/input/misc/anc_fps_mmi/jiiov_platform.c @@ -986,67 +986,6 @@ static int use_gpio_init(struct anc_data *p_data) { return ret_val; } -static int anc_gpio_init(struct anc_data *p_data) { - int ret_val = 0; - - if (p_data == NULL) { - ANC_LOGE("p_data is NULL"); - return -EINVAL; - } - ANC_LOGD("init gpio"); - if (p_data->resource_requested) { - ANC_LOGW("warning: resource is already requested, return!"); - return 0; - } - - if (p_data->vdd_use_gpio) { - ret_val = anc_request_named_gpio(p_data, "anc,gpio_pwr", &p_data->pwr_gpio); - if (ret_val) { - ANC_LOGE("request power gpio failed, ret_val:%d", ret_val); - return ret_val; - } - - ret_val = gpio_direction_output(p_data->pwr_gpio, 0); - if (ret_val) { - ANC_LOGE("power gpio direction output failed, ret_val:%d", ret_val); - return ret_val; - } - } - - if (p_data->use_gpio_init == false) { - ret_val = use_pinctrl_init(p_data); - if (ret_val) { - ANC_LOGE("use pinctrl init failed, ret_val:%d", ret_val); - return ret_val; - } - } - - ret_val = use_gpio_init(p_data); - if (ret_val) { - ANC_LOGE("use gpio init failed, ret_val:%d", ret_val); - return ret_val; - } - -#ifdef SAMSUNG_PLATFORM - /* Init spi clock */ - ret_val = anc_spi_clk_init(p_data); - if (ret_val) { - ANC_LOGE("spi init failed, ret_val:%d", ret_val); - return ret_val; - } -#endif - - if (of_property_read_bool(p_data->dev->of_node, "anc,enable-on-boot")) { - ANC_LOGD("Enabling hardware"); - device_power_up(p_data); - } - - p_data->resource_requested = true; - ANC_LOGD("success"); - - return 0; -} - static int anc_gpio_deinit(struct anc_data *p_data) { if (p_data == NULL) { ANC_LOGE("p_data is NULL"); @@ -1054,10 +993,6 @@ static int anc_gpio_deinit(struct anc_data *p_data) { } ANC_LOGD("deinit gpio"); - if (!p_data->resource_requested) { - ANC_LOGW("warning: resource is already released, return!"); - return 0; - } if (p_data->vdd_use_gpio) { if (gpio_is_valid(p_data->pwr_gpio)) { @@ -1085,12 +1020,71 @@ static int anc_gpio_deinit(struct anc_data *p_data) { anc_spi_clk_deinit(p_data); #endif - p_data->resource_requested = false; ANC_LOGD("success"); return 0; } +static int anc_gpio_init(struct anc_data *p_data) { + int ret_val = 0; + + if (p_data == NULL) { + ANC_LOGE("p_data is NULL"); + return -EINVAL; + } + + ANC_LOGD("init gpio"); + if (p_data->vdd_use_gpio) { + ret_val = anc_request_named_gpio(p_data, "anc,gpio_pwr", &p_data->pwr_gpio); + if (ret_val) { + ANC_LOGE("request power gpio failed, ret_val:%d", ret_val); + goto ANC_INIT_FAIL; + } + + ret_val = gpio_direction_output(p_data->pwr_gpio, 0); + if (ret_val) { + ANC_LOGE("power gpio direction output failed, ret_val:%d", ret_val); + goto ANC_INIT_FAIL; + } + } + + if (p_data->use_gpio_init == false) { + ret_val = use_pinctrl_init(p_data); + if (ret_val) { + ANC_LOGE("use pinctrl init failed, ret_val:%d", ret_val); + goto ANC_INIT_FAIL; + } + } + + ret_val = use_gpio_init(p_data); + if (ret_val) { + ANC_LOGE("use gpio init failed, ret_val:%d", ret_val); + goto ANC_INIT_FAIL; + } + +#ifdef SAMSUNG_PLATFORM + /* Init spi clock */ + ret_val = anc_spi_clk_init(p_data); + if (ret_val) { + ANC_LOGE("spi init failed, ret_val:%d", ret_val); + goto ANC_INIT_FAIL; + } +#endif + + if (of_property_read_bool(p_data->dev->of_node, "anc,enable-on-boot")) { + ANC_LOGD("Enabling hardware"); + device_power_up(p_data); + } + + ANC_LOGD("success"); + + return 0; + +ANC_INIT_FAIL: + anc_gpio_deinit(p_data); + return ret_val; +} + static int anc_open(struct inode *inode, struct file *filp) { struct anc_data *p_data = NULL; p_data = container_of(inode->i_cdev, struct anc_data, cdev); @@ -1110,10 +1104,18 @@ static int anc_platform_init(struct anc_data *p_data) { ANC_LOGE("p_data is NULL"); return -EINVAL; } + + if (p_data->resource_requested) { + ANC_LOGW("warning: resource is already requested, return!"); + return 0; + } + ret_val = anc_gpio_init(p_data); if (ret_val) { ANC_LOGE("Failed to init gpio, ret_val: %d", ret_val); return ret_val; + } else { + p_data->resource_requested = true; } return ret_val; @@ -1126,10 +1128,18 @@ static int anc_platform_free(struct anc_data *p_data) { ANC_LOGE("p_data is NULL"); return -EINVAL; } + + if (!p_data->resource_requested) { + ANC_LOGW("warning: resource is already released, return!"); + return 0; + } + ret_val = anc_gpio_deinit(p_data); if (ret_val) { ANC_LOGE("Failed to deinit gpio"); return ret_val; + } else { + p_data->resource_requested = false; } return ret_val; From 0769523d6e7af92a88265a4d2f13950658be7c8f Mon Sep 17 00:00:00 2001 From: Yuchang Guo Date: Thu, 9 Nov 2023 16:13:42 +0800 Subject: [PATCH 27/45] awinic sar:add KBUILD_OPTIONS awinic sar: Add KBUILD_OPTIONS for recent kernel versions. Change-Id: If3fa414716a1b741ab2362a0f76d7a73c58444aa Reviewed-on: https://gerrit.mot.com/2790604 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yuchang Guo Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key Reviewed-by: Jiyue Cui --- drivers/misc/awinic/sarsensor/Android.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/misc/awinic/sarsensor/Android.mk b/drivers/misc/awinic/sarsensor/Android.mk index c9500f25e070..1d99f6133d70 100644 --- a/drivers/misc/awinic/sarsensor/Android.mk +++ b/drivers/misc/awinic/sarsensor/Android.mk @@ -3,6 +3,7 @@ LOCAL_PATH := $(call my-dir) ifeq ($(AW96XX_USB_USE_ONLINE),true) KERNEL_CFLAGS += CONFIG_AW96XX_POWER_SUPPLY_ONLINE=y + KBUILD_OPTIONS += CONFIG_AW96XX_POWER_SUPPLY_ONLINE=y endif include $(CLEAR_VARS) From 92a9e9ca3b5e6808934124a7bd0ecb7c9f4f6561 Mon Sep 17 00:00:00 2001 From: Wenge Zhu Date: Tue, 14 Nov 2023 14:30:23 +0800 Subject: [PATCH 28/45] Report tapping coordinate when report gesture event TP: Report tapping coordinate when report gesture event. Change-Id: Ifc3fc819850e72f77655c79621ade7e1f1dfdea7 Signed-off-by: Wenge Zhu Reviewed-on: https://gerrit.mot.com/2794123 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wei Deng Reviewed-by: Jichao Zou Reviewed-by: Yeqing Wang Submit-Approved: Jira Key --- .../touchscreen/goodix_berlin_mmi/goodix_brl_hw.c | 2 -- .../touchscreen/goodix_berlin_mmi/goodix_ts_core.h | 2 -- .../goodix_berlin_mmi/goodix_ts_gesture.c | 2 ++ .../goodix_berlin_mmi/goodix_ts_gesture_fod.c | 4 ++++ .../touchscreen_mmi/touchscreen_mmi_gesture.c | 13 +++++++++++-- .../touchscreen_mmi/touchscreen_mmi_panel.c | 3 +++ include/linux/touchscreen_mmi.h | 1 + 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_brl_hw.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_brl_hw.c index 885011598fdd..ae3a1b914f3a 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_brl_hw.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_brl_hw.c @@ -1479,10 +1479,8 @@ static int brl_event_handler(struct goodix_ts_core *cd, ts_event->event_type = EVENT_GESTURE; ts_event->gesture_report_info = pre_buf[2]; ts_event->gesture_type = pre_buf[4]; -#ifdef CONFIG_GTP_FOD memcpy(ts_event->gesture_data, &pre_buf[8], GOODIX_GESTURE_DATA_LEN); -#endif } else { ts_info("Unsupported event status"); return -EINVAL; diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h index d9d7357594bc..b05599e883bd 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h @@ -428,9 +428,7 @@ struct goodix_ts_event { u8 gesture_report_info; struct goodix_touch_data touch_data; struct goodix_pen_data pen_data; -#ifdef CONFIG_GTP_FOD u8 gesture_data[GOODIX_GESTURE_DATA_LEN]; -#endif }; enum goodix_ic_bus_type { diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture.c index 0dc8d74dba87..44eacb470657 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture.c @@ -290,6 +290,8 @@ static int gsx_gesture_ist(struct goodix_ts_core *cd, mmi_event.evcode =4; } + mmi_event.evdata.x = le16_to_cpup((__le16 *)gs_event.gesture_data); + mmi_event.evdata.y = le16_to_cpup((__le16 *)(gs_event.gesture_data + 2)); /* call class method */ ret = cd->imports->report_gesture(&mmi_event); if (!ret) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c index 00c97dd9c4f2..874d4a28c9f6 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_gesture_fod.c @@ -419,6 +419,8 @@ static int gsx_gesture_ist(struct goodix_ts_core *cd, mmi_event.evcode =1; fod_down = 0; + mmi_event.evdata.x = le16_to_cpup((__le16 *)gs_event.gesture_data); + mmi_event.evdata.y = le16_to_cpup((__le16 *)(gs_event.gesture_data + 2)); /* call class method */ ret = cd->imports->report_gesture(&mmi_event); if (!ret) @@ -429,6 +431,8 @@ static int gsx_gesture_ist(struct goodix_ts_core *cd, mmi_event.evcode =4; fod_down = 0; + mmi_event.evdata.x = le16_to_cpup((__le16 *)gs_event.gesture_data); + mmi_event.evdata.y = le16_to_cpup((__le16 *)(gs_event.gesture_data + 2)); /* call class method */ ret = cd->imports->report_gesture(&mmi_event); if (!ret) diff --git a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c index 1372b6b90511..816661e1532e 100644 --- a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c +++ b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_gesture.c @@ -214,11 +214,18 @@ static int ts_mmi_gesture_handler(struct gesture_event_data *gev) int key_code; bool need2report = true; struct ts_mmi_dev *touch_cdev = sensor_pdata->touch_cdev; + struct ts_mmi_dev_pdata *ppdata = &touch_cdev->pdata; + if (ppdata->resolution_boost) { + gev->evdata.x /= ppdata->resolution_boost; + gev->evdata.y /= ppdata->resolution_boost; + } switch (gev->evcode) { case 1: key_code = BTN_TRIGGER_HAPPY3; - pr_info("%s: single tap\n", __func__); + input_report_abs(sensor_pdata->input_sensor_dev, ABS_X, gev->evdata.x); + input_report_abs(sensor_pdata->input_sensor_dev, ABS_Y, gev->evdata.y); + pr_info("%s: single tap; x=%d, y=%d\n", __func__, gev->evdata.x, gev->evdata.y); break; case 2: key_code = BTN_TRIGGER_HAPPY4; @@ -236,7 +243,9 @@ static int ts_mmi_gesture_handler(struct gesture_event_data *gev) break; case 4: key_code = BTN_TRIGGER_HAPPY6; - pr_info("%s: double tap\n", __func__); + input_report_abs(sensor_pdata->input_sensor_dev, ABS_X, gev->evdata.x); + input_report_abs(sensor_pdata->input_sensor_dev, ABS_Y, gev->evdata.y); + pr_info("%s: double tap; x=%d, y=%d\n", __func__, gev->evdata.x, gev->evdata.y); break; default: need2report = false; diff --git a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_panel.c b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_panel.c index 1b037dd32a1a..f5858b32d14e 100644 --- a/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_panel.c +++ b/drivers/input/touchscreen/touchscreen_mmi/touchscreen_mmi_panel.c @@ -186,6 +186,9 @@ int ts_mmi_parse_dt(struct ts_mmi_dev *touch_cdev, touch_cdev->clip.xBR, touch_cdev->clip.yBR); } + if (!of_property_read_u32(of_node, "mmi,resolution_boost", &ppdata->resolution_boost)) + dev_info(DEV_TS, "%s: resolution_boost = %d\n", __func__, ppdata->resolution_boost); + chosen = of_find_node_by_name(NULL, "chosen"); if (chosen) { struct device_node *child; diff --git a/include/linux/touchscreen_mmi.h b/include/linux/touchscreen_mmi.h index ccee2f10105e..4327bd9cc067 100644 --- a/include/linux/touchscreen_mmi.h +++ b/include/linux/touchscreen_mmi.h @@ -453,6 +453,7 @@ struct ts_mmi_dev_pdata { #ifdef CONFIG_BOARD_USES_DOUBLE_TAP_CTRL int supported_gesture_type; #endif + int resolution_boost; }; /** From 1ae6e1402dc8c62d0ddf766fb83c0241c5a1d70c Mon Sep 17 00:00:00 2001 From: wangyq13 Date: Tue, 14 Nov 2023 11:49:28 +0800 Subject: [PATCH 29/45] input: goodix_berlin: set default touch state to finger mode goodix_berlin: Set default touch state to finger mode, otherwise may cause enter pen mode abnormally. Change-Id: I603e3952a36a36d98442ead1ed1ad55840458125 Signed-off-by: wangyq13 Reviewed-on: https://gerrit.mot.com/2794038 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Reviewed-by: Wei Deng Reviewed-by: Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../input/touchscreen/goodix_berlin_mmi/goodix_ts_core.c | 6 +++--- .../input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h | 5 +++++ drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_mmi.c | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.c index eb79956856f1..f0fc32163d88 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.c @@ -2484,9 +2484,9 @@ static int pen_notifier_callback(struct notifier_block *self, ts_info("Received event(%lu) for pen detection\n", event); if (event == PEN_DETECTION_INSERT) - cd->gtp_pen_detect_flag = 0x0; + cd->gtp_pen_detect_flag = GTP_FINGER_MODE; else if (event == PEN_DETECTION_PULL) - cd->gtp_pen_detect_flag = 0x1; + cd->gtp_pen_detect_flag = GTP_PEN_MODE; mutex_lock_interruptible(&cd->mode_lock); @@ -2664,7 +2664,7 @@ static int goodix_ts_probe(struct platform_device *pdev) #endif #ifdef GTP_PEN_NOTIFIER - core_data->gtp_pen_detect_flag = PEN_DETECTION_INSERT; + core_data->gtp_pen_detect_flag = GTP_FINGER_MODE; core_data->pen_notif.notifier_call = pen_notifier_callback; ret = pen_detection_register_client(&core_data->pen_notif); if (ret) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h index b05599e883bd..00d088cbc6f7 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_core.h @@ -601,6 +601,11 @@ struct goodix_ts_core { #endif }; +#ifdef GTP_PEN_NOTIFIER +#define GTP_FINGER_MODE 0 +#define GTP_PEN_MODE 1 +#endif + /* external module structures */ enum goodix_ext_priority { EXTMOD_PRIO_RESERVED = 0, diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_mmi.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_mmi.c index da4dc410d474..087a41ac7f9f 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_mmi.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_mmi.c @@ -1277,8 +1277,8 @@ static int goodix_ts_mmi_post_resume(struct device *dev) { } #ifdef GTP_PEN_NOTIFIER - if (core_data->gtp_pen_detect_flag) { - ret = goodix_ts_send_cmd(core_data, 0x32, 5, 0x1, 0x00); + if (core_data->gtp_pen_detect_flag == GTP_PEN_MODE) { + ret = goodix_ts_send_cmd(core_data, 0x32, 5, GTP_PEN_MODE, 0x00); if (ret < 0) ts_err("failed to send passive pen mode cmd"); } From 7f11bf99c462ba78d390b143bae0be0985c24403 Mon Sep 17 00:00:00 2001 From: huangzq2 Date: Mon, 13 Nov 2023 15:46:43 +0800 Subject: [PATCH 30/45] add page fault pages to list head to avoid be swapped out soon Change-Id: I6efd6ac17432771baee600d6af8191917104ac27 Signed-off-by: huangzq2 Reviewed-on: https://gerrit.mot.com/2793884 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- drivers/moto_swap/hybridswap/hybridswap_eswap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/moto_swap/hybridswap/hybridswap_eswap.c b/drivers/moto_swap/hybridswap/hybridswap_eswap.c index f9cfbfac411b..8a67a1437c6b 100644 --- a/drivers/moto_swap/hybridswap/hybridswap_eswap.c +++ b/drivers/moto_swap/hybridswap/hybridswap_eswap.c @@ -1956,8 +1956,9 @@ static void __move_to_zram(struct zram *zram, u32 index, unsigned long handle, swap_maps_destroy(zram, index); zram_set_handle(zram, index, handle); zram_clear_flag(zram, index, ZRAM_WB); + // Moto: add to head to avoid be swapped out soon. if (mcg) - swap_sorted_list_add_tail(zram, index, mcg); + swap_sorted_list_add(zram, index, mcg); zram_set_flag(zram, index, ZRAM_FROM_HYBRIDSWAP); atomic64_add(size, &zram->stats.compr_data_size); atomic64_inc(&zram->stats.pages_stored); From 49a7695c9104267e22c28c5906625ce263b7ceee Mon Sep 17 00:00:00 2001 From: Xunjie Xu Date: Thu, 16 Nov 2023 10:20:08 +0800 Subject: [PATCH 31/45] usbnet: fix incorrect dev_addr kernel warning for incorrect netdev->dev_addr use eth_hw_addr_random to fix it Change-Id: I26bce842fc531b455cfcb2fbfc471667620a1669 Signed-off-by: Xunjie Xu Reviewed-on: https://gerrit.mot.com/2796101 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Yonghua Yan Reviewed-by: Guobin Zhang Submit-Approved: Jira Key --- drivers/moto_f_usbnet/f_usbnet.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/moto_f_usbnet/f_usbnet.c b/drivers/moto_f_usbnet/f_usbnet.c index 2131da211a85..8a81bc9dd7ed 100644 --- a/drivers/moto_f_usbnet/f_usbnet.c +++ b/drivers/moto_f_usbnet/f_usbnet.c @@ -621,7 +621,11 @@ static void usb_ether_setup(struct net_device *dev) ether_setup(dev); +#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 1, 25) eth_random_addr((u8 *)dev->dev_addr); +#else + eth_hw_addr_random(dev); +#endif } /*-------------------------------------------------------------------------*/ From ee730f864060537157bc45726169530c87a4e600 Mon Sep 17 00:00:00 2001 From: Zhiye Li Date: Wed, 15 Nov 2023 15:05:39 +0800 Subject: [PATCH 32/45] arm64/dts: update the wlan_antenna driver code for boston add the code to support get the gpio status. adb shell "cat /sys/devices/platform/soc/soc:wlan_antenna/wlan_antenna_en" low adb shell "cat /sys/devices/platform/soc/soc:wlan_antenna/wlan_antenna_en" high Change-Id: If1e1826e5afa9779bae44a8339eb74f4bbc11e6f Signed-off-by: Zhiye Li Reviewed-on: https://gerrit.mot.com/2795396 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yeqing Wang Reviewed-by: Bin Liu Reviewed-by: Tao Sun Submit-Approved: Jira Key --- drivers/wlan_antenna/wlan_antenna.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/wlan_antenna/wlan_antenna.c b/drivers/wlan_antenna/wlan_antenna.c index 7f71369330e4..209fbd9bac88 100644 --- a/drivers/wlan_antenna/wlan_antenna.c +++ b/drivers/wlan_antenna/wlan_antenna.c @@ -25,13 +25,15 @@ #include #include #include - +#include +#include #define DRIVER_VERSION "0.0.1" struct wlan_antenna_drvdata { struct device *dev; struct pinctrl *pinctrl; + int wlan_antenna_gpio; struct pinctrl_state *pstate_active; struct pinctrl_state *pstate_suspend; }; @@ -47,7 +49,10 @@ static ssize_t wlan_antenna_en_read(struct device *dev, return -EINVAL; } - return snprintf(buf, PAGE_SIZE, "wlan_antenna: not support!\n"); + if (gpio_get_value(data->wlan_antenna_gpio)) + return snprintf(buf, PAGE_SIZE, "high\n"); + else + return snprintf(buf, PAGE_SIZE, "low\n"); } static ssize_t wlan_antenna_en_write(struct device *dev, @@ -77,8 +82,6 @@ static ssize_t wlan_antenna_en_write(struct device *dev, if(ret) { pr_err("wlan_antenna failed to set pinctrl!\n"); - } else { - pr_info("wlan_antenna success set pinctrl\n"); } return count; @@ -108,6 +111,13 @@ static int wlan_antenna_probe(struct platform_device *pdev) drvdata->dev = &pdev->dev; platform_set_drvdata(pdev, drvdata); + drvdata->wlan_antenna_gpio = of_get_named_gpio(dev->of_node, "qcom,wlan_antenna-gpio", 0); + ret = gpio_request(drvdata->wlan_antenna_gpio, "wlan_antenna_gpio"); + if (ret) { + pr_err("%s, unable to request gpio %d (%d)\n", __func__, drvdata->wlan_antenna_gpio, ret); + return ret; + } + /* Get pinctrl if target uses pinctrl */ drvdata->pinctrl = devm_pinctrl_get(dev); if (IS_ERR_OR_NULL(drvdata->pinctrl)) { From d5f6f9388c8b74d8418d8f4a6064bf0aa48a001e Mon Sep 17 00:00:00 2001 From: zhuangnk1 Date: Tue, 14 Nov 2023 17:41:53 +0800 Subject: [PATCH 33/45] insmod qorvo uwb driver according to mmi_info add driver probe according to mmi_info. Only probe uwb driver when mmi info is qorvo Change-Id: I92a9e01dca1c40a484de5845dd9137f834fa3a1f Signed-off-by: zhuangnk1 Reviewed-on: https://gerrit.mot.com/2794347 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Tao Sun Submit-Approved: Jira Key --- drivers/uwb/qm35/qm35-spi.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/uwb/qm35/qm35-spi.c b/drivers/uwb/qm35/qm35-spi.c index e8bf1235c930..f01de2488d91 100644 --- a/drivers/uwb/qm35/qm35-spi.c +++ b/drivers/uwb/qm35/qm35-spi.c @@ -47,6 +47,7 @@ #include #endif +#include #include #include #include @@ -1008,6 +1009,13 @@ static int qm35_probe(struct spi_device *spi) struct clk *uwb_clk; int ret = 0; + if (spi->dev.of_node && !mmi_device_is_available(spi->dev.of_node)) { + pr_err("%s : mmi: device not supported\n", __func__); + return -ENODEV; + } else { + pr_err("%s : supported uwb device found\n", __func__); + } + if (fwname) { qmrom_set_fwname(fwname); } From be6449a242ab5e645e0e33b4e3d1a0909b877a2a Mon Sep 17 00:00:00 2001 From: Xiaojun Lv Date: Fri, 17 Nov 2023 12:16:18 +0800 Subject: [PATCH 34/45] focaltech: support stowed detection when gesture mode for focal Support for touch stowed detection when gesture mode. Under gesture mode, when entering Stowed, touch will enter deep standby mode, and detection will resume when unstowed. Refer: (CR) Change-Id: I1c6591d83ccc17894c03246599903d0680ab2941 Reviewed-on: https://gerrit.mot.com/2797264 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Yeqing Wang Reviewed-by: Jun Weng Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- .../focaltech_touch_v3/focaltech_common.h | 2 + .../focaltech_touch_v3/focaltech_core.c | 5 ++ .../focaltech_touch_v3/focaltech_core.h | 2 + .../focaltech_touch_v3/focaltech_ts_mmi.c | 90 +++++++++++++++++++ 4 files changed, 99 insertions(+) diff --git a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_common.h b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_common.h index dfbc9497a711..14155c223eea 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_common.h +++ b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_common.h @@ -82,6 +82,8 @@ #define FTS_REG_CHIP_ID 0xA3 #define FTS_REG_CHIP_ID2 0x9F #define FTS_REG_POWER_MODE 0xA5 +#define FTS_REG_POWER_MODE_ACTIVE 0 +#define FTS_REG_POWER_MODE_STANDBY 0x02 #define FTS_REG_POWER_MODE_SLEEP 0x03 #define FTS_REG_FW_VER 0xA6 #define FTS_REG_VENDOR_ID 0xA8 diff --git a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.c b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.c index cd1cefa93584..027dd3bb2899 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.c +++ b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.c @@ -1972,6 +1972,11 @@ static int fts_parse_dt(struct device *dev, struct fts_ts_platform_data *pdata) if (pdata->sample_ctrl) FTS_INFO("support focaltech sample mode"); + pdata->stowed_mode_ctrl = of_property_read_bool(np, + "focaltech,stowed-mode-ctrl"); + if (pdata->stowed_mode_ctrl) + FTS_INFO("Support focaltech touch stowed mode"); + FTS_FUNC_EXIT(); return 0; diff --git a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.h b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.h index eec08c0315f2..8f8952aca0e7 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.h +++ b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_core.h @@ -161,6 +161,7 @@ struct fts_ts_platform_data { bool interpolation_ctrl; bool report_rate_ctrl; bool sample_ctrl; + bool stowed_mode_ctrl; }; struct ts_event { @@ -201,6 +202,7 @@ struct fts_mode_info { int sample; int report_rate_mode; int edge_mode[2]; + int stowed; }; struct fts_ts_data { struct i2c_client *client; diff --git a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_mmi.c b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_mmi.c index 81208b517c27..8485409c1aad 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_mmi.c +++ b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_mmi.c @@ -71,6 +71,10 @@ static ssize_t fts_sample_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size); static ssize_t fts_sample_show(struct device *dev, struct device_attribute *attr, char *buf); +static ssize_t fts_stowed_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t size); +static ssize_t fts_stowed_show(struct device *dev, + struct device_attribute *attr, char *buf); static DEVICE_ATTR(edge, (S_IRUGO | S_IWUSR | S_IWGRP), @@ -79,6 +83,8 @@ static DEVICE_ATTR(interpolation, (S_IRUGO | S_IWUSR | S_IWGRP), fts_interpolation_show, fts_interpolation_store); static DEVICE_ATTR(sample, (S_IRUGO | S_IWUSR | S_IWGRP), fts_sample_show, fts_sample_store); +static DEVICE_ATTR(stowed, (S_IWUSR | S_IWGRP | S_IRUGO), + fts_stowed_show, fts_stowed_store); #define ADD_ATTR(name) { \ if (idx < MAX_ATTRS_ENTRIES) { \ @@ -397,6 +403,67 @@ static ssize_t fts_sample_show(struct device *dev, return scnprintf(buf, PAGE_SIZE, "0x%02x", ts_data->set_mode.sample); } +static ssize_t fts_stowed_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t size) +{ + int ret = 0; + unsigned long mode = 0; + struct fts_ts_data *ts_data; + + dev = MMI_DEV_TO_TS_DEV(dev); + GET_TS_DATA(dev); + + ret = kstrtoul(buf, 0, &mode); + if (ret < 0) { + FTS_INFO("Failed to convert value.\n"); + return -EINVAL; + } + + mutex_lock(&ts_data->mode_lock); + + ts_data->get_mode.stowed = mode; + if (ts_data->set_mode.stowed == mode) { + FTS_DEBUG("The value = %lu is same, so not to write", mode); + ret = size; + goto exit; + } + + if ((ts_data->power_disabled == false) && (ts_data->suspended == true)) { + if (mode) + ret = fts_write_reg(FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_STANDBY); + else + ret = fts_write_reg(FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_ACTIVE); + if (ret < 0) { + FTS_ERROR("failed to set report rate, mode = %lu", mode); + goto exit; + } + } else { + FTS_INFO("Skip stowed mode setting suspended:%d, power_disabled:%d.\n", ts_data->suspended, ts_data->power_disabled); + ret = size; + goto exit; + } + + ts_data->set_mode.stowed = mode; + FTS_INFO("Success to set stowed mode %lu\n", mode); + + ret = size; +exit: + mutex_unlock(&ts_data->mode_lock); + return ret; +} + +static ssize_t fts_stowed_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct fts_ts_data *ts_data; + + dev = MMI_DEV_TO_TS_DEV(dev); + GET_TS_DATA(dev); + + FTS_INFO("Stowed state = %d.\n", ts_data->set_mode.stowed); + return scnprintf(buf, PAGE_SIZE, "0x%02x", ts_data->set_mode.stowed); +} + static int fts_mmi_methods_get_vendor(struct device *dev, void *cdata) { return scnprintf(TO_CHARP(cdata), TS_MMI_MAX_VENDOR_LEN, "%s", "focaltech"); @@ -808,6 +875,10 @@ exit: } } + if (pdata->stowed_mode_ctrl) { + ts_data->set_mode.stowed = 0; + } + mutex_unlock(&ts_data->mode_lock); FTS_FUNC_EXIT(); @@ -837,8 +908,11 @@ static int fts_mmi_pre_suspend(struct device *dev) static int fts_mmi_post_suspend(struct device *dev) { struct fts_ts_data *ts_data; + struct fts_ts_platform_data *pdata; + int ret = 0; GET_TS_DATA(dev); + pdata = ts_data->pdata; FTS_FUNC_ENTER(); @@ -852,6 +926,19 @@ static int fts_mmi_post_suspend(struct device *dev) #endif ts_data->suspended = true; + + if (pdata->stowed_mode_ctrl && ts_data->get_mode.stowed && (ts_data->power_disabled == false)) { + mutex_lock(&ts_data->mode_lock); + ret = fts_write_reg(FTS_REG_POWER_MODE, FTS_REG_POWER_MODE_STANDBY); + if (ret < 0) { + FTS_ERROR("Failed to set stowed mode %d", ts_data->get_mode.stowed); + } else { + ts_data->set_mode.stowed = ts_data->get_mode.stowed; + FTS_INFO("Enable stowed mode %d success.", ts_data->set_mode.stowed); + } + mutex_unlock(&ts_data->mode_lock); + } + FTS_FUNC_EXIT(); return 0; @@ -1004,6 +1091,9 @@ static int fts_mmi_extend_attribute_group(struct device *dev, struct attribute_g if (pdata->sample_ctrl) ADD_ATTR(sample); + if (pdata->stowed_mode_ctrl) + ADD_ATTR(stowed); + if (idx) { ext_attributes[idx] = NULL; *group = &ext_attr_group; From 954d140ff3dbcd2b815107c3da467dc4020451ec Mon Sep 17 00:00:00 2001 From: Xiaojun Lv Date: Mon, 20 Nov 2023 17:18:28 +0800 Subject: [PATCH 35/45] boston: support touch sensitivity in game mode Support touch sensitivity in game mode for boston, default touch report rate is 240Hz and high report rate is 360Hz. Change-Id: If80cbc5a16062d3743ae44925259c1d48fe624ae Reviewed-on: https://gerrit.mot.com/2799603 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: Yeqing Wang Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/input/touchscreen/goodix_berlin_mmi/Kbuild | 2 ++ drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild b/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild index 2a996d881dc3..72b7de7d3306 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild +++ b/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild @@ -128,6 +128,8 @@ else ifneq ($(filter bangkk%, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_BANGKK else ifneq ($(filter eqe, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_EQE +else ifneq ($(filter boston%, $(USE_TARGET_PRODUCT)), ) + EXTRA_CFLAGS += -DPRODUCT_BOSTON endif $(warning "william EXTRA_CFLAGS = $(EXTRA_CFLAGS)") diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c index 399d8cb24ddf..a4ebf0bd828c 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c @@ -16,7 +16,7 @@ struct goodix_ic_report_rate_config report_rate_config_info = { #if defined(PRODUCT_LI) || defined(PRODUCT_ONELI) || defined(PRODUCT_TUNDRA) \ ||defined(PRODUCT_EQS) || defined(PRODUCT_RTWO) || defined(PRODUCT_BRONCO) \ || defined(PRODUCT_ZEEKR) || defined(PRODUCT_LYNKCO) || defined(PRODUCT_BANGKK) \ - || defined(PRODUCT_EQE) || defined(PRODUCT_CTWO) + || defined(PRODUCT_EQE) || defined(PRODUCT_CTWO) || defined(PRODUCT_BOSTON) .rate_config_count = 2, .refresh_rate_ctrl = 0, .interpolation_ctrl = 1, From 7c2975f8e07524d786f399b2136a48a6e0d0a67e Mon Sep 17 00:00:00 2001 From: Xiaojun Lv Date: Mon, 20 Nov 2023 18:29:30 +0800 Subject: [PATCH 36/45] avatrn: support touch sensitivity in game mode Support touch sensitivity in game mode for avatrn, default touch report rate is 240Hz and high report rate is 360Hz . Change-Id: I9f5c8a414e3a8698393687527ed1a42a61808a07 Reviewed-on: https://gerrit.mot.com/2799919 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/input/touchscreen/focaltech_touch_v3/Kbuild | 2 ++ .../input/touchscreen/focaltech_touch_v3/focaltech_ts_config.c | 2 +- drivers/input/touchscreen/goodix_berlin_mmi/Kbuild | 2 ++ drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c | 3 ++- 4 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/input/touchscreen/focaltech_touch_v3/Kbuild b/drivers/input/touchscreen/focaltech_touch_v3/Kbuild index c03284477988..a286487f99e4 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/Kbuild +++ b/drivers/input/touchscreen/focaltech_touch_v3/Kbuild @@ -80,6 +80,8 @@ endif ifneq ($(filter bangkk%, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_BANGKK +else ifneq ($(filter avatrn%, $(USE_TARGET_PRODUCT)), ) + EXTRA_CFLAGS += -DPRODUCT_AVATRN endif KBUILD_EXTRA_SYMBOLS += $(CURDIR)/../../kernel/msm-$(MODULE_KERNEL_VERSION)/Module.symvers diff --git a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_config.c b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_config.c index 23e2a29673c2..7908b4fc96dd 100644 --- a/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_config.c +++ b/drivers/input/touchscreen/focaltech_touch_v3/focaltech_ts_config.c @@ -13,7 +13,7 @@ #include "focaltech_ts_config.h" struct focaltech_ic_report_rate_config report_rate_config_info = { -#if defined(PRODUCT_BANGKK) +#if defined(PRODUCT_BANGKK)|| defined(PRODUCT_AVATRN) .rate_config_count = 2, .refresh_rate_ctrl = 0, .interpolation_ctrl = 1, diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild b/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild index 72b7de7d3306..86ce5a4367af 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild +++ b/drivers/input/touchscreen/goodix_berlin_mmi/Kbuild @@ -130,6 +130,8 @@ else ifneq ($(filter eqe, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_EQE else ifneq ($(filter boston%, $(USE_TARGET_PRODUCT)), ) EXTRA_CFLAGS += -DPRODUCT_BOSTON +else ifneq ($(filter avatrn%, $(USE_TARGET_PRODUCT)), ) + EXTRA_CFLAGS += -DPRODUCT_AVATRN endif $(warning "william EXTRA_CFLAGS = $(EXTRA_CFLAGS)") diff --git a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c index a4ebf0bd828c..4836556bf60d 100644 --- a/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c +++ b/drivers/input/touchscreen/goodix_berlin_mmi/goodix_ts_config.c @@ -16,7 +16,8 @@ struct goodix_ic_report_rate_config report_rate_config_info = { #if defined(PRODUCT_LI) || defined(PRODUCT_ONELI) || defined(PRODUCT_TUNDRA) \ ||defined(PRODUCT_EQS) || defined(PRODUCT_RTWO) || defined(PRODUCT_BRONCO) \ || defined(PRODUCT_ZEEKR) || defined(PRODUCT_LYNKCO) || defined(PRODUCT_BANGKK) \ - || defined(PRODUCT_EQE) || defined(PRODUCT_CTWO) || defined(PRODUCT_BOSTON) + || defined(PRODUCT_EQE) || defined(PRODUCT_CTWO) || defined(PRODUCT_BOSTON) \ + || defined(PRODUCT_AVATRN) .rate_config_count = 2, .refresh_rate_ctrl = 0, .interpolation_ctrl = 1, From 29e3449737e9a67446d54830feb02c4d6e9f319c Mon Sep 17 00:00:00 2001 From: Xiaojun Ji Date: Wed, 6 Dec 2023 13:50:52 +0800 Subject: [PATCH 37/45] moto_swap: Add reset_bdev to close backing dev for ramboost2.0 reboot process will write 1 to /sys/block/zram0/reset to close backing device fd Change-Id: Id11caf26c3edff89a0bf64fc706799c1d54901ee Reviewed-on: https://gerrit.mot.com/2816017 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Wang Wang Submit-Approved: Jira Key (cherry picked from commit 056c46364adf0b5bacb64554c55f88a56c977f45) Reviewed-on: https://gerrit.mot.com/2817430 Reviewed-by: Lianlu Chen --- .../moto_swap/hybridswap/hybridswap_eswap.c | 9 +++++++++ drivers/moto_swap/zram-5.10/zram_drv.c | 20 +++++++++++++++++++ drivers/moto_swap/zram-5.15/zram_drv.c | 17 ++++++++++++++++ drivers/moto_swap/zram-5.4/zram_drv.c | 20 +++++++++++++++++++ 4 files changed, 66 insertions(+) diff --git a/drivers/moto_swap/hybridswap/hybridswap_eswap.c b/drivers/moto_swap/hybridswap/hybridswap_eswap.c index 8a67a1437c6b..9bad6d608ef8 100644 --- a/drivers/moto_swap/hybridswap/hybridswap_eswap.c +++ b/drivers/moto_swap/hybridswap/hybridswap_eswap.c @@ -4400,6 +4400,15 @@ ssize_t hybridswap_loop_device_show(struct device *dev, struct device_attribute *attr, char *buf) { int len = 0; + struct zram *zram = dev_to_zram(dev); + + down_read(&zram->init_lock); + if (!zram->backing_dev) { + memcpy(buf, "none\n", 5); + up_read(&zram->init_lock); + return 5; + } + up_read(&zram->init_lock); len = sprintf(buf, "%s\n", loop_device); diff --git a/drivers/moto_swap/zram-5.10/zram_drv.c b/drivers/moto_swap/zram-5.10/zram_drv.c index 56112f2d2e13..e25cb6134120 100644 --- a/drivers/moto_swap/zram-5.10/zram_drv.c +++ b/drivers/moto_swap/zram-5.10/zram_drv.c @@ -791,7 +791,27 @@ static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, return read_from_bdev_async(zram, bvec, entry, parent); } #else +#ifdef CONFIG_HYBRIDSWAP_CORE +static void reset_bdev(struct zram *zram) +{ + struct block_device *bdev; + + if (!zram->backing_dev) + return; + + bdev = zram->bdev; + if (zram->old_block_size) + set_blocksize(bdev, zram->old_block_size); + blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); + /* hope filp_close flush all of IO */ + filp_close(zram->backing_dev, NULL); + zram->backing_dev = NULL; + zram->old_block_size = 0; + zram->bdev = NULL; +} +#else static inline void reset_bdev(struct zram *zram) {}; +#endif static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, unsigned long entry, struct bio *parent, bool sync) { diff --git a/drivers/moto_swap/zram-5.15/zram_drv.c b/drivers/moto_swap/zram-5.15/zram_drv.c index fed6596b5815..ee4dc91f8559 100644 --- a/drivers/moto_swap/zram-5.15/zram_drv.c +++ b/drivers/moto_swap/zram-5.15/zram_drv.c @@ -782,7 +782,24 @@ static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, return read_from_bdev_async(zram, bvec, entry, parent); } #else +#ifdef CONFIG_HYBRIDSWAP_CORE +static void reset_bdev(struct zram *zram) +{ + struct block_device *bdev; + + if (!zram->backing_dev) + return; + + bdev = zram->bdev; + blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); + /* hope filp_close flush all of IO */ + filp_close(zram->backing_dev, NULL); + zram->backing_dev = NULL; + zram->bdev = NULL; +} +#else static inline void reset_bdev(struct zram *zram) {}; +#endif static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, unsigned long entry, struct bio *parent, bool sync) { diff --git a/drivers/moto_swap/zram-5.4/zram_drv.c b/drivers/moto_swap/zram-5.4/zram_drv.c index 7abdf6e8823b..aaccc68e91ce 100644 --- a/drivers/moto_swap/zram-5.4/zram_drv.c +++ b/drivers/moto_swap/zram-5.4/zram_drv.c @@ -776,7 +776,27 @@ static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, return read_from_bdev_async(zram, bvec, entry, parent); } #else +#ifdef CONFIG_HYBRIDSWAP_CORE +static void reset_bdev(struct zram *zram) +{ + struct block_device *bdev; + + if (!zram->backing_dev) + return; + + bdev = zram->bdev; + if (zram->old_block_size) + set_blocksize(bdev, zram->old_block_size); + blkdev_put(bdev, FMODE_READ|FMODE_WRITE|FMODE_EXCL); + /* hope filp_close flush all of IO */ + filp_close(zram->backing_dev, NULL); + zram->backing_dev = NULL; + zram->old_block_size = 0; + zram->bdev = NULL; +} +#else static inline void reset_bdev(struct zram *zram) {}; +#endif static int read_from_bdev(struct zram *zram, struct bio_vec *bvec, unsigned long entry, struct bio *parent, bool sync) { From 39d2778cb578b69575181d42dd478bc2b82b45b6 Mon Sep 17 00:00:00 2001 From: wuwl10 Date: Thu, 16 Nov 2023 11:34:44 +0800 Subject: [PATCH 38/45] dlkm: goodix_fod: support drm panel notification Add DRM panel notification to support screen state to hal. It can make sensor broken detecte work well Change-Id: If43fda2cd8c38faba552718d14958281f82688e3 Signed-off-by: wuwl10 Reviewed-on: https://gerrit.mot.com/2796187 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Ling Zhong Reviewed-by: Huosheng Liao Submit-Approved: Jira Key --- drivers/input/misc/goodix_fod_mmi/Android.mk | 4 ++ drivers/input/misc/goodix_fod_mmi/Kbuild | 4 ++ drivers/input/misc/goodix_fod_mmi/gf_spi.c | 68 +++++++++++++++++--- drivers/input/misc/goodix_fod_mmi/gf_spi.h | 3 + 4 files changed, 69 insertions(+), 10 deletions(-) diff --git a/drivers/input/misc/goodix_fod_mmi/Android.mk b/drivers/input/misc/goodix_fod_mmi/Android.mk index 4089d7044fbe..95d49ba78d33 100644 --- a/drivers/input/misc/goodix_fod_mmi/Android.mk +++ b/drivers/input/misc/goodix_fod_mmi/Android.mk @@ -1,6 +1,10 @@ DLKM_DIR := motorola/kernel/modules LOCAL_PATH := $(call my-dir) +ifeq ($(GOODIX_FPS_DRM_PANEL_NOTIFICATIONS),true) + KERNEL_CFLAGS += CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS=y +endif + include $(CLEAR_VARS) LOCAL_MODULE := goodix_fod_mmi.ko LOCAL_MODULE_TAGS := optional diff --git a/drivers/input/misc/goodix_fod_mmi/Kbuild b/drivers/input/misc/goodix_fod_mmi/Kbuild index 8f5edebe1ca1..2be732aa5a56 100644 --- a/drivers/input/misc/goodix_fod_mmi/Kbuild +++ b/drivers/input/misc/goodix_fod_mmi/Kbuild @@ -6,6 +6,10 @@ ifneq ($(filter m y,$(CONFIG_MMI_RELAY)),) EXTRA_CFLAGS += -DMMI_RELAY_MODULE endif +ifneq ($(filter m y,$(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS)),) + EXTRA_CFLAGS += -DCONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS +endif + ifneq ($(filter banks%, $(TARGET_PRODUCT)),) EXTRA_CFLAGS += -DSOFTDEP_GPIO_PCAL6408 endif diff --git a/drivers/input/misc/goodix_fod_mmi/gf_spi.c b/drivers/input/misc/goodix_fod_mmi/gf_spi.c index 0e06347839a7..0a280b164105 100644 --- a/drivers/input/misc/goodix_fod_mmi/gf_spi.c +++ b/drivers/input/misc/goodix_fod_mmi/gf_spi.c @@ -54,6 +54,10 @@ #endif #include +#if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) +#include +#endif + #define VER_MAJOR 1 #define VER_MINOR 2 #define PATCH_LEVEL 4 @@ -701,25 +705,55 @@ static const struct file_operations gf_fops = { #endif }; +#if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) +static int drm_check_dt(struct gf_dev *gf_dev) +{ + int i = 0; + int count = 0; + struct device *dev = &gf_dev->spi->dev; + struct device_node *np = dev->of_node; + struct device_node *node = NULL; + struct drm_panel *panel = NULL; + count = of_count_phandle_with_args(np, "panel", NULL); + if (count <= 0) { + pr_err(" %s : find drm_panel fail count = %d ", __func__, count); + return -ENODEV; + } + for (i = 0; i < count; i++) { + node = of_parse_phandle(np, "panel", i); + panel = of_drm_find_panel(node); + of_node_put(node); + if (!IS_ERR(panel)) { + pr_info(" %s : find drm_panel successfully ", __func__); + gf_dev->active_panel = panel; + return 0; + } + } + pr_err(" %s : can not find drm_panel ", __func__); + return -ENODEV; +} +#endif + static int goodix_fb_state_chg_callback(struct notifier_block *nb, unsigned long val, void *data) { -#if 0 +#if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) struct gf_dev *gf_dev; - struct fb_event *evdata = data; + struct drm_panel_notifier *evdata = data; int blank; char msg = 0; - if (val != FB_EARLY_EVENT_BLANK) + if (val != DRM_PANEL_EARLY_EVENT_BLANK) return 0; - pr_info("[info] %s go to the goodix_fb_state_chg_callback value = %d\n", + pr_debug("[info] %s go to the goodix_fb_state_chg_callback value = %d\n", __func__, (int)val); gf_dev = container_of(nb, struct gf_dev, notifier); - if (evdata && evdata->data && val == FB_EARLY_EVENT_BLANK && gf_dev) { + if (evdata && evdata->data && val == DRM_PANEL_EARLY_EVENT_BLANK && gf_dev) { blank = *(int *)(evdata->data); switch (blank) { - case FB_BLANK_POWERDOWN: + case DRM_PANEL_BLANK_POWERDOWN: gf_dev->fb_black = 1; + pr_debug("%s DRM_PANEL_BLANK_POWERDOWN\n", __func__); #if defined(GF_NETLINK_ENABLE) msg = GF_NET_EVENT_FB_BLACK; sendnlmsg(&msg); @@ -729,7 +763,8 @@ static int goodix_fb_state_chg_callback(struct notifier_block *nb, #endif break; - case FB_BLANK_UNBLANK: + case DRM_PANEL_BLANK_UNBLANK: + pr_debug("%s DRM_PANEL_BLANK_UNBLANK\n", __func__); gf_dev->fb_black = 0; #if defined(GF_NETLINK_ENABLE) msg = GF_NET_EVENT_FB_UNBLACK; @@ -741,7 +776,7 @@ static int goodix_fb_state_chg_callback(struct notifier_block *nb, break; default: - pr_info("%s defalut\n", __func__); + pr_debug("%s defalut\n", __func__); break; } } @@ -842,8 +877,14 @@ static int gf_probe(struct platform_device *pdev) #endif gf_dev->notifier = goodix_noti_block; +#if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) + gf_dev->active_panel = NULL; + drm_check_dt(gf_dev); + status = drm_panel_notifier_register(gf_dev->active_panel, &gf_dev->notifier); + pr_info("gf_probe drm_panel_notifier_register: status = %d\n", status); +#else fb_register_client(&gf_dev->notifier); - +#endif gf_dev->irq = gf_irq_num(gf_dev); status = request_threaded_irq(gf_dev->irq, NULL, gf_irq, @@ -928,8 +969,15 @@ static int gf_remove(struct platform_device *pdev) clear_bit(MINOR(gf_dev->devt), minors); if (gf_dev->users == 0) gf_cleanup(gf_dev); - +#if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) + if (gf_dev->active_panel) + { + drm_panel_notifier_unregister(gf_dev->active_panel, &gf_dev->notifier); + gf_dev->active_panel = NULL; + } +#else fb_unregister_client(&gf_dev->notifier); +#endif mutex_unlock(&device_list_lock); return 0; diff --git a/drivers/input/misc/goodix_fod_mmi/gf_spi.h b/drivers/input/misc/goodix_fod_mmi/gf_spi.h index b1042c14a668..cf0985b992cd 100644 --- a/drivers/input/misc/goodix_fod_mmi/gf_spi.h +++ b/drivers/input/misc/goodix_fod_mmi/gf_spi.h @@ -172,6 +172,9 @@ struct gf_dev { #endif struct notifier_block notifier; char fb_black; +#if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) + struct drm_panel *active_panel; +#endif }; int gf_parse_dts(struct gf_dev *gf_dev); From 7714892225fae1b0e46fa845859875e19a452b11 Mon Sep 17 00:00:00 2001 From: wuwl10 Date: Wed, 3 Apr 2024 17:45:36 +0800 Subject: [PATCH 39/45] dlkm: goodix_fod_mmi: fix KE issue When there is not panel connect to board , the active_panel is NULL we need to protect it to avoid KE. Change-Id: Idbb91740f5c5c043d80cf527113abf1e6f0337e3 Signed-off-by: wuwl10 Reviewed-on: https://gerrit.mot.com/2926504 Reviewed-by: Huosheng Liao SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Submit-Approved: Jira Key --- drivers/input/misc/goodix_fod_mmi/gf_spi.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/input/misc/goodix_fod_mmi/gf_spi.c b/drivers/input/misc/goodix_fod_mmi/gf_spi.c index 0a280b164105..861a1a51a3b0 100644 --- a/drivers/input/misc/goodix_fod_mmi/gf_spi.c +++ b/drivers/input/misc/goodix_fod_mmi/gf_spi.c @@ -879,9 +879,13 @@ static int gf_probe(struct platform_device *pdev) gf_dev->notifier = goodix_noti_block; #if defined(CONFIG_GOODIX_DRM_PANEL_NOTIFICATIONS) gf_dev->active_panel = NULL; - drm_check_dt(gf_dev); - status = drm_panel_notifier_register(gf_dev->active_panel, &gf_dev->notifier); - pr_info("gf_probe drm_panel_notifier_register: status = %d\n", status); + status = drm_check_dt(gf_dev); + if (status >= 0) { + status = drm_panel_notifier_register(gf_dev->active_panel, &gf_dev->notifier); + pr_info("gf_probe drm_panel_notifier_register: status = %d\n", status); + } else { + pr_info("gf_probe drm_panel is NULL: = %d\n", status); + } #else fb_register_client(&gf_dev->notifier); #endif From 51340e312507c6808668f431227b7a19a61e8251 Mon Sep 17 00:00:00 2001 From: Xiaojun Ji Date: Thu, 7 Nov 2024 14:50:54 +0800 Subject: [PATCH 40/45] moto_swap: Reduce force eswap out size of half Change-Id: I0a109b34a0535a48082fca2d815e6f3f246c9652 Reviewed-on: https://gerrit.mot.com/3137861 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Reviewed-by: Zhangqing Huang Tested-by: Jira Key Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key --- drivers/moto_swap/hybridswap/hybridswap_eswap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/moto_swap/hybridswap/hybridswap_eswap.c b/drivers/moto_swap/hybridswap/hybridswap_eswap.c index 9bad6d608ef8..844ec14e703c 100644 --- a/drivers/moto_swap/hybridswap/hybridswap_eswap.c +++ b/drivers/moto_swap/hybridswap/hybridswap_eswap.c @@ -5490,7 +5490,7 @@ void hybridswap_force_reclaim(struct mem_cgroup *mcg) return; mutex_lock(&hybs->swap_lock); - require_size = atomic64_read(&hybs->zram_stored_size); + require_size = atomic64_read(&hybs->zram_stored_size) / 2; hybs->force_swapout = true; hybridswap_permcg_reclaim(mcg, require_size, &mcg_reclaimed_size); hybs->force_swapout = false; From 2ef1dc560d2a172a53d2328cf29f0f6c393a32fd Mon Sep 17 00:00:00 2001 From: liuyc20 Date: Tue, 16 Jan 2024 14:46:28 +0800 Subject: [PATCH 41/45] mmi_charger: Add state_of_health/first_usage_date/manufacturing_date PROPAGATED_from (CR) For LOT-X battery requirement Add battery info state_of_health, first_usage_data, manufacturing_date Change-Id: I93376517bb96050798ac95aeb5d1f0c186b27270 Signed-off-by: liuyc20 Reviewed-on: https://gerrit.mot.com/2854414 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Huosheng Liao Submit-Approved: Jira Key Signed-off-by: Robert Cabral Reviewed-on: https://gerrit.mot.com/3157739 Reviewed-by: Hugo Cuffa Reviewed-by: Yuecai Liu --- .../mmi-smbcharger-iio/mmi-smbcharger-iio.c | 95 +++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c index 30f8f3686c49..bcd4db30b1d1 100755 --- a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c +++ b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c @@ -526,6 +526,10 @@ struct smb_mmi_charger { bool enable_dcp_ffc; bool enable_fcc_large_qg_iterm; + + /*Battery info*/ + int manufacturing_date; + int first_usage_date; }; #define CHGR_FAST_CHARGE_CURRENT_CFG_REG (CHGR_BASE + 0x61) @@ -4957,9 +4961,100 @@ static ssize_t age_show(struct device *dev, } static DEVICE_ATTR(age, S_IRUGO, age_show, NULL); +static ssize_t state_of_health_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + if (!this_chip) { + pr_err("mmi_charger: chip is invalid\n"); + return -ENODEV; + } + + return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%d\n", this_chip->age); +} + +static DEVICE_ATTR(state_of_health, S_IRUGO, state_of_health_show, NULL); + +static ssize_t first_usage_date_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + if (!this_chip) { + pr_err("mmi_charger: chip is invalid\n"); + return -ENODEV; + } + + return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%d\n", this_chip->first_usage_date); +} + +static ssize_t first_usage_date_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned long r; + unsigned long first_usage_date; + + if (!this_chip) { + pr_err("mmi_charger: chip is invalid\n"); + return -ENODEV; + } + + r = kstrtoul(buf, 0, &first_usage_date); + if (r) { + mmi_err(this_chip, "Invalid first_usage_date value = %lu\n", first_usage_date); + return -EINVAL; + } + + this_chip->first_usage_date = first_usage_date; + + return r ? r : count; +} + +static DEVICE_ATTR(first_usage_date, 0644, first_usage_date_show, first_usage_date_store); + +static ssize_t manufacturing_date_show(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + if (!this_chip) { + pr_err("mmi_charger: chip is invalid\n"); + return -ENODEV; + } + + return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%d\n", this_chip->manufacturing_date); +} + +static ssize_t manufacturing_date_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + unsigned long r; + unsigned long manufacturing_date; + + if (!this_chip) { + pr_err("mmi_charger: chip is invalid\n"); + return -ENODEV; + } + + r = kstrtoul(buf, 0, &manufacturing_date); + if (r) { + mmi_err(this_chip, "Invalid manufacturing_date value = %lu\n", manufacturing_date); + return -EINVAL; + } + + this_chip->manufacturing_date = manufacturing_date; + + return r ? r : count; +} + +static DEVICE_ATTR(manufacturing_date, 0644, manufacturing_date_show, manufacturing_date_store); + static struct attribute * mmi_g[] = { &dev_attr_charge_rate.attr, &dev_attr_age.attr, + &dev_attr_state_of_health.attr, + &dev_attr_manufacturing_date.attr, + &dev_attr_first_usage_date.attr, NULL, }; From 76615754e93ce7f9c428b216b9f6d019fa78dbd3 Mon Sep 17 00:00:00 2001 From: xuyf4 Date: Mon, 1 Apr 2024 10:01:38 +0800 Subject: [PATCH 42/45] mmi_smbcharger_iio: recharge <=95% PROPAGATED_from (CR) For LOT-x battery requirement recharge <=95% Change-Id: I7ebfcff53bf20da2884795b5ab2f64b8fc0afef5 Reviewed-on: https://gerrit.mot.com/2923293 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: liujian Reviewed-by: Xiangpo Zhao Submit-Approved: Jira Key Signed-off-by: Robert Cabral Reviewed-on: https://gerrit.mot.com/3157741 Reviewed-by: Hugo Cuffa Reviewed-by: Andrea dos Santos Submit-Approved: Andrea dos Santos --- .../mmi-smbcharger-iio/mmi-smbcharger-iio.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c index bcd4db30b1d1..051b059645d3 100755 --- a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c +++ b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c @@ -528,8 +528,8 @@ struct smb_mmi_charger { bool enable_fcc_large_qg_iterm; /*Battery info*/ - int manufacturing_date; - int first_usage_date; + unsigned long manufacturing_date; + unsigned long first_usage_date; }; #define CHGR_FAST_CHARGE_CURRENT_CFG_REG (CHGR_BASE + 0x61) @@ -3716,7 +3716,11 @@ static void mmi_basic_charge_sm(struct smb_mmi_charger *chip, prm->pres_chrg_step = STEP_FULL; } } else if (prm->pres_chrg_step == STEP_FULL) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,25) + if (stat->batt_soc <= 95) { +#else if (stat->batt_mv < (max_fv_mv - HYST_STEP_MV * 2)) { +#endif prm->chrg_taper_cnt = 0; prm->pres_chrg_step = STEP_NORM; } @@ -4347,7 +4351,6 @@ sch_hb: envp[0] = chrg_rate_string; envp[1] = NULL; } - if (chip->batt_psy) { smb_mmi_power_supply_changed(chip->batt_psy, envp); } else if (chip->qcom_psy) { @@ -4507,7 +4510,12 @@ static int batt_get_prop(struct power_supply *psy, val->intval = chip->last_reported_soc; break; case POWER_SUPPLY_PROP_CYCLE_COUNT: +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,25) + rc = power_supply_get_property(chip->qcom_psy, + psp, val); +#else val->intval = chip->cycles / 100; +#endif break; case POWER_SUPPLY_PROP_HEALTH: if (chip->max_main_psy && chip->max_flip_psy) @@ -4984,7 +4992,7 @@ static ssize_t first_usage_date_show(struct device *dev, return -ENODEV; } - return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%d\n", this_chip->first_usage_date); + return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%lu\n", this_chip->first_usage_date); } static ssize_t first_usage_date_store(struct device *dev, @@ -5021,7 +5029,7 @@ static ssize_t manufacturing_date_show(struct device *dev, return -ENODEV; } - return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%d\n", this_chip->manufacturing_date); + return scnprintf(buf, CHG_SHOW_MAX_SIZE, "%lu\n", this_chip->manufacturing_date); } static ssize_t manufacturing_date_store(struct device *dev, From 986fcfea9d254b9d37e8eacaf113d48030e5957f Mon Sep 17 00:00:00 2001 From: liuyc20 Date: Fri, 27 Sep 2024 17:26:43 +0800 Subject: [PATCH 43/45] mmi_smbcharger_iio: Get batt cycyle_count from qcom_fg PROPAGATED_from (CR) For only use a fuelgauge product, Getting the battery cycle_count value via gauge_phy. Change-Id: I31563e3a18a4154d94b8bf7da9f6a85a8e98c7ab Signed-off-by: liuyc20 Reviewed-on: https://gerrit.mot.com/3099247 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Huosheng Liao Submit-Approved: Jira Key Signed-off-by: Robert Cabral Reviewed-on: https://gerrit.mot.com/3157742 Reviewed-by: Hugo Cuffa Reviewed-by: Yuecai Liu --- drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c index 051b059645d3..e1584db1e159 100755 --- a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c +++ b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c @@ -4510,12 +4510,10 @@ static int batt_get_prop(struct power_supply *psy, val->intval = chip->last_reported_soc; break; case POWER_SUPPLY_PROP_CYCLE_COUNT: -#if LINUX_VERSION_CODE >= KERNEL_VERSION(6,1,25) - rc = power_supply_get_property(chip->qcom_psy, - psp, val); -#else - val->intval = chip->cycles / 100; -#endif + if (chip->max_main_psy && chip->max_flip_psy) + val->intval = chip->cycles / 100; + else + rc = power_supply_get_property(chip->qcom_psy, psp, val); break; case POWER_SUPPLY_PROP_HEALTH: if (chip->max_main_psy && chip->max_flip_psy) From 830d539363da06034c62aa50f46acc0bb6455821 Mon Sep 17 00:00:00 2001 From: liuyc20 Date: Tue, 1 Oct 2024 09:52:46 +0800 Subject: [PATCH 44/45] mmi_smbcharger_iio: allow to set fuelgauge cycle_count PROPAGATED_from (CR) "echo 0 > sys/class/power_supply/battery/cycle_count" to reset qcom gauge cycle_count value. Change-Id: I83433fc51a1863985f31a356c7201f37ad89e7ff Signed-off-by: liuyc20 Reviewed-on: https://gerrit.mot.com/3101113 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Huosheng Liao Submit-Approved: Jira Key Signed-off-by: Robert Cabral Reviewed-on: https://gerrit.mot.com/3157743 Reviewed-by: Hugo Cuffa Reviewed-by: Yuecai Liu --- drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c index e1584db1e159..4c67e9912c35 100755 --- a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c +++ b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c @@ -4578,7 +4578,13 @@ static int batt_set_prop(struct power_supply *psy, switch (prop) { case POWER_SUPPLY_PROP_CYCLE_COUNT: - chip->cycles += val->intval * 100; + if (chip->max_main_psy && chip->max_flip_psy) { + chip->cycles += val->intval * 100; + } else { + rc = power_supply_set_property(chip->qcom_psy, prop, val); + if (rc < 0) + mmi_err(chip, "set cycle_count failed, rc=%d\n", rc); + } break; case POWER_SUPPLY_PROP_CURRENT_MAX: if (val->intval < 0) { From f7d009ddcbf63702d1eb81a8a27ab0d3438ead57 Mon Sep 17 00:00:00 2001 From: liuyc20 Date: Tue, 5 Nov 2024 10:57:45 +0800 Subject: [PATCH 45/45] mmi-smbcharger: the battery age value switch to qcom gauge soh PROPAGATED_from (CR) - the qcom gauge soh is more accurate. - if cycle_count < 50, then age=100. Change-Id: I11d67d5c5336295f0c08b4071754714489291522 Signed-off-by: liuyc20 Reviewed-on: https://gerrit.mot.com/3134495 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Reviewed-by: Haijian Ma Reviewed-by: Huosheng Liao Submit-Approved: Jira Key Signed-off-by: Robert Cabral Reviewed-on: https://gerrit.mot.com/3157744 Reviewed-by: Hugo Cuffa Reviewed-by: Yuecai Liu --- .../mmi-smbcharger-iio/mmi-smbcharger-iio.c | 56 ++++++++++++------- 1 file changed, 36 insertions(+), 20 deletions(-) diff --git a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c index 4c67e9912c35..f569304b3b0a 100755 --- a/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c +++ b/drivers/power/mmi-smbcharger-iio/mmi-smbcharger-iio.c @@ -740,6 +740,7 @@ enum smb_mmi_ext_iio_channels { SMB5_QG_CHARGE_FULL, SMB5_QG_CHARGE_FULL_DESIGN, SMB5_QG_BATT_FULL_CURRENT, + SMB5_QG_SOH, }; static const char * const smb_mmi_ext_iio_chan_name[] = { @@ -763,6 +764,7 @@ static const char * const smb_mmi_ext_iio_chan_name[] = { [SMB5_QG_CHARGE_FULL] = "charge_full", [SMB5_QG_CHARGE_FULL_DESIGN] = "charge_full_design", [SMB5_QG_BATT_FULL_CURRENT] = "batt_full_current", + [SMB5_QG_SOH] = "soh", }; bool is_chan_valid(struct smb_mmi_charger *chip, @@ -4234,29 +4236,40 @@ static void mmi_heartbeat_work(struct work_struct *work) } } else if (!chip->factory_mode) { - cap_err = 0; - rc = smb_mmi_read_iio_chan(chip, - SMB5_QG_CHARGE_FULL, - &pval.intval); + //Get soh from qcom gauge, or soh=age=fcc/fcc_designed + rc = smb_mmi_read_iio_chan(chip, SMB5_QG_SOH, &pval.intval); if (rc < 0) { - mmi_err(chip, "Couldn't get charge full\n"); - cap_err = rc; - } else - main_cap = pval.intval; + mmi_err(chip, "Couldn't get qcom battery soh\n"); + //chip->age = 100; + cap_err = 0; + rc = smb_mmi_read_iio_chan(chip, + SMB5_QG_CHARGE_FULL, + &pval.intval); + if (rc < 0) { + mmi_err(chip, "Couldn't get charge full\n"); + cap_err = rc; + } else + main_cap = pval.intval; - rc = smb_mmi_read_iio_chan(chip, - SMB5_QG_CHARGE_FULL_DESIGN, - &pval.intval); - if (rc < 0) { - mmi_err(chip, "Couldn't get charge full design\n"); - cap_err = rc; - } else - main_cap_full = pval.intval; + rc = smb_mmi_read_iio_chan(chip, + SMB5_QG_CHARGE_FULL_DESIGN, + &pval.intval); + if (rc < 0) { + mmi_err(chip, "Couldn't get charge full design\n"); + cap_err = rc; + } else + main_cap_full = pval.intval; - if (cap_err == 0) - chip->age = ((main_cap / 10) / (main_cap_full / 1000)); + if (cap_err == 0) + chip->age = ((main_cap / 10) / (main_cap_full / 1000)); - mmi_dbg(chip, "Age %d\n", chip->age); + mmi_dbg(chip, "mmi_age %d\n", chip->age); + } else { + chip->age = pval.intval; + mmi_dbg(chip, "get qg soh=%d\n", chip->age); + if (chip->cycles < 50) + chip->age = 100; + } /* Fall here for Basic Step and Thermal Charging */ mmi_basic_charge_sm(chip, &chg_stat); @@ -4512,8 +4525,11 @@ static int batt_get_prop(struct power_supply *psy, case POWER_SUPPLY_PROP_CYCLE_COUNT: if (chip->max_main_psy && chip->max_flip_psy) val->intval = chip->cycles / 100; - else + else { rc = power_supply_get_property(chip->qcom_psy, psp, val); + if (rc >= 0) + chip->cycles = val->intval; + } break; case POWER_SUPPLY_PROP_HEALTH: if (chip->max_main_psy && chip->max_flip_psy)