mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-09 05:39:54 -04:00
Use touch mmi class method to do FW upgrade
TP: Use touch mmi class method and init.mmi.touch.sh to do FW upgrade. Change-Id: I300c90b6b5a8eda86cc2c52d9595e9a3a13698cf Signed-off-by: zhuwg1 <zhuwg1@motorola.com> Reviewed-on: https://gerrit.mot.com/2184720 SLTApproved: Slta Waiver SME-Granted: SME Approvals Granted Tested-by: Jira Key Reviewed-by: litong <litong20@motorola.com> Reviewed-by: Jichao Zou <zoujc@motorola.com> Submit-Approved: Jira Key
This commit is contained in:
parent
3e3487b5e2
commit
501e4a44f1
4 changed files with 71 additions and 1 deletions
|
|
@ -815,6 +815,9 @@ static int cyttsp5_check_firmware_config_version(struct device *dev, u16 fw_conf
|
|||
|
||||
static int cyttsp5_check_firmware_version_builtin(struct device *dev, const struct firmware *fw)
|
||||
{
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
struct cyttsp5_core_data *cd = dev_get_drvdata(dev);
|
||||
#endif
|
||||
struct cyttsp5_loader_data *ld = cyttsp5_get_loader_data(dev);
|
||||
u32 fw_ver_new;
|
||||
u32 fw_revctrl_new;
|
||||
|
|
@ -829,6 +832,15 @@ static int cyttsp5_check_firmware_version_builtin(struct device *dev, const stru
|
|||
return CYTTSP5_AUTO_LOAD_FOR_CORRUPTED_FW;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
if(cd->force_fw_upgrade == 1) {
|
||||
cd->force_fw_upgrade = 0;
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
fw_ver_new = get_unaligned_be16(fw->data + 3);
|
||||
/* 4 middle bytes are not used */
|
||||
fw_revctrl_new = get_unaligned_be32(fw->data + 9);
|
||||
|
|
@ -1067,7 +1079,7 @@ static DEVICE_ATTR(pt_bl_from_file, S_IRUGO | S_IWUSR,
|
|||
* - Panel ID not enabled: cyttsp5_fw.bin
|
||||
* - Panel ID enabled: cyttsp5_fw_pidXX.bin
|
||||
*/
|
||||
static char *generate_firmware_filename(struct device *dev)
|
||||
static __maybe_unused char *generate_firmware_filename(struct device *dev)
|
||||
{
|
||||
char *filename;
|
||||
u8 panel_id;
|
||||
|
|
@ -1092,6 +1104,9 @@ static char *generate_firmware_filename(struct device *dev)
|
|||
|
||||
static int upgrade_firmware_from_builtin(struct device *dev)
|
||||
{
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
struct cyttsp5_core_data *cd = dev_get_drvdata(dev);
|
||||
#endif
|
||||
struct cyttsp5_loader_data *ld = cyttsp5_get_loader_data(dev);
|
||||
char *filename;
|
||||
int retval;
|
||||
|
|
@ -1105,7 +1120,16 @@ retry_bl:
|
|||
"%s: Enabling firmware class loader built-in\n",
|
||||
__func__);
|
||||
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
filename = kzalloc(CYTTSP5_FIRMWARE_NAME_MAX_LEN, GFP_KERNEL);
|
||||
if (!filename)
|
||||
return -ENOMEM;
|
||||
|
||||
snprintf(filename, CYTTSP5_FIRMWARE_NAME_MAX_LEN, "%s", cd->firmware_name);
|
||||
#else
|
||||
filename = generate_firmware_filename(dev);
|
||||
#endif
|
||||
|
||||
if (!filename)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
@ -1732,8 +1756,22 @@ static DEVICE_ATTR(manual_upgrade, S_IWUSR,
|
|||
NULL, cyttsp5_manual_upgrade_store);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
static int cyttsp5_loader_firmware_update(struct device *dev,
|
||||
char *fwname)
|
||||
{
|
||||
struct cyttsp5_loader_data *ld = cyttsp5_get_loader_data(dev);
|
||||
cyttsp5_fw_and_config_upgrade(&ld->fw_and_config_upgrade);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static int cyttsp5_loader_probe(struct device *dev, void **data)
|
||||
{
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
struct cyttsp5_core_data *cd = dev_get_drvdata(dev);
|
||||
#endif
|
||||
struct cyttsp5_loader_data *ld;
|
||||
struct cyttsp5_platform_data *pdata = dev_get_platdata(dev);
|
||||
int rc;
|
||||
|
|
@ -1816,12 +1854,16 @@ static int cyttsp5_loader_probe(struct device *dev, void **data)
|
|||
mutex_init(&ld->config_lock);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_INPUT_TOUCHSCREEN_MMI
|
||||
cd->firmware_update = cyttsp5_loader_firmware_update;
|
||||
#else
|
||||
#ifdef UPGRADE_FW_AND_CONFIG_IN_PROBE
|
||||
/* Call FW and config upgrade directly in probe */
|
||||
cyttsp5_fw_and_config_upgrade(&ld->fw_and_config_upgrade);
|
||||
#else
|
||||
INIT_WORK(&ld->fw_and_config_upgrade, cyttsp5_fw_and_config_upgrade);
|
||||
schedule_work(&ld->fw_and_config_upgrade);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
dev_info(dev, "%s: Successful probe %s\n", __func__, dev_name(dev));
|
||||
|
|
|
|||
|
|
@ -1031,6 +1031,9 @@ struct cyttsp5_core_data {
|
|||
|
||||
/* touchscreen_mmi */
|
||||
struct ts_mmi_class_methods *imports;
|
||||
int (*firmware_update)(struct device *dev, char *fwname);
|
||||
char firmware_name[CYTTSP5_FIRMWARE_NAME_MAX_LEN];
|
||||
bool force_fw_upgrade;
|
||||
};
|
||||
struct gd_sensor {
|
||||
int32_t cm_min;
|
||||
|
|
|
|||
|
|
@ -151,6 +151,27 @@ static int cyttsp5_ts_mmi_methods_reset(struct device *dev, int type) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int cyttsp5_ts_firmware_update(struct device *dev, char *fwname) {
|
||||
struct cyttsp5_core_data *cd = dev_get_drvdata(dev);
|
||||
ASSERT_PTR(cd);
|
||||
|
||||
dev_info(dev, "%s, HW request update fw, %s", __func__, fwname);
|
||||
|
||||
if (!fwname) {
|
||||
dev_err(dev, "%s: Error, firmware name is null\n",
|
||||
__func__);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if ( !cd->firmware_update)
|
||||
return -ENOSYS;
|
||||
|
||||
cd->force_fw_upgrade = 1;
|
||||
snprintf(cd->firmware_name, CYTTSP5_FIRMWARE_NAME_MAX_LEN, "%s", fwname);
|
||||
|
||||
return cd->firmware_update(dev, fwname);
|
||||
}
|
||||
|
||||
static struct ts_mmi_methods cyttsp5_ts_mmi_methods = {
|
||||
.get_vendor = cyttsp5_ts_mmi_methods_get_vendor,
|
||||
.get_class_entry_name = cyttsp5_mmi_get_class_entry_name,
|
||||
|
|
@ -164,6 +185,8 @@ static struct ts_mmi_methods cyttsp5_ts_mmi_methods = {
|
|||
.get_flashprog = cyttsp5_ts_mmi_methods_get_flashprog,
|
||||
/* SET methods */
|
||||
.reset = cyttsp5_ts_mmi_methods_reset,
|
||||
/* Firmware */
|
||||
.firmware_update = cyttsp5_ts_firmware_update,
|
||||
};
|
||||
|
||||
int cyttsp5_ts_mmi_dev_register(struct device *dev) {
|
||||
|
|
|
|||
|
|
@ -58,6 +58,8 @@ __stringify(CY_DRIVER_NAME) \
|
|||
|
||||
#define CYTTSP5_MAX_STR_LABLE_LEN 64
|
||||
|
||||
#define CYTTSP5_FIRMWARE_NAME_MAX_LEN 64
|
||||
|
||||
enum cyttsp5_core_platform_flags {
|
||||
CY_CORE_FLAG_NONE,
|
||||
CY_CORE_FLAG_POWEROFF_ON_SLEEP = 0x02,
|
||||
|
|
|
|||
Loading…
Reference in a new issue