f34                16 drivers/input/rmi4/rmi_f34.c static int rmi_f34_write_bootloader_id(struct f34_data *f34)
f34                18 drivers/input/rmi4/rmi_f34.c 	struct rmi_function *fn = f34->fn;
f34                45 drivers/input/rmi4/rmi_f34.c static int rmi_f34_command(struct f34_data *f34, u8 command,
f34                48 drivers/input/rmi4/rmi_f34.c 	struct rmi_function *fn = f34->fn;
f34                53 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_write_bootloader_id(f34);
f34                58 drivers/input/rmi4/rmi_f34.c 	init_completion(&f34->v5.cmd_done);
f34                60 drivers/input/rmi4/rmi_f34.c 	ret = rmi_read(rmi_dev, f34->v5.ctrl_address, &f34->v5.status);
f34                62 drivers/input/rmi4/rmi_f34.c 		dev_err(&f34->fn->dev,
f34                68 drivers/input/rmi4/rmi_f34.c 	f34->v5.status |= command & 0x0f;
f34                70 drivers/input/rmi4/rmi_f34.c 	ret = rmi_write(rmi_dev, f34->v5.ctrl_address, f34->v5.status);
f34                72 drivers/input/rmi4/rmi_f34.c 		dev_err(&f34->fn->dev,
f34                78 drivers/input/rmi4/rmi_f34.c 	if (!wait_for_completion_timeout(&f34->v5.cmd_done,
f34                81 drivers/input/rmi4/rmi_f34.c 		ret = rmi_read(rmi_dev, f34->v5.ctrl_address, &f34->v5.status);
f34                83 drivers/input/rmi4/rmi_f34.c 			dev_err(&f34->fn->dev,
f34                89 drivers/input/rmi4/rmi_f34.c 		if (f34->v5.status & 0x7f) {
f34                90 drivers/input/rmi4/rmi_f34.c 			dev_err(&f34->fn->dev,
f34                92 drivers/input/rmi4/rmi_f34.c 				__func__, command, f34->v5.status);
f34               103 drivers/input/rmi4/rmi_f34.c 	struct f34_data *f34 = dev_get_drvdata(&fn->dev);
f34               107 drivers/input/rmi4/rmi_f34.c 	if (f34->bl_version == 5) {
f34               108 drivers/input/rmi4/rmi_f34.c 		ret = rmi_read(f34->fn->rmi_dev, f34->v5.ctrl_address,
f34               114 drivers/input/rmi4/rmi_f34.c 			complete(&f34->v5.cmd_done);
f34               116 drivers/input/rmi4/rmi_f34.c 		ret = rmi_read_block(f34->fn->rmi_dev,
f34               117 drivers/input/rmi4/rmi_f34.c 				     f34->fn->fd.data_base_addr +
f34               118 drivers/input/rmi4/rmi_f34.c 						f34->v7.off.flash_status,
f34               124 drivers/input/rmi4/rmi_f34.c 			complete(&f34->v7.cmd_done);
f34               130 drivers/input/rmi4/rmi_f34.c static int rmi_f34_write_blocks(struct f34_data *f34, const void *data,
f34               133 drivers/input/rmi4/rmi_f34.c 	struct rmi_function *fn = f34->fn;
f34               149 drivers/input/rmi4/rmi_f34.c 				      data, f34->v5.block_size);
f34               156 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_command(f34, command, F34_IDLE_WAIT_MS, false);
f34               167 drivers/input/rmi4/rmi_f34.c 		data += f34->v5.block_size;
f34               168 drivers/input/rmi4/rmi_f34.c 		f34->update_progress += f34->v5.block_size;
f34               169 drivers/input/rmi4/rmi_f34.c 		f34->update_status = (f34->update_progress * 100) /
f34               170 drivers/input/rmi4/rmi_f34.c 			f34->update_size;
f34               176 drivers/input/rmi4/rmi_f34.c static int rmi_f34_write_firmware(struct f34_data *f34, const void *data)
f34               178 drivers/input/rmi4/rmi_f34.c 	return rmi_f34_write_blocks(f34, data, f34->v5.fw_blocks,
f34               182 drivers/input/rmi4/rmi_f34.c static int rmi_f34_write_config(struct f34_data *f34, const void *data)
f34               184 drivers/input/rmi4/rmi_f34.c 	return rmi_f34_write_blocks(f34, data, f34->v5.config_blocks,
f34               188 drivers/input/rmi4/rmi_f34.c static int rmi_f34_enable_flash(struct f34_data *f34)
f34               190 drivers/input/rmi4/rmi_f34.c 	return rmi_f34_command(f34, F34_ENABLE_FLASH_PROG,
f34               194 drivers/input/rmi4/rmi_f34.c static int rmi_f34_flash_firmware(struct f34_data *f34,
f34               197 drivers/input/rmi4/rmi_f34.c 	struct rmi_function *fn = f34->fn;
f34               202 drivers/input/rmi4/rmi_f34.c 	f34->update_progress = 0;
f34               203 drivers/input/rmi4/rmi_f34.c 	f34->update_size = image_size + config_size;
f34               207 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_command(f34, F34_ERASE_ALL,
f34               214 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_write_firmware(f34, syn_fw->data);
f34               226 drivers/input/rmi4/rmi_f34.c 			ret = rmi_f34_command(f34, F34_ERASE_CONFIG,
f34               234 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_write_config(f34, &syn_fw->data[image_size]);
f34               242 drivers/input/rmi4/rmi_f34.c static int rmi_f34_update_firmware(struct f34_data *f34,
f34               254 drivers/input/rmi4/rmi_f34.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               260 drivers/input/rmi4/rmi_f34.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               266 drivers/input/rmi4/rmi_f34.c 	if (image_size && image_size != f34->v5.fw_blocks * f34->v5.block_size) {
f34               267 drivers/input/rmi4/rmi_f34.c 		dev_err(&f34->fn->dev,
f34               269 drivers/input/rmi4/rmi_f34.c 			image_size, f34->v5.fw_blocks * f34->v5.block_size);
f34               275 drivers/input/rmi4/rmi_f34.c 	    config_size != f34->v5.config_blocks * f34->v5.block_size) {
f34               276 drivers/input/rmi4/rmi_f34.c 		dev_err(&f34->fn->dev,
f34               279 drivers/input/rmi4/rmi_f34.c 			f34->v5.config_blocks * f34->v5.block_size);
f34               285 drivers/input/rmi4/rmi_f34.c 		dev_err(&f34->fn->dev, "Bad firmware image: no config data\n");
f34               290 drivers/input/rmi4/rmi_f34.c 	dev_info(&f34->fn->dev, "Firmware image OK\n");
f34               291 drivers/input/rmi4/rmi_f34.c 	mutex_lock(&f34->v5.flash_mutex);
f34               293 drivers/input/rmi4/rmi_f34.c 	ret = rmi_f34_flash_firmware(f34, syn_fw);
f34               295 drivers/input/rmi4/rmi_f34.c 	mutex_unlock(&f34->v5.flash_mutex);
f34               303 drivers/input/rmi4/rmi_f34.c 	struct f34_data *f34 = dev_get_drvdata(&fn->dev);
f34               309 drivers/input/rmi4/rmi_f34.c 	return f34->update_status;
f34               318 drivers/input/rmi4/rmi_f34.c 	struct f34_data *f34;
f34               321 drivers/input/rmi4/rmi_f34.c 		f34 = dev_get_drvdata(&fn->dev);
f34               323 drivers/input/rmi4/rmi_f34.c 		if (f34->bl_version == 5)
f34               325 drivers/input/rmi4/rmi_f34.c 					 f34->bootloader_id[0],
f34               326 drivers/input/rmi4/rmi_f34.c 					 f34->bootloader_id[1]);
f34               329 drivers/input/rmi4/rmi_f34.c 					 f34->bootloader_id[1],
f34               330 drivers/input/rmi4/rmi_f34.c 					 f34->bootloader_id[0]);
f34               344 drivers/input/rmi4/rmi_f34.c 	struct f34_data *f34;
f34               347 drivers/input/rmi4/rmi_f34.c 		f34 = dev_get_drvdata(&fn->dev);
f34               349 drivers/input/rmi4/rmi_f34.c 		return scnprintf(buf, PAGE_SIZE, "%s\n", f34->configuration_id);
f34               363 drivers/input/rmi4/rmi_f34.c 	struct f34_data *f34;
f34               371 drivers/input/rmi4/rmi_f34.c 	f34 = dev_get_drvdata(&data->f34_container->dev);
f34               373 drivers/input/rmi4/rmi_f34.c 	if (f34->bl_version == 7) {
f34               378 drivers/input/rmi4/rmi_f34.c 	} else if (f34->bl_version != 5) {
f34               385 drivers/input/rmi4/rmi_f34.c 	if (f34->bl_version == 7)
f34               386 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34v7_start_reflash(f34, fw);
f34               388 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_enable_flash(f34);
f34               413 drivers/input/rmi4/rmi_f34.c 	f34 = dev_get_drvdata(&data->f34_container->dev);
f34               416 drivers/input/rmi4/rmi_f34.c 	if (f34->bl_version == 7)
f34               417 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34v7_do_reflash(f34, fw);
f34               419 drivers/input/rmi4/rmi_f34.c 		ret = rmi_f34_update_firmware(f34, fw);
f34               422 drivers/input/rmi4/rmi_f34.c 		f34->update_status = ret;
f34               423 drivers/input/rmi4/rmi_f34.c 		dev_err(&f34->fn->dev,
f34               426 drivers/input/rmi4/rmi_f34.c 		dev_info(&f34->fn->dev, "Firmware update complete\n");
f34               522 drivers/input/rmi4/rmi_f34.c 	struct f34_data *f34;
f34               528 drivers/input/rmi4/rmi_f34.c 	f34 = devm_kzalloc(&fn->dev, sizeof(struct f34_data), GFP_KERNEL);
f34               529 drivers/input/rmi4/rmi_f34.c 	if (!f34)
f34               532 drivers/input/rmi4/rmi_f34.c 	f34->fn = fn;
f34               533 drivers/input/rmi4/rmi_f34.c 	dev_set_drvdata(&fn->dev, f34);
f34               537 drivers/input/rmi4/rmi_f34.c 		return rmi_f34v7_probe(f34);
f34               539 drivers/input/rmi4/rmi_f34.c 	f34->bl_version = 5;
f34               549 drivers/input/rmi4/rmi_f34.c 	snprintf(f34->bootloader_id, sizeof(f34->bootloader_id),
f34               552 drivers/input/rmi4/rmi_f34.c 	mutex_init(&f34->v5.flash_mutex);
f34               553 drivers/input/rmi4/rmi_f34.c 	init_completion(&f34->v5.cmd_done);
f34               555 drivers/input/rmi4/rmi_f34.c 	f34->v5.block_size = get_unaligned_le16(&f34_queries[3]);
f34               556 drivers/input/rmi4/rmi_f34.c 	f34->v5.fw_blocks = get_unaligned_le16(&f34_queries[5]);
f34               557 drivers/input/rmi4/rmi_f34.c 	f34->v5.config_blocks = get_unaligned_le16(&f34_queries[7]);
f34               558 drivers/input/rmi4/rmi_f34.c 	f34->v5.ctrl_address = fn->fd.data_base_addr + F34_BLOCK_DATA_OFFSET +
f34               559 drivers/input/rmi4/rmi_f34.c 		f34->v5.block_size;
f34               563 drivers/input/rmi4/rmi_f34.c 		f34->bootloader_id);
f34               565 drivers/input/rmi4/rmi_f34.c 		f34->v5.block_size);
f34               567 drivers/input/rmi4/rmi_f34.c 		f34->v5.fw_blocks);
f34               569 drivers/input/rmi4/rmi_f34.c 		f34->v5.config_blocks);
f34               579 drivers/input/rmi4/rmi_f34.c 		snprintf(f34->configuration_id, sizeof(f34->configuration_id),
f34               585 drivers/input/rmi4/rmi_f34.c 			 f34->configuration_id);
f34               308 drivers/input/rmi4/rmi_f34.h int rmi_f34v7_start_reflash(struct f34_data *f34, const struct firmware *fw);
f34               309 drivers/input/rmi4/rmi_f34.h int rmi_f34v7_do_reflash(struct f34_data *f34, const struct firmware *fw);
f34               310 drivers/input/rmi4/rmi_f34.h int rmi_f34v7_probe(struct f34_data *f34);
f34                21 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_read_flash_status(struct f34_data *f34)
f34                27 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34                28 drivers/input/rmi4/rmi_f34v7.c 			f34->fn->fd.data_base_addr + f34->v7.off.flash_status,
f34                32 drivers/input/rmi4/rmi_f34v7.c 		rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34                37 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.in_bl_mode = status >> 7;
f34                38 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.flash_status = status & 0x1f;
f34                40 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.flash_status != 0x00) {
f34                41 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: status=%d, command=0x%02x\n",
f34                42 drivers/input/rmi4/rmi_f34v7.c 			__func__, f34->v7.flash_status, f34->v7.command);
f34                45 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34                46 drivers/input/rmi4/rmi_f34v7.c 			f34->fn->fd.data_base_addr + f34->v7.off.flash_cmd,
f34                50 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to read flash command\n",
f34                55 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.command = command;
f34                60 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_wait_for_idle(struct f34_data *f34, int timeout_ms)
f34                66 drivers/input/rmi4/rmi_f34v7.c 	if (!wait_for_completion_timeout(&f34->v7.cmd_done, timeout)) {
f34                67 drivers/input/rmi4/rmi_f34v7.c 		dev_warn(&f34->fn->dev, "%s: Timed out waiting for idle status\n",
f34                75 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_command_single_transaction(struct f34_data *f34,
f34                82 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.data_base_addr;
f34               121 drivers/input/rmi4/rmi_f34v7.c 	data_1_5.payload[0] = f34->bootloader_id[0];
f34               122 drivers/input/rmi4/rmi_f34v7.c 	data_1_5.payload[1] = f34->bootloader_id[1];
f34               124 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               125 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.partition_id,
f34               128 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev,
f34               137 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_command(struct f34_data *f34, u8 cmd)
f34               143 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.data_base_addr;
f34               169 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Invalid command 0x%02x\n",
f34               174 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.command = command;
f34               185 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_command_single_transaction(f34, cmd);
f34               194 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev, "%s: writing cmd %02X\n",
f34               197 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               198 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.flash_cmd,
f34               201 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write flash command\n",
f34               209 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_partition_id(struct f34_data *f34, u8 cmd)
f34               215 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.data_base_addr;
f34               223 drivers/input/rmi4/rmi_f34v7.c 		if (f34->v7.config_area == v7_UI_CONFIG_AREA)
f34               225 drivers/input/rmi4/rmi_f34v7.c 		else if (f34->v7.config_area == v7_DP_CONFIG_AREA)
f34               227 drivers/input/rmi4/rmi_f34v7.c 		else if (f34->v7.config_area == v7_PM_CONFIG_AREA)
f34               229 drivers/input/rmi4/rmi_f34v7.c 		else if (f34->v7.config_area == v7_BL_CONFIG_AREA)
f34               231 drivers/input/rmi4/rmi_f34v7.c 		else if (f34->v7.config_area == v7_FLASH_CONFIG_AREA)
f34               259 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Invalid command 0x%02x\n",
f34               264 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               265 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.partition_id,
f34               268 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write partition ID\n",
f34               276 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_read_partition_table(struct f34_data *f34)
f34               284 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.data_base_addr;
f34               286 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_FLASH_CONFIG_AREA;
f34               288 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_partition_id(f34, v7_CMD_READ_CONFIG);
f34               292 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               293 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.block_number,
f34               296 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write block number\n",
f34               301 drivers/input/rmi4/rmi_f34v7.c 	put_unaligned_le16(f34->v7.flash_config_length, &length);
f34               303 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               304 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.transfer_length,
f34               307 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write transfer length\n",
f34               312 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34               314 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_command(f34, v7_CMD_READ_CONFIG);
f34               316 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write command\n",
f34               324 drivers/input/rmi4/rmi_f34v7.c 		rmi_f34v7_read_flash_status(f34);
f34               326 drivers/input/rmi4/rmi_f34v7.c 		if (f34->v7.command == v7_CMD_IDLE &&
f34               327 drivers/input/rmi4/rmi_f34v7.c 		    f34->v7.flash_status == 0x00) {
f34               332 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34               333 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.payload,
f34               334 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.read_config_buf,
f34               335 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.partition_table_bytes);
f34               337 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to read block data\n",
f34               345 drivers/input/rmi4/rmi_f34v7.c static void rmi_f34v7_parse_partition_table(struct f34_data *f34,
f34               356 drivers/input/rmi4/rmi_f34v7.c 	for (i = 0; i < f34->v7.partitions; i++) {
f34               361 drivers/input/rmi4/rmi_f34v7.c 		rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               368 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               375 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               382 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               388 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               395 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               401 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               407 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               413 drivers/input/rmi4/rmi_f34v7.c 			rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               421 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_read_queries_bl_version(struct f34_data *f34)
f34               429 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.query_base_addr;
f34               431 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34               436 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev,
f34               443 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34               448 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to read queries 1 to 7\n",
f34               453 drivers/input/rmi4/rmi_f34v7.c 	f34->bootloader_id[0] = query_1_7.bl_minor_revision;
f34               454 drivers/input/rmi4/rmi_f34v7.c 	f34->bootloader_id[1] = query_1_7.bl_major_revision;
f34               456 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev, "Bootloader V%d.%d\n",
f34               457 drivers/input/rmi4/rmi_f34v7.c 		f34->bootloader_id[1], f34->bootloader_id[0]);
f34               462 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_read_queries(struct f34_data *f34)
f34               472 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.query_base_addr;
f34               474 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34               479 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev,
f34               486 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34               491 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to read queries 1 to 7\n",
f34               496 drivers/input/rmi4/rmi_f34v7.c 	f34->bootloader_id[0] = query_1_7.bl_minor_revision;
f34               497 drivers/input/rmi4/rmi_f34v7.c 	f34->bootloader_id[1] = query_1_7.bl_major_revision;
f34               499 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.block_size = le16_to_cpu(query_1_7.block_size);
f34               500 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.flash_config_length =
f34               502 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.payload_length = le16_to_cpu(query_1_7.payload_length);
f34               504 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev, "%s: f34->v7.block_size = %d\n",
f34               505 drivers/input/rmi4/rmi_f34v7.c 		 __func__, f34->v7.block_size);
f34               507 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.off.flash_status = V7_FLASH_STATUS_OFFSET;
f34               508 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.off.partition_id = V7_PARTITION_ID_OFFSET;
f34               509 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.off.block_number = V7_BLOCK_NUMBER_OFFSET;
f34               510 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.off.transfer_length = V7_TRANSFER_LENGTH_OFFSET;
f34               511 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.off.flash_cmd = V7_COMMAND_OFFSET;
f34               512 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.off.payload = V7_PAYLOAD_OFFSET;
f34               514 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.has_display_cfg = query_1_7.partition_support[1] & HAS_DISP_CFG;
f34               515 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.has_guest_code =
f34               521 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_read_block(f34->fn->rmi_dev,
f34               522 drivers/input/rmi4/rmi_f34v7.c 				f34->fn->fd.control_base_addr,
f34               532 drivers/input/rmi4/rmi_f34v7.c 		snprintf(f34->configuration_id, sizeof(f34->configuration_id),
f34               535 drivers/input/rmi4/rmi_f34v7.c 		rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev, "Configuration ID: %s\n",
f34               536 drivers/input/rmi4/rmi_f34v7.c 			f34->configuration_id);
f34               539 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.partitions = 0;
f34               541 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.partitions += hweight8(query_1_7.partition_support[i]);
f34               543 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev, "%s: Supported partitions: %*ph\n",
f34               548 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.partition_table_bytes = f34->v7.partitions * 8 + 2;
f34               550 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.read_config_buf = devm_kzalloc(&f34->fn->dev,
f34               551 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.partition_table_bytes,
f34               553 drivers/input/rmi4/rmi_f34v7.c 	if (!f34->v7.read_config_buf) {
f34               554 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.read_config_buf_size = 0;
f34               558 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.read_config_buf_size = f34->v7.partition_table_bytes;
f34               559 drivers/input/rmi4/rmi_f34v7.c 	ptable = f34->v7.read_config_buf;
f34               561 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_read_partition_table(f34);
f34               563 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to read partition table\n",
f34               568 drivers/input/rmi4/rmi_f34v7.c 	rmi_f34v7_parse_partition_table(f34, ptable,
f34               569 drivers/input/rmi4/rmi_f34v7.c 					&f34->v7.blkcount, &f34->v7.phyaddr);
f34               574 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_check_ui_firmware_size(struct f34_data *f34)
f34               578 drivers/input/rmi4/rmi_f34v7.c 	block_count = f34->v7.img.ui_firmware.size / f34->v7.block_size;
f34               579 drivers/input/rmi4/rmi_f34v7.c 	f34->update_size += block_count;
f34               581 drivers/input/rmi4/rmi_f34v7.c 	if (block_count != f34->v7.blkcount.ui_firmware) {
f34               582 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev,
f34               584 drivers/input/rmi4/rmi_f34v7.c 			block_count, f34->v7.blkcount.ui_firmware);
f34               591 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_check_ui_config_size(struct f34_data *f34)
f34               595 drivers/input/rmi4/rmi_f34v7.c 	block_count = f34->v7.img.ui_config.size / f34->v7.block_size;
f34               596 drivers/input/rmi4/rmi_f34v7.c 	f34->update_size += block_count;
f34               598 drivers/input/rmi4/rmi_f34v7.c 	if (block_count != f34->v7.blkcount.ui_config) {
f34               599 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "UI config size mismatch\n");
f34               606 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_check_dp_config_size(struct f34_data *f34)
f34               610 drivers/input/rmi4/rmi_f34v7.c 	block_count = f34->v7.img.dp_config.size / f34->v7.block_size;
f34               611 drivers/input/rmi4/rmi_f34v7.c 	f34->update_size += block_count;
f34               613 drivers/input/rmi4/rmi_f34v7.c 	if (block_count != f34->v7.blkcount.dp_config) {
f34               614 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "Display config size mismatch\n");
f34               621 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_check_guest_code_size(struct f34_data *f34)
f34               625 drivers/input/rmi4/rmi_f34v7.c 	block_count = f34->v7.img.guest_code.size / f34->v7.block_size;
f34               626 drivers/input/rmi4/rmi_f34v7.c 	f34->update_size += block_count;
f34               628 drivers/input/rmi4/rmi_f34v7.c 	if (block_count != f34->v7.blkcount.guest_code) {
f34               629 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "Guest code size mismatch\n");
f34               636 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_check_bl_config_size(struct f34_data *f34)
f34               640 drivers/input/rmi4/rmi_f34v7.c 	block_count = f34->v7.img.bl_config.size / f34->v7.block_size;
f34               641 drivers/input/rmi4/rmi_f34v7.c 	f34->update_size += block_count;
f34               643 drivers/input/rmi4/rmi_f34v7.c 	if (block_count != f34->v7.blkcount.bl_config) {
f34               644 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "Bootloader config size mismatch\n");
f34               651 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_erase_config(struct f34_data *f34)
f34               655 drivers/input/rmi4/rmi_f34v7.c 	dev_info(&f34->fn->dev, "Erasing config...\n");
f34               657 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34               659 drivers/input/rmi4/rmi_f34v7.c 	switch (f34->v7.config_area) {
f34               661 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_command(f34, v7_CMD_ERASE_UI_CONFIG);
f34               666 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_command(f34, v7_CMD_ERASE_DISP_CONFIG);
f34               671 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_command(f34, v7_CMD_ERASE_BL_CONFIG);
f34               677 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_wait_for_idle(f34, F34_ERASE_WAIT_MS);
f34               684 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_erase_guest_code(struct f34_data *f34)
f34               688 drivers/input/rmi4/rmi_f34v7.c 	dev_info(&f34->fn->dev, "Erasing guest code...\n");
f34               690 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34               692 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_command(f34, v7_CMD_ERASE_GUEST_CODE);
f34               696 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_wait_for_idle(f34, F34_ERASE_WAIT_MS);
f34               703 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_erase_all(struct f34_data *f34)
f34               707 drivers/input/rmi4/rmi_f34v7.c 	dev_info(&f34->fn->dev, "Erasing firmware...\n");
f34               709 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34               711 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_command(f34, v7_CMD_ERASE_UI_FIRMWARE);
f34               715 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_wait_for_idle(f34, F34_ERASE_WAIT_MS);
f34               719 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_UI_CONFIG_AREA;
f34               720 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_erase_config(f34);
f34               724 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.has_display_cfg) {
f34               725 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.config_area = v7_DP_CONFIG_AREA;
f34               726 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_erase_config(f34);
f34               731 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.new_partition_table && f34->v7.has_guest_code) {
f34               732 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_erase_guest_code(f34);
f34               740 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_read_blocks(struct f34_data *f34,
f34               752 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.data_base_addr;
f34               754 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_partition_id(f34, command);
f34               758 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               759 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.block_number,
f34               762 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write block number\n",
f34               767 drivers/input/rmi4/rmi_f34v7.c 	max_transfer = min(f34->v7.payload_length,
f34               768 drivers/input/rmi4/rmi_f34v7.c 			   (u16)(PAGE_SIZE / f34->v7.block_size));
f34               774 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_write_block(f34->fn->rmi_dev,
f34               775 drivers/input/rmi4/rmi_f34v7.c 				base + f34->v7.off.transfer_length,
f34               778 drivers/input/rmi4/rmi_f34v7.c 			dev_err(&f34->fn->dev,
f34               784 drivers/input/rmi4/rmi_f34v7.c 		init_completion(&f34->v7.cmd_done);
f34               786 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_command(f34, command);
f34               790 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_wait_for_idle(f34, F34_ENABLE_WAIT_MS);
f34               794 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_read_block(f34->fn->rmi_dev,
f34               795 drivers/input/rmi4/rmi_f34v7.c 				base + f34->v7.off.payload,
f34               796 drivers/input/rmi4/rmi_f34v7.c 				&f34->v7.read_config_buf[index],
f34               797 drivers/input/rmi4/rmi_f34v7.c 				transfer * f34->v7.block_size);
f34               799 drivers/input/rmi4/rmi_f34v7.c 			dev_err(&f34->fn->dev,
f34               805 drivers/input/rmi4/rmi_f34v7.c 		index += (transfer * f34->v7.block_size);
f34               812 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_f34v7_blocks(struct f34_data *f34,
f34               824 drivers/input/rmi4/rmi_f34v7.c 	base = f34->fn->fd.data_base_addr;
f34               826 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_partition_id(f34, command);
f34               830 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_write_block(f34->fn->rmi_dev,
f34               831 drivers/input/rmi4/rmi_f34v7.c 			base + f34->v7.off.block_number,
f34               834 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to write block number\n",
f34               839 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.payload_length > (PAGE_SIZE / f34->v7.block_size))
f34               840 drivers/input/rmi4/rmi_f34v7.c 		max_transfer = PAGE_SIZE / f34->v7.block_size;
f34               842 drivers/input/rmi4/rmi_f34v7.c 		max_transfer = f34->v7.payload_length;
f34               848 drivers/input/rmi4/rmi_f34v7.c 		init_completion(&f34->v7.cmd_done);
f34               850 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_write_block(f34->fn->rmi_dev,
f34               851 drivers/input/rmi4/rmi_f34v7.c 				base + f34->v7.off.transfer_length,
f34               854 drivers/input/rmi4/rmi_f34v7.c 			dev_err(&f34->fn->dev,
f34               860 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_command(f34, command);
f34               864 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_write_block(f34->fn->rmi_dev,
f34               865 drivers/input/rmi4/rmi_f34v7.c 				base + f34->v7.off.payload,
f34               866 drivers/input/rmi4/rmi_f34v7.c 				block_ptr, transfer * f34->v7.block_size);
f34               868 drivers/input/rmi4/rmi_f34v7.c 			dev_err(&f34->fn->dev,
f34               874 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_wait_for_idle(f34, F34_ENABLE_WAIT_MS);
f34               878 drivers/input/rmi4/rmi_f34v7.c 		block_ptr += (transfer * f34->v7.block_size);
f34               880 drivers/input/rmi4/rmi_f34v7.c 		f34->update_progress += transfer;
f34               881 drivers/input/rmi4/rmi_f34v7.c 		f34->update_status = (f34->update_progress * 100) /
f34               882 drivers/input/rmi4/rmi_f34v7.c 				     f34->update_size;
f34               888 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_config(struct f34_data *f34)
f34               890 drivers/input/rmi4/rmi_f34v7.c 	return rmi_f34v7_write_f34v7_blocks(f34, f34->v7.config_data,
f34               891 drivers/input/rmi4/rmi_f34v7.c 					    f34->v7.config_block_count,
f34               895 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_ui_config(struct f34_data *f34)
f34               897 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_UI_CONFIG_AREA;
f34               898 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_data = f34->v7.img.ui_config.data;
f34               899 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_size = f34->v7.img.ui_config.size;
f34               900 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_block_count = f34->v7.config_size / f34->v7.block_size;
f34               902 drivers/input/rmi4/rmi_f34v7.c 	return rmi_f34v7_write_config(f34);
f34               905 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_dp_config(struct f34_data *f34)
f34               907 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_DP_CONFIG_AREA;
f34               908 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_data = f34->v7.img.dp_config.data;
f34               909 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_size = f34->v7.img.dp_config.size;
f34               910 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_block_count = f34->v7.config_size / f34->v7.block_size;
f34               912 drivers/input/rmi4/rmi_f34v7.c 	return rmi_f34v7_write_config(f34);
f34               915 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_guest_code(struct f34_data *f34)
f34               917 drivers/input/rmi4/rmi_f34v7.c 	return rmi_f34v7_write_f34v7_blocks(f34, f34->v7.img.guest_code.data,
f34               918 drivers/input/rmi4/rmi_f34v7.c 					    f34->v7.img.guest_code.size /
f34               919 drivers/input/rmi4/rmi_f34v7.c 							f34->v7.block_size,
f34               923 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_flash_config(struct f34_data *f34)
f34               927 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_FLASH_CONFIG_AREA;
f34               928 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_data = f34->v7.img.fl_config.data;
f34               929 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_size = f34->v7.img.fl_config.size;
f34               930 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_block_count = f34->v7.config_size / f34->v7.block_size;
f34               932 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.config_block_count != f34->v7.blkcount.fl_config) {
f34               933 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Flash config size mismatch\n",
f34               938 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34               940 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_command(f34, v7_CMD_ERASE_FLASH_CONFIG);
f34               944 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34               947 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_wait_for_idle(f34, F34_WRITE_WAIT_MS);
f34               951 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_config(f34);
f34               958 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_partition_table(struct f34_data *f34)
f34               963 drivers/input/rmi4/rmi_f34v7.c 	block_count = f34->v7.blkcount.bl_config;
f34               964 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_BL_CONFIG_AREA;
f34               965 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_size = f34->v7.block_size * block_count;
f34               966 drivers/input/rmi4/rmi_f34v7.c 	devm_kfree(&f34->fn->dev, f34->v7.read_config_buf);
f34               967 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.read_config_buf = devm_kzalloc(&f34->fn->dev,
f34               968 drivers/input/rmi4/rmi_f34v7.c 					       f34->v7.config_size, GFP_KERNEL);
f34               969 drivers/input/rmi4/rmi_f34v7.c 	if (!f34->v7.read_config_buf) {
f34               970 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.read_config_buf_size = 0;
f34               974 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.read_config_buf_size = f34->v7.config_size;
f34               976 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_read_blocks(f34, block_count, v7_CMD_READ_CONFIG);
f34               980 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_erase_config(f34);
f34               984 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_flash_config(f34);
f34               988 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_BL_CONFIG_AREA;
f34               989 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_data = f34->v7.read_config_buf;
f34               990 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_size = f34->v7.img.bl_config.size;
f34               991 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_block_count = f34->v7.config_size / f34->v7.block_size;
f34               993 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_config(f34);
f34              1000 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_write_firmware(struct f34_data *f34)
f34              1004 drivers/input/rmi4/rmi_f34v7.c 	blk_count = f34->v7.img.ui_firmware.size / f34->v7.block_size;
f34              1006 drivers/input/rmi4/rmi_f34v7.c 	return rmi_f34v7_write_f34v7_blocks(f34, f34->v7.img.ui_firmware.data,
f34              1010 drivers/input/rmi4/rmi_f34v7.c static void rmi_f34v7_compare_partition_tables(struct f34_data *f34)
f34              1012 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.phyaddr.ui_firmware != f34->v7.img.phyaddr.ui_firmware) {
f34              1013 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.new_partition_table = true;
f34              1017 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.phyaddr.ui_config != f34->v7.img.phyaddr.ui_config) {
f34              1018 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.new_partition_table = true;
f34              1022 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.has_display_cfg &&
f34              1023 drivers/input/rmi4/rmi_f34v7.c 	    f34->v7.phyaddr.dp_config != f34->v7.img.phyaddr.dp_config) {
f34              1024 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.new_partition_table = true;
f34              1028 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.has_guest_code &&
f34              1029 drivers/input/rmi4/rmi_f34v7.c 	    f34->v7.phyaddr.guest_code != f34->v7.img.phyaddr.guest_code) {
f34              1030 drivers/input/rmi4/rmi_f34v7.c 		f34->v7.new_partition_table = true;
f34              1034 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.new_partition_table = false;
f34              1037 drivers/input/rmi4/rmi_f34v7.c static void rmi_f34v7_parse_img_header_10_bl_container(struct f34_data *f34,
f34              1048 drivers/input/rmi4/rmi_f34v7.c 	num_of_containers = f34->v7.img.bootloader.size / 4 - 1;
f34              1051 drivers/input/rmi4/rmi_f34v7.c 		addr = get_unaligned_le32(f34->v7.img.bootloader.data + i * 4);
f34              1059 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.bl_config.data = content;
f34              1060 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.bl_config.size = length;
f34              1064 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.lockdown.data = content;
f34              1065 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.lockdown.size = length;
f34              1073 drivers/input/rmi4/rmi_f34v7.c static void rmi_f34v7_parse_image_header_10(struct f34_data *f34)
f34              1081 drivers/input/rmi4/rmi_f34v7.c 	const void *image = f34->v7.image;
f34              1086 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.img.checksum = le32_to_cpu(header->checksum);
f34              1088 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev, "%s: f34->v7.img.checksum=%X\n",
f34              1089 drivers/input/rmi4/rmi_f34v7.c 		__func__, f34->v7.img.checksum);
f34              1107 drivers/input/rmi4/rmi_f34v7.c 		rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34              1114 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.ui_firmware.data = content;
f34              1115 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.ui_firmware.size = length;
f34              1119 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.ui_config.data = content;
f34              1120 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.ui_config.size = length;
f34              1123 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.bl_version = *content;
f34              1124 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.bootloader.data = content;
f34              1125 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.bootloader.size = length;
f34              1126 drivers/input/rmi4/rmi_f34v7.c 			rmi_f34v7_parse_img_header_10_bl_container(f34, image);
f34              1129 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.contains_guest_code = true;
f34              1130 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.guest_code.data = content;
f34              1131 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.guest_code.size = length;
f34              1134 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.contains_display_cfg = true;
f34              1135 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.dp_config.data = content;
f34              1136 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.dp_config.size = length;
f34              1139 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.contains_flash_config = true;
f34              1140 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.fl_config.data = content;
f34              1141 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.fl_config.size = length;
f34              1144 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.contains_firmware_id = true;
f34              1145 drivers/input/rmi4/rmi_f34v7.c 			f34->v7.img.firmware_id =
f34              1154 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_parse_image_info(struct f34_data *f34)
f34              1156 drivers/input/rmi4/rmi_f34v7.c 	const struct image_header_10 *header = f34->v7.image;
f34              1158 drivers/input/rmi4/rmi_f34v7.c 	memset(&f34->v7.img, 0x00, sizeof(f34->v7.img));
f34              1160 drivers/input/rmi4/rmi_f34v7.c 	rmi_dbg(RMI_DEBUG_FN, &f34->fn->dev,
f34              1166 drivers/input/rmi4/rmi_f34v7.c 		rmi_f34v7_parse_image_header_10(f34);
f34              1169 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "Unsupported image file format %02X\n",
f34              1174 drivers/input/rmi4/rmi_f34v7.c 	if (!f34->v7.img.contains_flash_config) {
f34              1175 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: No flash config in fw image\n",
f34              1180 drivers/input/rmi4/rmi_f34v7.c 	rmi_f34v7_parse_partition_table(f34, f34->v7.img.fl_config.data,
f34              1181 drivers/input/rmi4/rmi_f34v7.c 			&f34->v7.img.blkcount, &f34->v7.img.phyaddr);
f34              1183 drivers/input/rmi4/rmi_f34v7.c 	rmi_f34v7_compare_partition_tables(f34);
f34              1188 drivers/input/rmi4/rmi_f34v7.c int rmi_f34v7_do_reflash(struct f34_data *f34, const struct firmware *fw)
f34              1192 drivers/input/rmi4/rmi_f34v7.c 	f34->fn->rmi_dev->driver->set_irq_bits(f34->fn->rmi_dev,
f34              1193 drivers/input/rmi4/rmi_f34v7.c 					       f34->fn->irq_mask);
f34              1195 drivers/input/rmi4/rmi_f34v7.c 	rmi_f34v7_read_queries_bl_version(f34);
f34              1197 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.image = fw->data;
f34              1198 drivers/input/rmi4/rmi_f34v7.c 	f34->update_progress = 0;
f34              1199 drivers/input/rmi4/rmi_f34v7.c 	f34->update_size = 0;
f34              1201 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_parse_image_info(f34);
f34              1205 drivers/input/rmi4/rmi_f34v7.c 	if (!f34->v7.new_partition_table) {
f34              1206 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_check_ui_firmware_size(f34);
f34              1210 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_check_ui_config_size(f34);
f34              1214 drivers/input/rmi4/rmi_f34v7.c 		if (f34->v7.has_display_cfg &&
f34              1215 drivers/input/rmi4/rmi_f34v7.c 		    f34->v7.img.contains_display_cfg) {
f34              1216 drivers/input/rmi4/rmi_f34v7.c 			ret = rmi_f34v7_check_dp_config_size(f34);
f34              1221 drivers/input/rmi4/rmi_f34v7.c 		if (f34->v7.has_guest_code && f34->v7.img.contains_guest_code) {
f34              1222 drivers/input/rmi4/rmi_f34v7.c 			ret = rmi_f34v7_check_guest_code_size(f34);
f34              1227 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_check_bl_config_size(f34);
f34              1232 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_erase_all(f34);
f34              1236 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.new_partition_table) {
f34              1237 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_partition_table(f34);
f34              1240 drivers/input/rmi4/rmi_f34v7.c 		dev_info(&f34->fn->dev, "%s: Partition table programmed\n",
f34              1244 drivers/input/rmi4/rmi_f34v7.c 	dev_info(&f34->fn->dev, "Writing firmware (%d bytes)...\n",
f34              1245 drivers/input/rmi4/rmi_f34v7.c 		 f34->v7.img.ui_firmware.size);
f34              1247 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_firmware(f34);
f34              1251 drivers/input/rmi4/rmi_f34v7.c 	dev_info(&f34->fn->dev, "Writing config (%d bytes)...\n",
f34              1252 drivers/input/rmi4/rmi_f34v7.c 		 f34->v7.img.ui_config.size);
f34              1254 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_UI_CONFIG_AREA;
f34              1255 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_ui_config(f34);
f34              1259 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.has_display_cfg && f34->v7.img.contains_display_cfg) {
f34              1260 drivers/input/rmi4/rmi_f34v7.c 		dev_info(&f34->fn->dev, "Writing display config...\n");
f34              1262 drivers/input/rmi4/rmi_f34v7.c 		ret = rmi_f34v7_write_dp_config(f34);
f34              1267 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.new_partition_table) {
f34              1268 drivers/input/rmi4/rmi_f34v7.c 		if (f34->v7.has_guest_code && f34->v7.img.contains_guest_code) {
f34              1269 drivers/input/rmi4/rmi_f34v7.c 			dev_info(&f34->fn->dev, "Writing guest code...\n");
f34              1271 drivers/input/rmi4/rmi_f34v7.c 			ret = rmi_f34v7_write_guest_code(f34);
f34              1281 drivers/input/rmi4/rmi_f34v7.c static int rmi_f34v7_enter_flash_prog(struct f34_data *f34)
f34              1285 drivers/input/rmi4/rmi_f34v7.c 	f34->fn->rmi_dev->driver->set_irq_bits(f34->fn->rmi_dev, f34->fn->irq_mask);
f34              1287 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_read_flash_status(f34);
f34              1291 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.in_bl_mode)
f34              1294 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34              1296 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_write_command(f34, v7_CMD_ENABLE_FLASH_PROG);
f34              1300 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_wait_for_idle(f34, F34_ENABLE_WAIT_MS);
f34              1307 drivers/input/rmi4/rmi_f34v7.c int rmi_f34v7_start_reflash(struct f34_data *f34, const struct firmware *fw)
f34              1311 drivers/input/rmi4/rmi_f34v7.c 	f34->fn->rmi_dev->driver->set_irq_bits(f34->fn->rmi_dev, f34->fn->irq_mask);
f34              1313 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.config_area = v7_UI_CONFIG_AREA;
f34              1314 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.image = fw->data;
f34              1316 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_parse_image_info(f34);
f34              1320 drivers/input/rmi4/rmi_f34v7.c 	if (!f34->v7.force_update && f34->v7.new_partition_table) {
f34              1321 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Partition table mismatch\n",
f34              1327 drivers/input/rmi4/rmi_f34v7.c 	dev_info(&f34->fn->dev, "Firmware image OK\n");
f34              1329 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_read_flash_status(f34);
f34              1333 drivers/input/rmi4/rmi_f34v7.c 	if (f34->v7.in_bl_mode) {
f34              1334 drivers/input/rmi4/rmi_f34v7.c 		dev_info(&f34->fn->dev, "%s: Device in bootloader mode\n",
f34              1338 drivers/input/rmi4/rmi_f34v7.c 	rmi_f34v7_enter_flash_prog(f34);
f34              1346 drivers/input/rmi4/rmi_f34v7.c int rmi_f34v7_probe(struct f34_data *f34)
f34              1351 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_read_block(f34->fn->rmi_dev,
f34              1352 drivers/input/rmi4/rmi_f34v7.c 			f34->fn->fd.query_base_addr + V7_BOOTLOADER_ID_OFFSET,
f34              1353 drivers/input/rmi4/rmi_f34v7.c 			f34->bootloader_id,
f34              1354 drivers/input/rmi4/rmi_f34v7.c 			sizeof(f34->bootloader_id));
f34              1356 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Failed to read bootloader ID\n",
f34              1361 drivers/input/rmi4/rmi_f34v7.c 	if (f34->bootloader_id[1] == '5') {
f34              1362 drivers/input/rmi4/rmi_f34v7.c 		f34->bl_version = 5;
f34              1363 drivers/input/rmi4/rmi_f34v7.c 	} else if (f34->bootloader_id[1] == '6') {
f34              1364 drivers/input/rmi4/rmi_f34v7.c 		f34->bl_version = 6;
f34              1365 drivers/input/rmi4/rmi_f34v7.c 	} else if (f34->bootloader_id[1] == 7) {
f34              1366 drivers/input/rmi4/rmi_f34v7.c 		f34->bl_version = 7;
f34              1368 drivers/input/rmi4/rmi_f34v7.c 		dev_err(&f34->fn->dev, "%s: Unrecognized bootloader version\n",
f34              1373 drivers/input/rmi4/rmi_f34v7.c 	memset(&f34->v7.blkcount, 0x00, sizeof(f34->v7.blkcount));
f34              1374 drivers/input/rmi4/rmi_f34v7.c 	memset(&f34->v7.phyaddr, 0x00, sizeof(f34->v7.phyaddr));
f34              1376 drivers/input/rmi4/rmi_f34v7.c 	init_completion(&f34->v7.cmd_done);
f34              1378 drivers/input/rmi4/rmi_f34v7.c 	ret = rmi_f34v7_read_queries(f34);
f34              1382 drivers/input/rmi4/rmi_f34v7.c 	f34->v7.force_update = true;